天天看點

Mysql學習 限制 辨別列

#常見限制

/*

含義:一種限制,用于限制表中的資料,為了保證資料的準确和可靠性

分類:六大限制

NOT NULL : 非空,用于保證該字段的值不能為空

比如姓名、學号等

DEFAULT	: 預設,用于保證該字段有預設值
			比如性别
			
			PRIMARY KEY : 主鍵,用于保證該字段的值具有唯一性,并且非空
			比如學号、員工編号等
			UNIQUE : 唯一,用于保證該字段的值具有唯一性,可以為空
			比如座位号
			
			CHECK : 檢查限制【mysql中不支援】
			比如年齡、性别
			
			FOREIGN KEY:外鍵,用于限制兩個表的關系,用于保證該字段的值必需來自于主表關聯列的值
			在從表添加外鍵限制,用于引用主表中某列的值
			比如學生表的專業編号,員工表的部門編号
           

添加限制的時機:

1.建立表時

2.修改表時

限制的添加分類:

列級限制:

六大限制文法上都支援,但外鍵限制沒有效果

test 表級限制:

除了非空和預設,其他的都支援

主鍵和唯一的大對比:

保證唯一性 是否允許為空 一個表最多可以有幾個

主鍵 T F

唯一 T F

CREATE TABLE 表名(

字段名 字段類型 列級限制,

字段名 字段類型,

表級限制

)

/

#一、建立表時添加限制

#1.添加列級限制

/

文法:

直接在字段名和類型後面追加 限制類型即可

分類:六大限制

NOT NULL:非空,用于保證該字段的值不能為空

比如姓名、學号等

DEFAULT:預設,用于保證該字段有預設值

比如性别

PRIMARY KEY:主鍵,用于保證該字段的值具有唯一性,并且非空

比如學号、員工編号等

UNIQUE:唯一,用于保證該字段的值具有唯一性,可以為空

比如座位号

CHECK:檢查限制【mysql中不支援】

比如年齡、性别

FOREIGN KEY:外鍵,用于限制兩個表的關系,用于保證該字段的值必須來自于主表的關聯列的值

在從表添加外鍵限制,用于引用主表中某列的值

比如學生表的專業編号,員工表的部門編号,員工表的工種編号

添加限制的時機:

1.建立表時

2.修改表時

限制的添加分類:

列級限制:

六大限制文法上都支援,但外鍵限制沒有效果

表級限制:
	
	除了非空、預設,其他的都支援
           

主鍵和唯一的大對比:

保證唯一性  是否允許為空    一個表中可以有多少個   是否允許組合
主鍵	√						×							至多有1個           √,但不推薦
唯一	√						√							可以有多個          √,但不推薦
           

外鍵:

1、要求在從表設定外鍵關系

2、從表的外鍵列的類型和主表的關聯列的類型要求一緻或相容,名稱無要求

3、主表的關聯列必須是一個key(一般是主鍵或唯一)

4、插入資料時,先插入主表,再插入從表

删除資料時,先删除從表,再删除主表

*/

DROP TABLE stuinfo

CREATE TABLE stuinfo(

id INT PRIMARY KEY,#主鍵

stuName VARCHAR(10) NOT NULL,#非空

gender char(1) CHECK(gender = ‘男’ OR gender = ‘女’),#檢查

seat INT UNIQUE,#預設

age INT DEFAULT 18,#預設限制

majorId INT REFERENCES major(id)#外鍵

)

DESC stuinfo

#檢視表中所有的索引

SHOW INDEX FROM stuinfo

#2。添加标記限制

CREATE TABLE stuinfo1(

id INT ,

stuName VARCHAR(10) ,

gender char(1),

seat INT,

age INT ,

majorId INT,

CONSTRAINT pk PRIMARY KEY(id),#主鍵
	CONSTRAINT uq UNIQUE(seat),#唯一
	CONSTRAINT ck CHECK(gender = '男' OR gender = '女'),#檢查
           

)

#通用的寫法:

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)

);

#二、修改表時添加限制

DROP TABLE IF EXISTS stuinfo;

CREATE TABLE stuinfo(

id INT,

stuname VARCHAR(20),

gender CHAR(1),

seat INT,

age INT,

majorid INT

)

DESC stuinfo;

#1.添加非空限制

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;

#2.添加預設限制

ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

#3.添加主鍵

#①列級限制

ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

#②表級限制

ALTER TABLE stuinfo ADD PRIMARY KEY(id);

#4.添加唯一

#①列級限制

ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;

#②表級限制

ALTER TABLE stuinfo ADD UNIQUE(seat);

#5.添加外鍵

ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);

#三、修改表時删除限制

#1.删除非空限制

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;

#2.删除預設限制

ALTER TABLE stuinfo MODIFY COLUMN age INT ;

#3.删除主鍵

ALTER TABLE stuinfo DROP PRIMARY KEY;

#4.删除唯一

ALTER TABLE stuinfo DROP INDEX seat;

#5.删除外鍵

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

SHOW INDEX FROM stuinfo;

#案例講解

#1.向表emp2的id劣種添加PRIMARY KEY限制(my_emp_id)

ALTER TABLE emp2 MODIFY COLUMN id INT PRIMARY KEY

ALTER TABLE emp2 ADD CONSTRAINT my_emp_id PRIMARY KEY(id)

#2.向表dept2的id劣種添加PRIMARY KEY限制(my_dept_id)

ALTER TABLE empt2 MODIFY COLUMN id INT PRIMARY KEY

#3.向表emp2中添加列dept_id,并在其中定義FOREIGN KEY限制,與之相關聯的列是dept2表中的id列

ALTER TABLE emp2 ADD COLUMN dept_id INT

ALTER TABLE emp2 ADD CONSTRAINT fk_emp2_dept2 FOREIGN KEY(dept_id) REFERENCES dept2(id)

#辨別列

#一、建立表時設定辨別列

CREATE TABLE tab_identity(

id INT PRIMARY KEY,

NAME VARCHAR(20)

)

INSERT INTO tab_identity VALUES(1,‘john’)

DESC tab_identity

DROP TABLE IF EXISTS tab_identity

CREATE TABLE tab_identity(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20)

)

INSERT INTO tab_identity VALUES(NULL,‘john’)

INSERT INTO tab_identity(NAME) VALUES(‘Nancy’)

SELECT * FROM tab_identity

TRUNCATE TABLE table_identity

SET auto_increment_increment = 3#更改辨別列的步長

#二、修改表時設定辨別列

ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT

#三、修改表時删除辨別列

ALTER TABLE tab_identity MODIFY COLUMN id INT

繼續閱讀