/*
多表关联 实现训练
*/
-- 创建主表:商品分类表category 字段:分类主键,分类名称
-- cid cname
CREATE TABLE category(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(20) NOT NULL
);
-- 商品分类表添加数据
INSERT INTO category(cid,cname) VALUES (1,"张三") ,(2,"李四");
INSERT INTO category(cid,cname) VALUES (3,"化妆品") ,(4,"家具");
-- 更新数据表的数据
UPDATE category SET cname="服装" WHERE cid=1;
UPDATE category SET cname="家电" WHERE cid=2;
SELECT * FROM category;
-- 创建从表:商品信息表products 字段:商品主键,商品名称,商品价格,分类主键(外键)
CREATE TABLE products(
pid INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(30) NOT NULL,
price DOUBLE,
category_cid INT,
FOREIGN KEY (category_cid) REFERENCES category(cid)
);
SELECT * FROM products;
-- 从表商品表添加正常的数据(主表有的数据)
INSERT INTO products VALUES(1,"羽绒服",5000,1),(2,"大棉衣",200,1);
INSERT INTO products VALUES(3,"手电筒",5,2),(4,"电冰箱",2000,2);
INSERT INTO products VALUES(5,"大宝",9.9,3),(6,"香奈儿",7000,3);
INSERT INTO products VALUES(7,"充气娃娃",5000,4),(8,"芭比娃娃",200,4);
/*
添加主表分类表和从表商品表之间的主外键关系:
使用修改表结构(创建从表的时候直接添加)
alter table 从表名 add [constraint 外键名称] foreign key(从表中的外键字段) references 主表(主键);
foreign key:外键
references:引用
外键的作用:保证数据的准确性和完整性
1.主表中有的数据,从表可以有,可以没有
2.主表中没有的数据,从表也不能出现
3.删除主表的数据,必须保证从表没有使用
--语句删除外键
alter table 从表 drop foreign key 外键名称;
*/
-- 从表商品表添加一条主表分类表没有的数据
INSERT INTO products VALUES(7,"充气娃娃",5000,5),(8,"芭比娃娃",200,5); -- 报错 Duplicate entry '7' for key 'PRIMARY'
-- 主表中删除从表中使用的数据
DELETE FROM category WHERE cid=1; -- 报错 从表中正在使用主表中使用的数据
-- 从表中的数据可以直接删除,删除category_cid是1的数据
DELETE FROM products WHERE category_cid=1;
/*
多多的表的操作 关联
*/
-- 创建主表订单表orders 字段:订单主键,商品总金额
CREATE TABLE orders(
oid INT PRIMARY KEY AUTO_INCREMENT,
totalprice DOUBLE
);
SELECT * FROM orders;
INSERT INTO orders VALUES(1,1100),(2,119.9),(3,89);
/*
创建中间表:orderitem 字段:商品主键,订单主键
创建表的同时添加外键约束
*/
CREATE TABLE orderitem(
products_pid INT,
orders_oid INT,
FOREIGN KEY(products_pid) REFERENCES products(pid),
FOREIGN KEY(orders_oid) REFERENCES orders(oid)
);
SELECT * FROM orderitem;
INSERT INTO orderitem VALUES(1,1),(5,1);
INSERT INTO orderitem VALUES (2,2),(3,2),(4,2);
INSERT INTO orderitem VALUES(3,3),(6,3);