MySQL建表約束
一、主鍵約束
1、作用:它能夠唯一確定一張表中的一條記錄,也就是我們通過某個字段添加約束,就可以使得該字段不重複且不爲空。
create table user(
id int primary key,
name varchar(20)
);
使用peimary key 修飾後,插入(insert) id就不能爲空和重複了。
2、多個數據加主鍵約束
聯合約束:聯合約束可以在最後添加上primary key(value1,value2)
create table user(
id int primary key,
name varchar(20),
primary key (id,name)
);
聯合主鍵和單個主鍵一樣,任何一個數據都不能爲空。但只有當聯合主鍵裏所有鍵都重複纔不能重複。
二、自增約束
1、作用:自增約束和主鍵約束primary key 搭配在一起可以自動幫我們輸入並增加數據值
create table user(
id int primary key auto_increment,
name varchar(20),
);
因此當我們輸入
insert into user (name) values(‘張三’);
時,數據表自動變成了。 1 張三
三、唯一約束
作用:約束脩飾的字段的值不可以重複。(可以爲空)
create table user(
id int,
name varchar(20) ,
unique(name),
);
因此name不能重複。如果使用unique(name,id)則表示這兩個鍵在一起不重複就行。
四、非空約束
作用:修飾的字段不能爲空NULL。
create table user(
id int,
name varchar(20) not null
);
此時name不能爲空。
五、默認約束
作用:插入字段的時候,如果沒有傳值,就會使用默認值
create table user
id int,
name varchar(20),
age int default 10
);
此時,使用
insert into user(id,name) values(‘1’,‘張三’);
會發現,並沒有給age傳值,但表爲 1 張三 10
六、 外鍵約束
涉及到兩個表:父表,子表(主表,副表)。
創建班級表:
create table classes(
id int primary key,
name varchar(20),
);
創建學生表:
create table students(
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id)
);
insert int (name) classes values(1,'一班');
insert int (name)classes values(3,'二班');
insert int (name) classes values(4,'三班');
insert int (name) classes values(4,'四班');
insert into student values (1001,'張三',1);
insert into student values (1002,'李四',5);//此時會報錯。
外鍵約束作用:
1.主表classes中沒有的數據值,在副標(子表)中,是不可以使用的
2.主表中的記錄被副表引用,是不可刪除的。
七、 如果說我們建表時忘記創建約束了,怎麼辦?
create table user(
id int,
name varchar(20),
);
1、添加約束
alter table user add primary key(id);
2、刪除約束
alter table user drop primary key;
注意:刪除指定字段約束是:(加上index 與字段名)
alter tabe user drop index name;
3、使用modify修改字段添加約束
alter tabll user modify id int primary key;