SQL的⼀对多,多对⼀,⼀对⼀,多对多什么意思?
1、⼀对多:⽐如说⼀个班级有很多学⽣,可是这个班级只有⼀个班主任。在这个班级中随便⼀个⼈,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪⼏个学⽣。这⾥班主任和学⽣的关系就是⼀对多。
2、多对⼀:⽐如说⼀个班级有很多学⽣,可是这个班级只有⼀个班主任。在这个班级中随便⼀个⼈,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪⼏个学⽣。这⾥学⽣和班主任的关系就是多对⼀。
3、⼀对⼀:⽐如说⼀个班级有很多学⽣,他们分别有不同的学号。⼀个学⽣对应⼀个学号,⼀个学号对应⼀个学⽣;通过学号能到学⽣,通过学⽣也能得到学号,不会重复。这⾥学⽣和学号的关系就是⼀对⼀。
4、多对多:⽐如说⼀个班级有很多学⽣,他们有语⽂课、数学课、英语课等很多课。⼀门课有很多⼈上,⼀个⼈上很多门课。这⾥学⽣和课程的关系就是多对多。
1、⼀对⼀的使⽤⽅法
(1)使⽤嵌套结果映射来处理重复的联合结果的⼦集。
(2)通过执⾏另外⼀个SQL映射语句来返回预期的复杂类型。
2、⼀对多的实现⽅法
在多的⼀⽅的表⾥⾯,添加外键。
3、多对多的实现⽅法
多对多,必须要通过单独的⼀张表来表⽰。
⼀、参照完整性
参照完整性指的就是多表之间的设计,主要使⽤外键约束。
多表设计: ⼀对多、多对多、⼀对⼀设计
1.⼀对多
关联主要语句:
constraint cus_ord_fk foreign key (customer_id) REFERENCES customer(id)
创建客户表——订单表
⼀个客户可以订多份订单,每份订单只能有⼀个客户。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27-- 关联(1对N)
create table customer(
id int PRIMARY KEY auto_increment,
name varchar(20) not null,
adress varchar(20) not null
);
create table orders(
order_num varchar(20) PRIMARY KEY,
price FLOAT not NULL,
customer_id int, -- 进⾏和customer 关联的字段外键
constraint cus_ord_fk foreign key(customer_id) REFERENCES customer(id) );
insert into customer(name,adress) values("zs","北京");
insert into customer(name,adress) values("ls","上海");
SELECT* from customer;
28 29 30 31 32 33 34INSERT INTO orders values("010",30.5,1); INSERT INTO orders values("011",60.5,2); INSERT INTO orders values("012",120.5,1); SELECT* from orders;
notice: constraint: 约束的意思。foreign key: 外键。references: 参照
创建⼀个名叫customer_id_fk的外键约束,其中外键指的是customer_id,并且参照的是 customers表中的id列
扩展:
字表的删除更新策略:
1. 1)CASCADE 级联策略。使⽤此种策略时主表的记录被删除或者主键字段被修改时会同步删除或修改⼦表
2. 2) NO ACTION ⽆动作策略。使⽤此种策略时要删除主表必须先删除⼦表,要删除主表的记录必须先删除⼦表关联的记录,不能更新
主表主键字段的值。
3. 3) RSTRICT 主表约束策略。此种策略对主表的约束跟 NO ACTION ⼀样
4. 4)SET NO 置空策略。使⽤此种策略时,如果主表被删除或者主键被更改,则将⼦表中的外键设置为NULL。需要注意的是,如果⼦
表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION ⼀样。
2. 多对多
创建学⽣——⽼师关系表格
其中⼀个学⽣可以有多个⽼师,⼀位⽼师也可以有多个学⽣
1
2
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40-- 多对多关系
-- 创建teacher表格
CREATE TABLE teacher (
id INT,
NAME VARCHAR(20) NOT NULL,
gender CHAR(2) NOT NULL,
PRIMARY KEY(id)
);
-- 创建学⽣表格
CREATE TABLE student (
id INT,
NAME VARCHAR(20) NOT NULL,
age INT NOT NULL
);
ALTER TABLE student ADD PRIMARY KEY(id);
-- 第三张关系表
CREATE TABLE tch_std (
teacher_id INT,
sql中select是什么意思student_id INT,
CONSTRAINT fk_teacher FOREIGN KEY(teacher_id) REFERENCES teacher (id),    CONSTRAINT fk_student FOREIGN KEY(student_id) REFERENCES teacher (id) );
DELETE
FROM
teacher
WHERE
id = 3;
SELECT
*
FROM
teacher;
SELECT DISTINCT
*
FROM
tch_std;
41
42
attention:多对多是三张表,第三张表创建外键约束对应前两张表中的id 3. ⼀对⼀
两种形式:
1)按照外键关联
在IdCard表中的外键添加唯⼀约束
2)按照主键关联
对主键添加外键约束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19-- ⼀对⼀
-
- 创建users表格
CREATE TABLE users (
id INT,
NAME VARCHAR(20) NOT NULL,
gender CHAR(2) NOT NULL,
PRIMARY KEY(id)
);
-- 创建card 表格
CREATE TABLE card (
id INT,
adress VARCHAR(100) NOT NULL,
user_id INT UNIQUE,
constraint users_id_fk foreign key(user_id) references users(id) );
ALTER TABLE card ADD PRIMARY KEY(id);
此种为⽅法1,给外键添加唯⼀约束unique
以上所述是⼩编给⼤家介绍的sql中的参照完整性详解整合,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对脚本之家⽹站的⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。