【一】存儲引擎
1.什么是存儲引擎存儲引擎可以理解為處理數據的不同方式
2.查看存儲引擎show engines;
3.須知的引擎MyISAM5.5之前版本MySQL默認的存儲引擎特點:存取數據的速度快 但是功能很少 安全性較低速度快因為自帶索引InnoDB5.5之后版本MySQL默認的存儲引擎特點:有諸多功能 安全性較高 存取速度沒有MyISAM快BlackHole(吃數據的黑洞)任何寫入的數據都會立刻消失(類似于垃圾回收處理站)Memory(比作是緩存)以內存作為數據存取地 速度快但是斷電立刻丟失
4.自定義選擇存儲引擎語句create table t1(id int)engine=myisam;
【二】各個引擎的特點
1.innodb引擎frm : 存儲的表結構ibd : 存儲表的數據特點:存儲數據持久化存儲退出也存在
2.myisam引擎frm : 存儲的表結構MYD : 表的數據MYI : 表的索引結構特點:存儲數據持久化存儲,退出也存在
3.blackhole引擎frm :存儲的表結構特點:存儲數據不會有任何反應,不會存儲任何數據
4.memory引擎frm:存儲的表結構特點就是基于內存存儲,只要服務重啟,所有數據丟失
【三】創建表的完整語法
create table 表名(字段名1 字段類型(數字) 約束條件,字段名2 字段類型(數字) 約束條件,字段名3 字段類型(數字) 約束條件
);
1.字段名和字段類型是必須的
2.數字和約束條件是可選的
3.約束條件可以寫多個 空格隔開即可(后面詳細講解)字段名1 字段類型(數字) 約束條件1 約束條件2 約束條件3
4.最后一行字段結尾不能加逗號極其容易被忽略!!!
【四】約束條件(null)
約束條件之為空和不為空---》意思為這個字段的數據可以空還是不空
【五】嚴格模式
它要求數據庫在執行某些操作時遵循更嚴格的規則和限制
sql_mode(嚴格模式)
show variables like "%mode";
show variables like "_mode";%匹配任意個字符_只能匹配單個字符
-- 臨時修改 : 退出客戶端重新連接,修改后嚴格模式還是原來的
set session sql_mode = 'STRICT_TRANS_TABLES'
-- 永久修改 : 退出客戶端重新連接,嚴格模式修改會一直生效
set global sql_mode = 'STRICT_TRANS_TABLES'
【六】數據類型
【1】整型
整數類型 | 字節 | 無符號數的取值范圍 | 有符號數的取值范圍 |
---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32767 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 |
INT | 4 | 0~4294967295 | -2147483648~2147483647 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854774808~9223372036854774807 |
1.是否有符號 默認情況下是帶符號的
2.超出最大范圍會如何 超出限制只能存最大接受值
3.字段類型后面跟著的寬度只是顯示的寬度int(4)只顯示四位
4.插入的長度是按照誰,當前字段的最大長度進行限制
5.約束條件之 zerofill會左填充0直到滿足我所給的長度,比我所給的長度長只要沒超限制顯示不用填充
【2】浮點型
數據類型 | 字節數 | 取值范圍 |
---|
FLOAT | 4 | -2^128~2 ^128,即-3.40E+38~+3.40E+38 |
DOUBLE | 8 | -2^1024~ 2^1024,即-1.79E+308~1.79E+308 |
DECIMAL | 設置位數和精度。 | 65 ~ 30 |
?decimal>double>float
"""
雖然三者精確度有差距 但是具體用哪個應該結合實際情況比如正常業務 使用float足夠如果是高精尖 可以使用decimal
"""
【3】字符
1.char定長,給長度 4 位,超出會報錯,不夠默認用空格補全,前提是嚴格模式開啟
2.varchar變長,給 4 個長度,超過四個直接報錯,有幾個存幾個
比較:
(1)char
缺點:浪費空間
優點:存儲簡單
直接按照固定的字符存儲數據即可
(2)varchar
優點:節省空間
缺點:存儲麻煩
存的時候,在真正數據的前面加報頭(表示數據真正大小)
取的時候,需要先讀取報頭,才能讀取真實的數據
【4】日期時間類型
date : 年月日
datetime : 年月日時分秒
time : 時分秒
year : 年份
mysql> create table student(-> id int,-> name varchar(16),-> born_year year,-> birth date,-> study_time time,-> reg_time datetime-> );
insert into student values(1,'dream','2024','2024-5-31','11:11:11','2023-6-30 11:11:11'
);
【5】枚舉和集合類型
枚舉:多選一 用枚舉類型給多個備選項,但是你只能選一個 enum
集合:多選多 用集合類型給多個備選項,但是你能選多個 set
1.枚舉類型 enum:
create table user(id int,name char(16),gender enum('male','female','others')
);
insert into user(id,name,gender) values(1,'dream','male');插數據的時候再枚舉選項中選一個否則會報錯
2.集合類型 set
create table teacher(id int,name varchar(16),gender enum('male','female','others'),hobby set('read books','listen music','play games')
);
insert into teacher values(2,'chimeng','female','read books,listen music'
);
【七】MySQL中有哪些約束條件
1.約束條件之 zerofill會左填充0直到滿足我所給的長度,比我所給的長度長只要沒超限制顯示不用填充
2.null或not null插入的數據是否可以為空
3.DEFAULT(默認約束)為列指定默認值,當插入新記錄時,如果沒有為該列指定值,則使用默認值。
4.UNIQUE(唯一約束),確保列中的所有值都是唯一的。
注意:唯一約束允許NULL值,但最多只能有一個NULL值。
5.PRIMARY KEY(主鍵約束),唯一標識表中的每一行數據,確保主鍵列中的值唯一且不為NULL。
注意:一個表只能有一個主鍵,但主鍵可以由多個列組成(復合主鍵)。
6.FOREIGN KEY(外鍵約束),用于限制兩個表之間的關系,確保從表中的外鍵值在主表中存在。
注意:外鍵約束指向的表必須存在一個對應的主鍵或唯一約束。
7.CHECK(檢查約束),規定一個必須為真的邏輯條件,確保插入到表中的所有數據都滿足這個條件。
注意:MySQL 8.0.16及以后版本開始支持CHECK約束。