含義:一種限制,用於限制表中的數據,為了保證表中數據的准確性和可靠性。
分類:六大約束
1.NOT NULL :非空,用於保證該字段的值不能為空。例如學生表的學生姓名及學號等等。
2.DEFAULT:默認值,用於保證該字段有默認值。例如學生表的學生性別
3.PRIMARY KEY:主鍵,用於保證該字段的值具有唯一性並且非空。例如學生表的學生學號等。
4.UNIQUE:唯一,用於保證該字段的值具有唯一性,可以為空。例如注冊用戶的手機號,身份證號等。
5.CHECK:檢查約束(MySql不支持),檢查字段的值是否為指定的值。
6.FOREIGN KEY:外鍵,用於限制兩個表的關系,用於保證該字段的值必須來自於主表的關聯列的值,在從表添加外鍵約束,用於引用主表中某些的值。例如學生表的專業編號
添加約束的實際:
1.創建表時
2.修改表時
約束的添加分類:
列級約束:六大約束語法上都支持,但外鍵約束沒有效果
表級約束:除了非空、默認、其它的都支持。
示例:
①添加列級約束
1 create table if not exists t_stuinfo( 2 id int primary key, #主鍵 3 stuName varchar(20) not null, #非空 4 gender char(1) check(gender='男' or gender='女'), #檢查約束,MySql沒有效果但不報錯 5 seat int unique, #唯一約束 6 age int default 18, #默認(值)約束 7 majorId int references major(id) #外鍵約束,MySql沒有效果,但不報錯 8 ); 9
②添加表級約束
語法:在創建表字段的最下面
constraint 約束名 約束類型(字段名)
1 create table if not exists t_stuinfo( 2 id int, 3 stuName varchar(20), 4 gender char(1), 5 seat int, 6 age int, 7 majorId int, 8 constraint pk primary key(id), #約束名隨意,主鍵不生效,但不報錯。 9 constraint uq unique(seat), #唯一約束 10 constraint ck check(gender='男' or gender='女'), #檢查約束,MySql不支持此約束,不報錯但不生效 11 constraint fk_stuinfo_major foreign key(majorId) references major(id) #外鍵約束 12 ); 13
主鍵和唯一的區別
約束名稱 | 保證唯一性 | 是否允許為空 | 一個表中可以有多少個 | 是否允許組合 |
主鍵 | √ | × | 最多有1個,可以沒有 | √(不推薦) |
唯一 | √ | √ | 可以有多個 | √(不推薦) |
外鍵:
1.要求在從表中設置外鍵關系
2.從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容,名稱無要求。
3.主表的關聯列必須時一個Key(一般為主鍵或唯一,外鍵也可以但無意義)
4.插入數據時,先插入主表,再插入從表
刪除數據時,先刪除從表,再刪除主表
修改表時添加約束
1.添加非空約束
1 alter table 表名稱 modify column 列名 列類型 not null;
2.添加默認約束
1 alter table 表名稱 modify column 列名 列類型 default 默認值;
3.添加主鍵
①列級約束方式
1 alter table 表名稱 modify column 列名 列類型 primary key;
②表級約束方式
1 alter table 表名稱 add primary key(id);
4.添加唯一
①列級約束
1 alter table 表名稱 modify column 列名 列類型 unique;
②表級約束
1 alter table 表名稱 add unique(列名稱);
5,添加外鍵(列級寫法可行,但無效果)
①表級約束
1 alter table 表名稱 add constraint fk_stuinfo_magor foreign key(magorId) references major(id);
6.添加通用寫法(語法)
①列級約束
1 alter table 表名稱 modify column 列名 列類型 新約束;
②表級約束
1 alter table 表名稱 add constraint 約束名 約束類型(列名稱) [外鍵的引用];
修改表時刪除約束
1.刪除非空約束
1 alter table 表名稱 modify column 列名 列類型 [null];
2.刪除默認約束
1 alter table 表名稱 modify column 列名 列類型;
3.刪除主鍵
①
1 alter table 表名稱 modify column id int;
②
1 alter table 表名稱 drop primary key;
4.刪除唯一
1 alter table 表名稱 drop index(索引名) 設置唯一時的名稱;
5.刪除外鍵
1 alter table 表名稱 drop foreign key(索引名) 設置外鍵時的名稱;
標識列
又稱為自增長列,可以不用手動的插入值,系統提供默認的序列值
特點:
1.標識列必須和一個Key搭配(Key指主鍵、唯一、外鍵....)
2.一個表最多有一個標識列
3.標識列的類型只能是數值型
4.標識列可以通過SET auto_increment_increment = 3;設置步長(全局),可以通過插入行時手動插入標識列值設置起始值。
1.創建表時設置標識列
1 create table user( 2 id int primary key auto_increment, 3 name varchar(20) 4 );
2.修改表時設置標識列
1 alter table 表名稱 modify column id int primary key auto_increment;
3.修改表時刪除標識列
1 alter table 表名稱 modify column id int primary key;