一、MySQL常見數據類型
1、數值型:
①整型:tinyint、smllint、mediumint、int/integer、bigint
圖源:尚硅谷李玉婷
案例1:關鍵表格teacher,分別添加有、無符號int型字段
CREATE TABLE teacher(
id INT UNSIGNED,
phone INT
);
注意:定義五符號型字段,直接在數據類型後面添加UNSIGNED,默認爲有符號型。
案例2:插入數據的大小不在定義的數據類型範圍中
INSERT INTO teacher VALUES(-100,12345678900);
插入數據後表中的數據:
注意:當插入的數據不在定義的範圍中時,就近選擇符合條件的數據插入。
案例3:插入一個顯示寬帶爲7的int型字段
ALTER TABLE teacher ADD COLUMN mail_num INT(7);
注意:顯示寬度表示在該字段中最多顯示7個字符的數字。
②小數型:
浮點型:float(M,D)、double(M,D)
定點型:dec(M,D)、decimal(M,D)
注意:D代表小數點後保留D位(四捨五入),M代表小數點前後總位數,定點型精度要高於浮點型(表現在小數點後保留位數)
③字符型:
較短文本:char、varchar(常用)
其他:binary、varbinary、enum(枚舉類型)、set(集合)
較長文本:text、blob
案例1:比較char和varchar
char:固定的長度 默認長度爲1 效率高
varchar:非固定長度 定義時長度不可省略 效率低
案例2:創建新表包含enum類型(枚舉類型),並插入新類型
CREATE TABLE my_str(
NAME ENUM('a','b','c')
);
INSERT INTO my_str VALUES('a');
注意:向枚舉類型中插入數據,僅僅可以插入定義時後面跟隨的諸多數據之一,且不可插入其它數據。
案例3:比較enum和set
INSERT INTO tab_enum VALUES('a');
INSERT INTO tab_set VALUES('a,c,d');
注意:enum同時只可以插入諸多數據之一,但set可同時插入多個,而且向set中插入數據時只能使用一個引號。
④日期型:datetime(8字節,時間範圍大)、timestamp(4字節,受時區影響)
案例1:創建新表my_time,包含兩個字段類型分別爲datetime和imestamp,並插入當前時間
CREATE TABLE my_time(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO my_time VALUES(NOW(),NOW());
表中數據:
修改當前時區:
SET time_zone='+9:00';
再次查看錶中數據:
比較上面兩張圖片可以看出t2的時間發生變化,說明t2的數據類型(TIMESTAMP)受時區影響。
二、MySQL常見約束
1、六大約束:
#1NOT NULL:非空
#2UNIQUE:唯一
#3PRIMARY KEY:主鍵(不可重複也不可爲空)
#4DEDFAULT:默認
#5FOREIGN KEY:外鍵(與其他表相關聯)
#6CHECK:檢查約束(mysql中不支持)
2、語法:
CREATE TABLE 表名(
字段名 字段類型 列級約束,
字段名 字段類型,
表級約束
);
3、添加約束(通用寫法)
從表:
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuname VARCHAR(20),
sex CHAR(1),
age INT DEFAULT 18,
seat INT UNIQUE,
majorid INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
);
主表:
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
注意:
①類型爲UNIQUE的字段類型允許包含NULL但至多隻能包含一個。
②添加外鍵時主表中與從表相關聯的字段要爲key類型(主鍵、唯一)。
③外鍵插入數據時先插入主表再插入從表,刪除數據時先刪除從表再刪除主表。
4、添加/刪除約束條件
#1.添加/刪除非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
#2.添加/刪除默認約束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
ALTER TABLE stuinfo MODIFY COLUMN age INT;
#3.添加/刪除主鍵
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
ALTER TABLE stuinfo DROP PRIMARY KEY;
#4.添加/刪除唯一
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
ALTER TABLE stuinfo DROP INDEX seat;
#5.添加/刪除外鍵
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;#起名便於刪除
注意:
①刪除唯一約束:ALTER TABLE 表名 DROP INDEX 字段名
②添加外鍵:ALTER TABLE 從表名 ADD CONSTRAINT 別名 FOREIGN KEY(字段) REFERENCE 主表名(字段);
③刪除外鍵:ALTER TABLE 從表名 DROP FOREIGN KEY 別名;
三、MySQL標識列
1、創建表時設置自增長列:
CREATE TABLE my_increase(
id INT PRIMARY KEY AUTO_INCREMENT
);
2、添加/刪除自增長列:
ALTER TABLE test_1 MODIFY COLUMN id INT(11) AUTO_INCREMENT;
ALTER TABLE test_1 MODIFY COLUMN id INT(11);
注意:刪除自增長列不使用DROP,而是直接修改表的性質。
3、設置自增長步長:
SET auto_increment_increment=3;
4、修改自增長起點的方法:先將起點數值插入到表中再自增長插入
自增長插入方法(可重複運行該語句):
INSERT INTO my_increase VALUES(NULL);
運行結果: