#常見限制
/*
含義:一種限制,用于限制表中的資料,為了保證資料的準确和可靠性
分類:六大限制
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