【6】MySQL資料庫

IT行业人员ZZ發表於2024-06-16

MySQL關係型資料庫

什麼是資料庫?
資料庫是存放資料的電子倉庫。以某種方式儲存百萬條,上億條資料,供多個使用者訪問共享。

資料庫分為關係型資料庫和非關聯式資料庫
【1】關係型資料庫:
1)定義:依據關係模型建立的資料庫,把資料儲存在不同的表中,表與表存在著某些關係。
2)舉例:mysql(甲骨文公司的產品),oracle(甲骨文公司的產品收費的),postgresql,db2,sql server(微軟)
3)特點:
安全
保持資料的一致性
實現對錶與表進行復雜的資料查詢
【2】非關係型資料庫:
1)定義:非關係型資料庫也叫nosql資料庫,全稱not only sql。通常資料以物件的形式儲存在資料庫中,不固定結構,例如列模型,鍵值對模型。
2)舉例:redis(鍵值對模型),mongodb(文件類模型),hbase(列模型)
3)特點:
效率高
容易擴充套件
使用更加靈活

資料庫儲存形式
【1】關係型資料庫
關係型資料庫當中有很多張表,以表的形式進行儲存(類似於xlsx格式的Excel工作簿當中有很多的sheet1,sheet2,sheet3的頁面)

【2】非關係型資料庫

===========================================
MySQL關係型資料庫
【1】在web應用方面,Mysql是最好的關係型資料庫管理系統
【2】特點:
1)體積小,安裝簡單,維護成本低
2)開源,免費
3)使用C++編寫
4)支援多系統
【3】原理:MySQL資料庫中有很多庫,可以是自己定義的庫student庫,score庫,每個庫裡面有很多張表

=========================================
在Linux中安裝MySQL資料庫
【安裝】
【1】yum install mysql ==》y ==》安裝客戶端
【2】yum install mysql-server ==》y ==》安裝服務端
【3】rpm -qa|grep -i mysql ==》檢視MySQL是否安裝成功

Linux中安裝資料庫就類似於Windows中安裝APP一樣

【啟動】
【1】service mysqld status ==》檢視MySQL資料庫的狀態

【2】service mysqld start / restart ==》啟動 / 重啟 MySQL資料庫
mysqld(d代表的是daemon守護程序的意思)
【3】service mysqld stop ==》停止執行MySQL資料庫

【登入進入到資料庫】
【1】mysql -uroot -p ==》登入進入到MySQL資料庫中(第一次登入沒有密碼)
-uroot(u 代表 user 使用者 root 使用者)
-p(password 密碼)

【2】MySQL> exit ==》退出MySQL資料庫

【設定密碼】
mysqladmin -uroot password '123456' ==》幫root使用者設定密碼為123456
設定完之後的登入方式:
1)mysql -uroot -p123456
2)mysql -uroot -p ==》Enter password:(輸入123456,密碼不顯示)

資料庫當中有很多表
mysql> 進入庫之後一定一定要加分號 ;
【建立庫】
mysql> show databases; ==》顯示MySQL中所有的資料庫
mysql> create database dcs1; ==》建立dcs1這個資料庫
mysql> drop database dcs1; ==》刪除dcs1這個資料庫
mysql> use dcs1; ==》進入dcs1這個資料庫
mysql> select database(); ==》顯示當前所在的資料庫(dcs1)

【建立表】
mysql> show tables; ==》展示當前所在資料庫(dcs1)中的表
mysql> create table dcs(id int(20) primary key,score float(20) not null,name varchar(20) not null,phone bigint(20) default 153666777); ==》建立一個dcs表的約束
create table + 表名(欄位名稱,資料型別,約束........)
mysql> desc dcs; ==》檢視dcs表的結構(desc —> description)

==========================================
mysql資料庫中的資料型別:
1)數值型:int(儲存整數),bigint(超過10位整數用),float(浮點,預設儲存6位,Float(20,2)指小數點後面2位)
2)文字型:varchar,char(單個字元)==》插入的資料需要加 ' ' 單引號或者 " " 雙引號
3)日期型:date ==》插入的資料需要加 ' ' 單引號或者 " " 雙引號

mysql資料庫中的約束:
1)非空約束:not null(當前欄位id對應的值在表中不能為空)
2)預設值約束:default(當前欄位如果沒有插入指定的值,預設為153666777)
3)主鍵約束:primary key 簡稱:key(當前id這個欄位對應的值是唯一的,不能重複的,比如身份證號碼不能重複)
4)外來鍵約束:foreign key 對錶與表之間的約束(前三個約束是對錶和欄位之間的約束)
5)自增長約束:auto_increment(作用於主鍵上面的)

mysql> show tables; ==》展示當前所在資料庫(dcs1)中的表(dcs)

【查詢資料】
mysql> select * from dcs; ==》查詢dcs表中所有的資料內容
mysql> select name from student; ==》只查詢student表中name列的資料內容
mysql> select id,name from student; ==》查詢student表中name列和id列的資料內容

【查詢並篩選資料】
mysql> select * from student where sex=1; ==》查詢篩選student表中性別為1的資料內容
mysql> select * from student where sex !=1; ==》查詢篩選student表中性別不為1的資料內容
mysql> select * from student where sex <>1; ==》查詢篩選student表中性別不為1的資料內容

mysql> select id,name from student where sex=1; ==》查詢student表中所有性別為1的id列和name列
mysql> select * from student where age between 25 and 30; ==》查詢student表中所有性別為1的id列和name列
mysql> select * from student where age>=25 and age<=30; ==》查詢篩選表中年齡在25和30之間

mysql> select * from student where class in(1833,1835); ==》查詢student表中class只為1833和1835的資料
mysql> select * from student where sex not in(0,1); ==》查詢student表中sex不為0和1的資料

mysql> select * from student where name='xiaoqi' or age=31; ==》有一個滿足條件即可
mysql> select * from student where name='xiaoqi' and age=31; ==》需要同時滿足條件

mysql> select * from student where class is null; ==》查詢class為null的資料

mysql> select * from student limit 5; ==》查詢student表的前五行
mysql> select * from student limit 2,5; ==》表示查詢student表中3-7行的資料(2表示從第幾行開始【預設索引位最開始為0】,5表示取幾行)

===========================================
mysql> select * from student where name like'xia%'; ==》查詢name列中以xia開頭的資料(%表示萬用字元)
mysql> select * from student where name like'%an%'; ==》查詢name列中有包含an的資料
mysql> select * from student where name like'%qi'; ==》查詢name列中以qi結尾的資料

(升序降序排列)
mysql> select * from student order by math desc; ==》按math列降序排列整張表(desc —> descend)
mysql> select * from student order by math asc; ==》按math列升序排列整張表(asc —> ascend)

(分組:和聚合函式一起使用)
聚合函式:
sum()求和
min()求最小值
max()求最大值
distinct()去重
avg()求平均數
count()統計
mysql> select class as '班級',count(
) as '人數' from student group by class; ==》統計每個班級對應的人數(as表示取別名)

============================
mysql> select class,sum(math) from student group by class having sum(math)>100; ==》查詢班級數學總成績大於100分的班級和總成績

【重點】group by 後面通常接having使用,不能接where
mysql> select class,sum(math) as s from student group by class having sum(math)>100; ==》as s 將sum(math)取別名
mysql> select class,sum(math) s from student group by class having sum(math)>100; ==》s 直接將sum(math)取別名

==============================
(查詢聚合函式的簡單到複雜順序)
mysql> select sum(math) from student; ==》求數學成績的總分

mysql> select sum(math) from student group by class; ==》求每個班級數學成績的總分

mysql> select class,sum(math) from student group by class; ==》求每個班級數學成績的總分以及所對應的班級名稱

=======================================
mysql> select distinct(name) from student where sex=0; ==》篩選性別為0,在此基礎上對名字進行去重

【增加資料】
mysql> insert into dcs(id,score,name,phone)values(1,88.886,'xiaowang',1384222); ==》往dcs表中插入一行資料
mysql> insert into dcs(id,score,name,phone,class)values(2,0.00,'xiaohong',153666777,1),(3,99.00,'xiaoyi',19747766688,0); ==》往dcs表中同時插入兩行資料
mysql> insert into dcs values(6,99,'xiaoliu',157567777); ==》不帶欄位直接插入一行資料
mysql> insert into dcs values(7,86,'xiaoqi',15754277),(8,79,'xiaoba',1487666778); ==》不帶欄位同時插入兩行資料
mysql> insert into dcs(id)values(9); ==》插入單個資料
mysql> drop table dcs; ==》刪除dcs整張表(包括表資料和表結構)

【六】對錶資料的操作
【增加表資料】
資料庫當中所有的約束都屬於表結構中的內容
資料庫中分
【1】DDL:資料庫定義語言
==》定義庫和表的命令:create database,create table,alter table,drop table,drop database
【2】DML:資料庫操作語言
==》對錶中資料的操作比如:增刪改查
1)增加:insert into 命令
2)刪除:delete from 表名
3)修改:update 表名 set
4)查詢:select ... from
mysql> alter table dcs rename duoceshi; ==》改表名(將dcs改為duoceshi)
mysql> alter table dcs change id sid int(20); ==》改為其他欄位(將dcs表中的id欄位改為sid)
mysql> alter table dcs change class class int(20) not null; ==》改相同欄位的約束

mysql> alter table dcs add class int(20) first; ==》新增一個欄位(class欄位在最前面)
mysql> alter table dcs add age int(20) after name; ==》新增一個欄位(age欄位在name欄位後面)
mysql> alter table dcs add(sex1 int(20),sex2 int(20)); ==》新增兩個欄位(sex1和sex2)
mysql> alter table dcs drop sex1; ==》刪除一個欄位(dcs1)
mysql> alter table dcs drop sex2,drop age; ==》刪除兩個欄位(sex2和age)
mysql> alter table dcs modify class int(20) after id; ==》調整欄位位置(將class欄位放在id欄位的後面)

對於表中的一個欄位你是怎麼去測試的?
思路:表欄位的資料型別和約束。

【刪除表資料】
null只是一個空的屬性,並不是一個確切的值
對錶刪除的三種方式
1)drop table + 表名 ==》刪除整張表(包括表資料和表結構)
2)truncate +表名 ==》只刪除所有的表內容,不刪除表結構
3)delete from +表名 where +條件 ==》只刪除表中對應條件的內容

mysql> drop table dcs; ==》刪除dcs整張表(包括表資料和表結構)
mysql> truncate dcs; ==》刪除dcs表內容(只刪除表內容,不刪除表結構)
mysql> delete from dcs where score = '100'; ==》刪除dcs表中score等於100對應的行
mysql> delete from dcs where score is null; ==》刪除dcs表中name為空對應的行
mysql> delete from dcs where id >5; ==》刪除dcs表中id大於5的資料

===============================================
【修改表資料】
mysql> update dcs set phone=13888888888 where score=100; ==》修改dcs表中score等於100所對應的phone為13888888888

【複製備份表資料】
mysql> create table word like dcs; ==》建立新表word資料型別像dcs(只有型別一樣,資料內容為空)
mysql> insert into word select * from dcs; ==》建立新表word內容像dcs
mysql> insert into word(id,score) select id,score from dcs; ==》往新表word裡插入id和score內容(此時表結構已經按照dcs建立好了)

【複製備份資料庫】重開一個視窗,雙擊ip地址
步驟如下:
【1】右視窗[root@localhost /]# mysqldump -uroot -p123456 dcs2>/dcs/dcs2.sql ==》將dcs2資料庫備份到根目錄下的dcs目錄中並取名為dcs2.sql
【2】左視窗mysql> drop database dcs2; ==》刪除dcs2資料庫
【3】左視窗mysql> create database dcs2; ==》重新建立一個dcs2的資料庫
【4】右視窗[root@localhost dcs]# mysql -uroot -p123456 dcs2</dcs/dcs2.sql ==》將根目錄下的dcs目錄中的dcs2.sql中的資料還原到資料庫中並取名為dcs2(必須先在資料庫中建立一個名為dcs2的庫才能進行還原)

【mysql的使用者許可權操作】
mysql資料庫中:
localhost是具有本地訪問許可權的使用者
%是具有遠端訪問許可權的使用者
mysql> show databases; ==》顯示所有的庫(其中有一個mysql庫)
mysql> use mysql; ==》進入到mysql庫(庫中有一個user表)
mysql> select * from user; ==》查詢user表中的所有內容
mysql> select host,user from user; ==》查詢user表裡面的host和user欄位

相關文章