内容概览
约束条件
主键
1.primary key主键
create table t1(id int primary key,name varchar(32));
desc t1;
insert into t1 values(1,'jason');
insert into t1 values(1,'keven');
create table t2(
id int not null unique,
uid int not null unique,
pid int not null unique,
name varchar(32)
);
desc t2;
create table t3(
uid int,
pid int,
primary key(uid,pid)
);
desc t3;
2.auto_increment自增
create table t4(id int auto_increment);
create table t5(id int primary key auto_increment,name varchar(32));
insert into t5(name) values('jason'),('keven');
select * from t5;
外键
一对多
create table emp(
id int primary key auto_increment,
name varchar(32),
gender enum('male','female','other') default 'other',
dep_id int,
foreign key(dep_id) references dep(id)
);
create table dep(
id int primary key auto_increment,
dep_name varchar(32),
dep_desc varchar(32)
);
create table emp1(
id int primary key auto_increment,
name varchar(32),
gender enum('male','female','other'),
dep_id int,
foreign key(dep_id) references dep(id)
on update cascade
on delete cascade
);
create table dep1(
id int primary key auto_increment,
dep_name varchar(32),
dep_desc varchar(32)
);
在实际工作中,很多时候可能不会使用外键 因为外键增加了表与表之间的耦合度,不便于单独操作,资源消耗高 我们为了能够描述出表数据的关系,又不想使用外键,可以自己写SQL建立代码层面的关系
多对多
以书籍表与作者表为例 一本书籍可以是多位作者编写 一位作者可以编写多本书籍 那么两边都可以以一条数据对应多条数据,那么表数据关系就是多对多 针对多对多表关系,外键字段不能建在任意一方
create table book(
id int primary key auto_increment,
title varchar(32)
);
create table author(
id int primary key auto_increment,
name varchar(32)
);
create table book2author(
id int primary key auto_increment,
book_id int,
foreign key(book_id) references book(id)
on update cascade
on delete cascade,
author_id int,
foreign key(author_id) references author(id)
on update cascade
on delete cascade
);
表关系之一对一
以用户表与用户详情表为例 一位用户只能对应自己的用户详情 一份用户详情也只能对应相应的用户 那么首先查看两边是否有关系,如果有,那就是一对一 针对于一对一的表关系,外键字段建在哪边都可以,但是建议建在查询频率更高的表中
create table user(
id int primary key auto_increment,
name varchar(32),
detail_id int unique,
foreign key(deteil_id) references userDetail(id)
on update cascade
on delete cascade
);
create table userDetail(
id int primary key auto_increment,
phone bigint,
addr varchar(32)
);
|