MYSQL——表约束条件,表之间的三种关系

一、表的约束条件

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
);

三、

 

---44---

posted @ 2020-09-02 20:10  1024bits  阅读(538)  评论(0编辑  收藏  举报