表的完整性約束翻譯
約束條件與數據類型的寬度同樣,都是可選參數ip
做用:用於保證數據的完整性和一致性內存
主要分爲:rem
not null 標識該字段不能爲空innodb
default 爲該字段設置默認值table
unsigned 無符號date
zerofill 使用0填充service
auto_increment 標識該字段的自動增加(整數類型,並且爲主鍵)數據類型
primary key 標識該字段爲該表的主鍵,能夠惟一的標識記錄im
foreign key 標識該字段爲該表的外鍵
unique key 標識該字段的值是惟一的
1、not null與default
create table t1(
id int primary key auto_increment,
name varchar(16) not null,
sex enum(‘nale’,’female’) not null default ‘male’
);
Insert into t1(name) values(‘egon’),(‘lxx’),(‘alex’);
2、unique key
create table t2(x int unique);
create table t3(
x int,
y varchar(5),
unique key(x)
);
create table t4(
x int,
y varchar(5),
constraint uni_x unique key(X)
); # 給鍵取名
create table service(
ip varchar(15),
port int,
unique key(ip,port)
); # 聯合惟一
3、primary key
站在約束角度看primary key = not null unique
之後但凡建表,必須注意:
一、必須有且只有一個主鍵
二、一般是id字段被設置爲主鍵
create table t5(
id int primary key auto_increment
);
# 補充存儲引擎:
create table t12(x int)engine='myisam'; #會建立三個文件
create table t13(x int)engine='innodb'; #通常都用這個,建立兩個,主鍵與數據在一個表中
create table t14(x int)engine='memory'; #內存中,服務端關機消失
create table t15(x int)engine='blackhole'; #不會有任何數據信息
4、foreign key:限制關聯表某一個字段的值必是來自於被關聯表的一個字段的
注意:
1.被關聯的字段必須是一個key,一般是id字段
2.建立表時:必須先創建被關聯的表,才能創建關聯表
3.插入記錄時:必須先往被關聯的表中插入記錄,才能往關聯表中插入記錄
4.刪除時:應該先刪除關聯表emp中的記錄,再刪除被關聯表對應的記錄
create table dep(
id int primary key auto_increment,
dname varchar(20),
info varchar(50)
);
create table emp(
id int primary key auto_increment,
name varchar(15),
age int,
dep_id int,
foreign key(dep_id) references dep(id)
on update cascade
on delete cascade
);
insert into dep(dname,info) values
(‘IT’,’技術能力有限部門’),
(‘sale’,’文化程度不高部門’),
(‘HR’,’招不到人部門’);
insert into emp(name,age,dep_id) values
('egon',18,1),
('alex',28,2),
('wsj',38,2),
('lxx',30,1),
('xiaohou',18,3);
# 找兩張表的關係的竅門
emp dep
#一、先站在左表的角度:去找左表emp的多條記錄可否對應右表dep的一條記錄
翻譯:多個員工可否屬於一個部門
#二、而後站在右表的角度:去找右表dep的多條記錄可否對應左表emp的一條記錄
翻譯:多個部門可否擁有同一名員工
# 多對一:結果的判斷
#一、若是隻有單向的多對一成立,那麼最終的關係就是多對一
#二、在emp表新增一個字段dep_id, 該字段外鍵關聯dep(id)
# 多對多:結果的判斷
#一、雙向的多對一就是多對多
#二、須要創建第三張表,有一個字段值fk左表,一個字段的值fk右表
create table author(
id int primary key auto_increment,
name varchar(16),
age int
);
create table book(
id int primary key auto_increment,
bname varchar(20),
price int
);
create table author2book(
id int primary key auto_increment,
author_id int,
book_id int,
foreign key(author_id) references author(id) on update cascade on delete cascade,
foreign key(book_id) references book(id) on update cascade on delete cascade
);
# 一對一:無需參考竅門,左表的一條數據惟一對應右表的一條記錄
fk+unique