(七)MySQL常見的數據類型、約束和標識列

一、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);

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章