SQL 主外键关系与多对多关系学习笔记
在数据库设计中,主外键关系和多对多关系是常见的表关系类型。
1. 主外键关系
主外键关系用于建立两个表之间的关联。主键表(父表)中的主键列被外键表(子表)引用,以确保数据的完整性和一致性。
(1)创建父表(用户表)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CREATE TABLE T_USER ( ID VARCHAR2(5), NAME VARCHAR2(10) NOT NULL, CONSTRAINT T_USER_ID_PK PRIMARY KEY (ID) );
INSERT INTO T_USER VALUES (1, '小明'); INSERT INTO T_USER VALUES (2, '小红'); COMMIT;
SELECT * FROM T_USER;
|
(2)创建子表(商品表)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| CREATE TABLE T_PRODUCT ( ID VARCHAR2(10), NAME VARCHAR2(10), PRICE FLOAT, U_ID VARCHAR2(5), CONSTRAINT T_PRODUCT_ID_PK PRIMARY KEY (ID), CONSTRAINT T_PRODUCT_U_ID_FK FOREIGN KEY (U_ID) REFERENCES T_USER (ID) ON DELETE CASCADE );
ALTER TABLE T_PRODUCT ADD CONSTRAINT T_PRODUCT_PRICE_CK CHECK (PRICE BETWEEN 1 AND 100);
INSERT INTO T_PRODUCT VALUES ('1001', '火腿肠', 1.00, 1); INSERT INTO T_PRODUCT VALUES ('1002', '方便面', 3.50, 1); INSERT INTO T_PRODUCT VALUES ('1003', '面包', 4.00, 2); COMMIT;
SELECT * FROM T_PRODUCT;
|
(3)表连接查询
1 2 3 4
| SELECT P.*, U.NAME FROM T_USER U LEFT JOIN T_PRODUCT P ON U.ID = P.U_ID;
|
2. 多对多关系
多对多关系需要通过第三方关联表来实现。例如,一个用户可以购买多个商品,一个商品也可以被多个用户购买。
(1)创建关联表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| CREATE TABLE T_P_U ( ID VARCHAR2(10) PRIMARY KEY, PID VARCHAR2(10), U_ID VARCHAR2(5), CONSTRAINT T_P_U_PID_FK FOREIGN KEY (PID) REFERENCES T_PRODUCT (ID), CONSTRAINT T_P_U_U_ID_FK FOREIGN KEY (U_ID) REFERENCES T_USER (ID) );
INSERT INTO T_P_U VALUES (100, '1001', 1); INSERT INTO T_P_U VALUES (101, '1002', 1); INSERT INTO T_P_U VALUES (102, '1003', 2); INSERT INTO T_P_U VALUES (103, '1001', 2); COMMIT;
SELECT T.ID, P.NAME, P.PRICE, U.NAME FROM T_P_U T, T_PRODUCT P, T_USER U WHERE T.PID = P.ID AND T.U_ID = U.ID;
|
3. 级联删除
级联删除是指删除父表中的记录时,自动删除子表中关联的记录。
示例:
1 2 3 4 5
| DELETE FROM T_USER WHERE ID = 1;
SELECT * FROM T_PRODUCT;
|
4. 删除表
(1)删除子表
(2)删除父表(级联删除约束)
1 2
| DROP TABLE T_USER CASCADE CONSTRAINTS;
|