一对多关系建立
以部门表与员工表为例
create table dep( id int primary key auto_increment, #创建主键非空且唯一 dep_name varchar(128), dep_desc varchar(128) ); create table emp( id int primary key auto_increment, emp_name varchar(128), emp_gender enum('mail', 'femail', 'others') default 'mail' #使用枚举选择性别,默认为mail dep_id int, #创建关联字段 foreign key (dep_id) references dep(id) #创建与dep表关联的外键dep_id on update cascade #级联更新 on delete cascade #级联删除 #创建与dep表关联的外键,级联更新,级联删除
);
插入部门数据
insert into dep(dep_name, dep_desc) values('销售部', '买卖'),('技术部','搞技术'),('财务部','管钱')
插入员工数据
insert into emp(emp_name, emp_gender, dep_id) values('张三', 18, 1),('李四',19,2),('王五', 20, 3),('马六', 21, 1)
注意:需要在创建关联表之前创建被关联表, 在多的一方去建立外键
多对多关系建立
在创建多对多关系的时候, 先把两个普通的表创建出来, 然后创建一个专门存放多对多关系的一个表(第三张表), 使用这张表去做关系绑定
以图书表和作者表为例
create table book( id int primary key auto_increment, title varchar(64), price int ); create table authors( id int primary key auto_increment, name varchar(64), age int ); create table book_authors( 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 authors(id) on update cascade on delete cascade );
插入书籍数据
insert into book(title, price) values('围城', 199),('鸟', 187),('柒个我', 299)
插入作者数据
insert into authors(name, age) values('张三', 18),('李四', 19)
插入第三张表数据
insert into book_authors(book_id, author_id) values(1,1),(1,2),(2,1),(3,1),(3,2)
一对一关系建立
在创建一对一的关系时, 外键可以建立在任何一张表, 但是推荐建立在查询频率比较高的那一张表
以用户表为例
create table authordetail( id int primary key auto_increment, ipoh int, addr varchar(128) ); create table author( id int primary key auto_increment, name varchar(16), age int, authordetail_id int unique, # 一对一关系id不能重复 foreign key(authordetail) references authordetail(id) on update cascade on delete cascade );
修改表的语句
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 直接移到最前面
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 寻找插哪个字段的后面
3. 删除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段 # modify只能改字段数据类型完整约束,不能改字段名,但是change可以!
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
复制表
create table 新表名 select * from 表名(要复制的表) # 只会复制表结构,key不会复制: 主键、外键和索引