MySQL学习笔记2(多表操作)
2018-06-18 00:53:37来源:未知 阅读 ()
外键:使两张表之间存在关联
特点:
1.从表外键的值是对主表主键的引用
2.从表外键类型,必须与主表主键类型一致
示例:
创建两个表并准备数据:
USE mybase; CREATE TABLE category( cid VARCHAR(32) PRIMARY KEY, cname VARCHAR(100) ); CREATE TABLE product( pid VARCHAR(32) PRIMARY KEY, pname VARCHAR(40), price DOUBLE, category_id VARCHAR(32) ); INSERT INTO category(cid,cname) VALUES('c001','家电'); INSERT INTO category(cid,cname) VALUES('c002','服饰'); INSERT INTO category(cid,cname) VALUES('c003','化妆品'); INSERT INTO product(pid,pname,price,category_id) VALUES('p001','联想','5000','c001'); INSERT INTO product(pid,pname,price,category_id) VALUES('p002','海尔','5000','c001'); INSERT INTO product(pid,pname,price,category_id) VALUES('p003','雷神','5000','c001'); INSERT INTO product(pid,pname,price,category_id) VALUES('p004','JACK JONES','800','c002'); INSERT INTO product(pid,pname,price,category_id) VALUES('p005','真维斯','200','c002'); INSERT INTO product(pid,pname,price,category_id) VALUES('p006','花花公子','440','c002'); INSERT INTO product(pid,pname,price,category_id) VALUES('p007','劲霸','2000','c002'); INSERT INTO product(pid,pname,price,category_id) VALUES('p008','香奈儿','800','c003'); INSERT INTO product(pid,pname,price,category_id) VALUES('p009','相宜本草','200','c003');
执行这段代码没有问题:
DELETE FROM category WHERE cid='c003';
添加外键关系:
ALTER TABLE product ADD FOREIGN KEY(category_id) REFERENCES category(cid);
这时候两个表中的数据就存在外键关系
执行这段代码就会出错:
DELETE FROM category WHERE cid='c003';
如果想成功,需要先删除和它有关的product表中的两条数据
如果从表添加数据,不能添加主表中不存在的记录,例如添加category_id为c004的数据
表与表之间的关系:
一对多:
实例:客户和订单,分类和商品
一个分类对应多个商品,一个商品只能属于某个分类
上边这个实例,就是一个一对多案例
多对多:
实例:学生选课
多名学生,选择多门课程,学生随意选择
需要注意多对多的建表方法:
创建第三张表作为中间表,至少两个字段
这两个字段分别作为外键指向各自一方的主键:
具体代码:
CREATE TABLE 从表( 字段1, 字段2, ... ) ALTER TABLE 从表 ADD FOREIGN KEY(字段1) REFERENCES 主表1(主键); ALTER TABLE 从表 ADD FOREIGN KEY(字段2) REFERENCES 主表2(主键);
一对一:
实例:公司的地址
一个公司对应一个地址,一对一
实际开发中不使用,通常写在一张表中即可
多表查询:
使用上边创建的两张表以及数据:
两张表的全集 SELECT * FROM category,product; 内连接查询 SELECT * FROM category INNER JOIN product ON cid=category_id; SELECT * FROM category c,product p WHERE c.cid=p.category_id; 外连接查询 SELECT * FROM category LEFT JOIN product ON cid=category_id; SELECT * FROM category RIGHT JOIN product ON cid=category_id; 子查询 SELECT cid FROM category WHERE cname='化妆品'; SELECT * FROM product WHERE category_id=(SELECT cid FROM category WHERE cname='化妆品');
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash