一、表的约束条件
1、约束条件与数据类型的宽度一样,都是可选参数
作用:用于保证数据的完整性和一致性
2、主键primary key是innodb存储引擎组织数据的依据,innodb称之为索引(索引是一种树状结构)组织表,一张表中必须有且只有一个主键
ps: 无 primary key字段 ,无not null+unique
就会自动生成一个隐藏字段,
所以建立表的时候要有id字段,不为空且唯一的结构建立主键
作用:加速查询,表结构,表数据文件
# not null default create table t1(x int not null); insert into t1 values(); create table t2(x int not null default 111); insert into t2 values(); # unique # 单列唯一 create table t3(name varchar(10) unique); insert into t3 values("egon"); insert into t3 values("tom"); mysql> insert into t3 values("egon"); ERROR 1062 (23000): Duplicate entry 'egon' for key 'name' # 联合唯一 create table server( id int, name varchar(10), ip varchar(15), port int, unique(ip,port), unique(name) ); insert into server values (1,"web1","10.10.0.11",8080); insert into server values (2,"web2","10.10.0.11",8081); mysql> insert into server values(4,"web4","10.10.0.11",8081); ERROR 1062 (23000): Duplicate entry '10.10.0.11-8081' for key 'ip' mysql> # not null 和unique的化学反应=>会被识别成表的主键 create table t4(id int,name varchar(10) not null unique); create table t5(id int,name varchar(10) unique); # 主键primary key # 特点 # 1、主键的约束效果是not null+unique # 2、innodb表有且只有一个主键,但是该主键可以是联合主键 create table t6( id int primary key auto_increment, name varchar(5) ); insert into t6(name) values ("egon"), ("tom"), ("to1"), ("to2"); # 联合主键(了解) create table t7( id int, name varchar(5), primary key(id,name) );
二、表之间的三种关系
多对一
关联方式:foreign key
多对多
关联方式:foreign key+一张新的表
一对一
关联方式:foreign key+unique
ps: foreign key 限制表与表之间关系
# 引入 # 先创建被关联表 create table dep( id int primary key auto_increment, name varchar(6), comment varchar(30) ); # 再创建关联表 create table emp( id int primary key auto_increment, name varchar(10), gender varchar(5), dep_id int, foreign key(dep_id) references dep(id) on delete cascade on update cascade ); # 先往被关联表插入数据 insert into dep(id,name) values (1,'技术部'), (2,'人力资源部'), (3,'销售部'); # 先往关联表插入数据 insert into emp(name,gender,dep_id) values ('egon',"male",1), ('alex1',"male",2), ('alex2',"male",2), ('alex3',"male",2), ('李坦克',"male",3), ('刘飞机',"male",3), ('张火箭',"male",3), ('林子弹',"male",3), ('加特林',"male",3) ; # 多对一 # 多对多 create table author( id int primary key auto_increment, name varchar(10) ); create table book( id int primary key auto_increment, name varchar(16) ); create table author2book( id int primary key auto_increment, author_id int, book_id int, foreign key(author_id) references author(id) on delete cascade on update cascade, foreign key(book_id) references book(id) on delete cascade on update cascade ); # 一对一 create table customer( id int primary key auto_increment, name varchar(16), phone char(11) ); create table student( id int primary key auto_increment, class varchar(10), course varchar(16), c_id int unique, foreign key(c_id) references customer(id) on delete cascade on update cascade );