MySQL学习笔记2(多表操作)

2018-06-18 00:53:37来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

外键:使两张表之间存在关联

特点:

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');
View Code

执行这段代码没有问题:

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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:CentOS7安装mysql后无法启动服务,提示Unit not found

下一篇:MySQL的DML和DQL   增删改查