多对多: 图书与作者表 一定要换位思考 先站在图书 多本书能否有一个作者 一个作者能否写多本书 可以!!! 再站在作者 多个作者能否和写一本书 一本书能否有多个作者 可以!!! 创建表: create table book( id int primary key auto_increment, book_name char(32), price int, author_id int, foregin key(author_id) references author(id) on update cascade on delete cascade ); create table author( id int primary key auto_increment, name char(32), age int, book_id int, foregin key(book_id) references book(id) on update cascade on delete cascade ); 以上方法关联方法错误,多对多时不能用这种路基思维去关联表, 注意:当两张表是多对多的关系时,就需要建立第三张表,用第三张表去分别关联另外两张表。 必须手动创建第三张表 用来专门记录两种表之间的关系 1,先建两张普通的表吗,不需要设置外键 create table book( id int primary key auto_increment, title char(32), price int ); create table author( id int primary key auto_increment, name char(32), age int ); 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 ); insert into book(title,price) values('千禧金梅',10),('武则天',20),('西游记',30); insert into author(name,age) values('展宇',17),('大炮',16),('火箭',58); insert into book2author(book_id,author_id) values(1,1),(1,2),(2,1),(3,1),(3,2); 一对一: 外键字段建在任意一方都可以 但是推荐你建在查询频率较高的一方 # 左表的一条记录唯一对应右表的一条记录,反之也一样 create table deta( id int primary key auto_increment, phon int, addr varchar(32) ); create table author2( id int primary key auto_increment, name char(32), age int, deta_id int unique, #该字段一定要是唯一的 foreign key(deta_id) references deta(id) #外键的字段一定要保证unique on update cascade on delete cascade );
# 三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系 了解知识点: 复制表: # mysql对大小写不敏感!!! 语法: 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 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…]; 修改表: # 查询语句执行的结果也是一张表,可以看成虚拟表 # 复制表结构+记录 (key不会复制: 主键、外键和索引) create table new_service select * from service; # 只复制表结构 select * from service where 1=2; //条件为假,查不到任何记录 create table new1_service select * from service where 1=2; create table t4 like employees;
转载于:https://www.cnblogs.com/Fzhiyuan/p/11385801.html