@MySQL學習
MySQL命令
DDL:操作資料庫、表
1. 操作資料庫:CRUD
1. C(Create):創建
*創建資料庫:
create database 資料庫名稱;
*創建資料庫,判斷是否存在:
create database if not exists;
*創建資料庫,并指定字符集
create database 資料庫名稱 character set 字符集名;
*創建db4資料庫,判斷是否存在,并制定字符集為gbk
create database if not exists db4 character set gbk;
2. R(Retrieve):查詢
*查詢所有資料庫的名稱;
show databases;
*查詢某個資料庫的字符集;
show create datdbase 資料庫名稱;
3. U(Update):修改
*修改資料庫的字符集
alter database 資料庫名稱 character set 字符集名稱;`
4. D(Delete):洗掉
*洗掉資料庫
drop database 資料庫名稱;
*判斷資料庫存在,存在再洗掉
drop database if exists 資料庫名稱;
5. 使用資料庫
*查詢當前正在使用的資料庫名稱
select database();
*使用資料庫
use 資料庫名稱;
2. 操作表
1. C(Create):創建
- 語法:
1. Int :整數型別
*age int,
2. Double:小數型別
*score double(5,2)
3. Date:日期,只包含年月日,yyyy-MM—dd
4. Datetime:日期,包含年月日時分秒yyyy-MM—dd HH:mm:ss
5. Timestamp:時間戳型別 包含年月日時分秒yyyy-MM—dd HH:mm:ss
*如果將來不給這個欄位賦值,或賦值為null,則默認使用當前的系統時間,來自動賦值
6. Varchar:字串
*name varchar(20):姓名最大20個字符
*zhangsan 8個字符 張三 2個字符
*創建表
Create table student(
Id int,
Name varchar(32),
Age int,
Socre double(4,1),
Birthday date,
Insert_time timestamp
);
*復制表:
create table 表名 like 被復制的表名;
2. R(Retrieve):查詢
*查詢某個資料庫中所有的表名稱
show tables;
*查詢表結構
desc表名;
3. U(Update):修改
- 修改表名
alter table 表名 rename to 新的表名;
- 修改表的字符集
alter table 表名 character set 字符集名稱;
- 添加一列
alter table 表名 add 列名 資料型別;
- 修改列名稱 型別
alter table 表名 change 列名 新列別 新資料型別;
alter table 表名 modify 列名 新資料型別;
- 洗掉列
alter table 表名 drop 列名;
4. D(Delete):洗掉
drop table 表名;
drop table if exists 表名;
DML :增刪改表中資料
1. 添加資料:
*語法:
insert into 表名(列名1,列名,...列名n) values(值1,值2,...值n);
*注意:
1. 列名和值要一一對應
2. 如果表名后,不定義列名,則默認給所有列添加值
Insert into 表名 values(值1,值2,…值n);
3.除了數字型別,其他型別需要使用引號(單雙都可以)引起來
2. 洗掉資料:
*語法:
delete from 表名 [where 條件]
*注意:
1. 如果不加條件,則洗掉表中所有記錄.
2. 如果要洗掉所有記錄
1. delete from 表名;-- 不推薦使用.有多少條記錄就會執行多少次洗掉操作
2. TRUNCATE TABLE 表名; --推薦使用,效率更高: 先洗掉表,然后再創建一張一樣的表.
3. 修改資料:
*語法
update 表名 set 列名1= 值1,列名2= 值2,...[where 條件];
*注意:
1. 如果不加任何條件,則會將表中所有記錄全部修改.
DDL : 查詢表中的記錄
select * from 表名;
1. 語法:
Select 欄位串列
Form 表名串列
Where 條件串列
Group by 分組欄位
Having 分組之后的條件
Order by 排序
Limit 分頁限定
2. 基礎查詢
- 多個欄位的查詢
Select 欄位名1,欄位名2...from 表名;
*注意:
如果查詢所有欄位,則可以使用來替代欄位串列
- 去除重復
*distinct
- 計算列
*一般可以使用四則運算計算一些列的值.(一般只會進行數值型的計算)
*ifnull(運算式1,運算式2):null參與的運算,計算結果都為null
*運算式1:哪個欄位需要判斷是否為null
*如果該欄位為null后的替換值.
- 起別名
as: as也可以省略
3. 條件查詢
- Where子句后跟條件
- 運算子
*>、<、<=、>=、=、<>
*BETWEEN…AND
*IN(集合)
*LIKE:模糊查詢
*占位符:
*_:單個任意字符
*%:多個任意字符
*IS NULL
*and 或 &&
*or 或 ||
*not 或 !
DQL:查詢陳述句
1. 排序查詢
*語法:order by 子句
*order by 排序欄位1 排序方式1, 排序欄位2 排序方式2…
*排序方式:
*ASC:升序,默認的
*DESC:降序
*注意:
*如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件.
2. 聚合函式:將一列資料作為一個整體,進行縱向的計算.
- Count:計算個數
- 一般選擇非空的列:主鍵
- Count(*)
- Max:計算最大值
- Min:計算最小值
- Sum:計算和
- Avg:計算平均值
*注意:聚合函式的計算,排除null值.
解決方案:
1)選擇不包含非空的列進行計算
2)IFNULL函式
3. 分組查詢
- 語法:group by 分組欄位;
- 注意:
- 分組之后查詢的欄位:分組欄位、聚合函式
- Where 和 having 的區別?
- Where在分組之前進行限定,如果不滿足條件,則不參與分組.having在分組之后進行限定,如果不完組結果,則不會被查詢出來
- Where后不可以跟聚合函式,having可以進行聚合函式的判斷.
- 分頁查詢
- 語法:limit 開始的索引,每頁查詢的條數;
- 公式:開始的索引 = (當前的頁碼 - 1)*每頁顯示的條數
- 分頁操作是一個MySQL”方言”
約束
*概念:對表中的資料進行限定,保證資料的正確性、有效性和完整性.
*分類:
1. 主鍵約束:primary key
2. 非空約束:not null
3. 唯一約束:unique
4. 外鍵約束:foreign key
1.非空約束:not null
- 創建表時添加約束
CREATE TABLE stu(
Id INT,
NAME VARCHAR(20) NOT NULL –name 為非空
)
- 創建表完后,添加非空約束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
- 洗掉name的非空約束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
2.唯一約束:unique, 某一列的值不能重復
- 注意:
*唯一約束可以有NULL值,但是只能有一條記錄為NULL - 在創建表時,條件唯一約束
CREATE TABLE stu(
Id INT,
Phone_number VARCHAR(20) UNIQUE
);
- 洗掉唯一約束
ALTER TABLE stu DROP INDEX phone_number;
- 在表創建完后,添加唯一約束
ALTER TABLE stu MODIFY phone_number VAECHAR(20) UNIQUE;
3.主鍵約束:primary key.
1.注意:
- 含義:非空且唯一
- 一張表只能有一個欄位為主鍵
- 主鍵就是表中記錄的唯一標識
2.在創建表時,添加主鍵約束
Create table stu(
Id int primary key , -- 給id添加主鍵約束
Name varchar(20)
);
3.洗掉主鍵
--錯誤 alter table stu modify id int ;
ALTER TABLE stu DROP PRIMARY KEY;
4.創建完表后,添加主鍵
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
5.自動增長:
- 概念:如果某一列是數值型別的,使用 auto_increment 可以來完成值的自動增長
- 在創建表時,添加主鍵約束,并完成自動增長
Create table stu(
Id int primary key auto_increment,--給id添加主鍵約束
Name varchar(20)
);
- 洗掉自動增長
ALTER TABLE stu MODIFY id INT;
- 添加自動增長
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
4.外鍵約束:foreign key,讓表與表產生關系,從而保證資料的正確性.
- 在創建表時,可以添加外鍵
*語法:
Create table 表名(
......
外鍵列
Constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主串列名稱)
);
- 洗掉外鍵
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
- 創建表之后,添加外鍵
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵欄位名稱) REFERENCES 主表名稱(主串列名稱);
- 級聯操作
1.添加級聯操作
語法:
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱
FOREIGN KEY (外鍵欄位名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE ;
2.分類:
- 級聯更新: ON UPDATE CASCADE
- 級聯洗掉: ON DELETE CASCADE
資料庫的設計
1.多表之間的關系
1.分類
- 一對一(了解):
*如:人和身份證
* 分析:一個人只有一個身份證,一個身份證只能對應一個人 - 一對多(多對一):
*如;部門和員工
* 分析:一個部門有多個員工,一個員工只能對應一個部門 - 多對多:
*如:學生和課程
*分析:一個學生可以選擇很多門課程,一個課程也可以被很多學生選擇
2.實作關系
- 一對多(多對一):
*如:部門和員工
*實作方式:在多的一方建立外鍵,指向一的一方的主鍵 - 多對多:
* 如:學生和課程
* 實作方式:多對多關系實作需要借助第三張中間表,中間至少包含兩個欄位,這兩個欄位作為第三張表的外鍵,分別指向兩張表的主鍵 - 一對一(了解):
*如:人和身份證
*實作方式:一對一關系實作,可以在任意一方添加唯一外鍵指向另一方的主鍵,
2.資料庫設計的范式
*概念:設計資料庫時,遵循的一些規范,
設計關系資料庫時,遵從不同的規范要求,設計出合理的關系型資料庫,這些不同的規范要求被稱為不同的范式,各種范式呈遞次規范,越高的范式資料庫冗余越小,
目前關系資料庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式),
*分類:
1.第一范式(1NF):每一列都是不可分割的原子資料項,
2.第二范式(2NF):在1NF的基礎上,非碼屬性必須完全依賴于候選碼(在1NF基礎上消除非主屬性對主碼的部分函式依賴)
3.第三范式(3NF):在2NF基礎上,任何非主屬性不依賴于其它非主屬性(在2NF基礎上消除傳遞依賴)
4.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/281441.html
標籤:其他