最后一步插入失败
CREATE TABLE student(
sno INT PRIMARY KEY,
sname VARCHAR(20) NOT NULL,
sage INT DEFAULT 18
);
CREATE TABLE course(
cno INT PRIMARY KEY,
cname VARCHAR(20) NOT NULL,
ccredit INT DEFAULT 2
);
CREATE TABLE sc(
sno INT,
cno INT,
marks DECIMAL(4,1),
PRIMARY KEY(sno,cno),
FOREIGN KEY (sno) REFERENCES student(sno),
FOREIGN KEY (cno) REFERENCES course(cno)
);
ALTER TABLE sc MODIFY marks INT;
ALTER TABLE student
ADD sgender CHAR(2),
ADD sdept CHAR(20),
ADD GPA DECIMAL(3,2);
ALTER TABLE course
ADD cpre INT,
ADD FOREIGN KEY(cpre) REFERENCES course(cno);
#为 student 表 在 sname 列上定义一个名为index_student_sname的普通索引;
CREATE INDEX index_student_sname ON student(sname);
#student 表使用四条 INSERT 语句插入四条数据;
INSERT INTO student(sno,sname,sgender,sage,sdept) VALUES (19111602,'王小珂','女',19,'信息系');
INSERT INTO student(sno,sname,sgender,sage,sdept) VALUES (19116103,'卞嘉欣','女',20,'信息系');
INSERT INTO student(sno,sname,sgender,sage,sdept) VALUES (19111604,'左眼陈','男',18,NULL);
INSERT INTO student(sno,sname,sgender,sage,sdept) VALUES (19111605,'田佳琪','女',19,'计算机系');
INSERT INTO course (cno,cname,ccredit) VALUES (1,'数据库原理',5),(2,'数学',4),(3,'操作系统',3),(4,'信息组织',4),(5,'C语言',3),(6,'数据结构',2);
UPDATE course
SET cpre=6
WHERE cno=1 OR cno=3;
UPDATE course
SET cpre=1
WHERE cno=4;
UPDATE course
SET cpre=5
WHERE cno=6;
UPDATE course
SET cpre=NULL
WHERE cno=2;
INSERT INTO sc (sno,cno,marks) VALUES (19116102,1,30),(19116102,3,87),(19116102,6,96),(19116102,1,69),(19116102,3,90);
```
最后insert sc这个表,sno写错了(19116102),和insert student表中的sno不一样(19111602),因为创建了外键引用的是student表的数据,所以给的sno必须是student表中存在的
外码约束不对你就删除以前的,自己新建一个约束:
ALTER TABLE sc DROP FOREIGN KEY sc_ibfk_1;
ALTER TABLE sc ADD CONSTRAINT sc_ibfk_1 FOREIGN KEY (sno) REFERENCES student(sno_new) ON DELETE CASCADE;
需要查出crowd_label_id 为 4,6,9的所有case_id 4,6,9为与条件
GROUP_CONCAT
函数FIND_IN_SET
来匹配字符串中是否存在指定的标签。当然这一步也可以放到程序中去做判断。附上sql
SELECT * FROM (
SELECT case_id,GROUP_CONCAT(crowd_label_id) AS aa FROM weapp_case_label WHERE crowd_label_id IN (4,6,9) GROUP BY case_id
) AS aaa WHERE FIND_IN_SET('4', aa) AND FIND_IN_SET('9', aa)
外键约束限制了插入数据的允许范围,如果在插入数据的时候存在外键约束,但是插入的数据不符合约束要求,就会插入失败。比如说,例如表A中的字段A1是表B的外键,那么在插入表A数据时,A1的值必须在表B中存在。
解决这个问题有以下几种方案:
SET foreign_key_checks = 0;
这样在插入数据时就不会受到外键约束的限制了,但是需要注意的是,如果在禁用外键约束的情况下插入了不符合要求的数据,就会破坏数据的一致性。
SHOW CREATE TABLE table_name;
ALTER TABLE table_name DROP FOREIGN KEY constraint_name;
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (field_name) REFERENCES table_name (field_name);
以上命令会查看表的结构并显示外键约束的定义,然后删除原来的外键约束,再重新添加外键约束,从而保证插入的数据符合约束要求。