出现SQL insert, update or delete failed (row not found)错误,原因总结:

本文总结了项目中常见的插入数据失败的原因,包括字段不匹配、主键未设为自动增长及键值为空等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 项目中插入数据的时候经常出现这个错误:

 

自己总结了两个方面的原因:

 

第一: 由于自动内容和数据库字段不一样(这个原因出现的最多,经常由于马虎照成)。

 

第二: 由于设计数据库的时候忘记将keyid (一般主键列),设为自动增长,这个是设计时的粗心

 

第三: 由于数据库中的某个键设置为不允许为空,添加内容的时候忘记设置内容。 

 

 

其他原因待发现中………… O(∩_∩)O~。

(1)创建数据库及其关系表,并插入数据: ```sql CREATE DATABASE GradeDB; USE GradeDB; CREATE TABLE STUDENT ( SID CHAR(10) PRIMARY KEY, SName VARCHAR(20) NOT NULL, Age INT NOT NULL, Sex CHAR(2) NOT NULL ); CREATE TABLE COURSE ( CID CHAR(10) PRIMARY KEY, CName VARCHAR(20) NOT NULL, Teacher VARCHAR(20) NOT NULL ); CREATE TABLE GRADE ( SID CHAR(10) REFERENCES STUDENT(SID), CID CHAR(10) REFERENCES COURSE(CID), Score INT NOT NULL, Note VARCHAR(50), PRIMARY KEY (SID, CID) ); INSERT INTO STUDENT VALUES ('200001', '张三', 19, '男'); INSERT INTO STUDENT VALUES ('200002', '李四', 20, '女'); INSERT INTO STUDENT VALUES ('200003', '王五', 18, '男'); INSERT INTO STUDENT VALUES ('200004', '赵六', 21, '女'); INSERT INTO STUDENT VALUES ('200005', '刘七', 20, '男'); INSERT INTO STUDENT VALUES ('200006', '陈八', 19, '女'); INSERT INTO STUDENT VALUES ('200007', '张九', 18, '男'); INSERT INTO STUDENT VALUES ('200008', '李十', 21, '女'); INSERT INTO STUDENT VALUES ('200009', '王麻子', 20, '男'); INSERT INTO STUDENT VALUES ('200010', '赵大', 19, '女'); INSERT INTO STUDENT VALUES ('200011', '刘二', 18, '男'); INSERT INTO STUDENT VALUES ('200012', '陈三', 21, '女'); INSERT INTO STUDENT VALUES ('200013', '张四', 20, '男'); INSERT INTO STUDENT VALUES ('200014', '李五', 19, '女'); INSERT INTO STUDENT VALUES ('200015', '王六', 18, '男'); INSERT INTO STUDENT VALUES ('200016', '赵七', 21, '女'); INSERT INTO STUDENT VALUES ('200017', '刘八', 20, '男'); INSERT INTO STUDENT VALUES ('200018', '陈九', 19, '女'); INSERT INTO STUDENT VALUES ('200019', '张十', 18, '男'); INSERT INTO STUDENT VALUES ('200020', '李一', 21, '女'); INSERT INTO COURSE VALUES ('C001', '数据库原理及应用', '张三'); INSERT INTO COURSE VALUES ('C002', '数据结构与算法', '李四'); INSERT INTO GRADE VALUES ('200001', 'C001', 80, '优秀'); INSERT INTO GRADE VALUES ('200001', 'C002', 75, '良好'); INSERT INTO GRADE VALUES ('200002', 'C001', 65, '及格'); INSERT INTO GRADE VALUES ('200002', 'C002', 70, '良好'); INSERT INTO GRADE VALUES ('200003', 'C001', 55, '不及格'); INSERT INTO GRADE VALUES ('200003', 'C002', 60, '及格'); INSERT INTO GRADE VALUES ('200004', 'C001', 90, '优秀'); INSERT INTO GRADE VALUES ('200004', 'C002', 85, '优秀'); INSERT INTO GRADE VALUES ('200005', 'C001', 70, '良好'); INSERT INTO GRADE VALUES ('200005', 'C002', 75, '良好'); INSERT INTO GRADE VALUES ('200006', 'C001', 80, '优秀'); INSERT INTO GRADE VALUES ('200006', 'C002', 85, '优秀'); INSERT INTO GRADE VALUES ('200007', 'C001', 60, '及格'); INSERT INTO GRADE VALUES ('200007', 'C002', 65, '及格'); INSERT INTO GRADE VALUES ('200008', 'C001', 75, '良好'); INSERT INTO GRADE VALUES ('200008', 'C002', 80, '优秀'); INSERT INTO GRADE VALUES ('200009', 'C001', 55, '不及格'); INSERT INTO GRADE VALUES ('200009', 'C002', 60, '及格'); INSERT INTO GRADE VALUES ('200010', 'C001', 70, '良好'); INSERT INTO GRADE VALUES ('200010', 'C002', 75, '良好'); ``` (2)创建GradeLOG表,并编写触发器程序实现GRADE表数据的插入、删除、修改在日志表记录相关操作数据: ```sql CREATE TABLE GradeLOG ( user VARCHAR(20), SID CHAR(10), CID CHAR(10), changetime DATETIME, oldscore INT, newscore INT ); DELIMITER $$ CREATE TRIGGER log_insert AFTER INSERT ON GRADE FOR EACH ROW BEGIN INSERT INTO GradeLOG VALUES (USER(), NEW.SID, NEW.CID, NOW(), NULL, NEW.Score); END$$ CREATE TRIGGER log_delete AFTER DELETE ON GRADE FOR EACH ROW BEGIN INSERT INTO GradeLOG VALUES (USER(), OLD.SID, OLD.CID, NOW(), OLD.Score, NULL); END$$ CREATE TRIGGER log_update AFTER UPDATE ON GRADE FOR EACH ROW BEGIN INSERT INTO GradeLOG VALUES (USER(), NEW.SID, NEW.CID, NOW(), OLD.Score, NEW.Score); END$$ DELIMITER ; -- 测试触发器 DELETE FROM GRADE WHERE SID = '200001' AND CID = 'C001'; UPDATE GRADE SET Score = 90 WHERE SID = '200002' AND CID = 'C002'; ``` (3)编写存储过程程序实现统计各课程不及格学生人数,并在屏幕输出: ```sql DELIMITER $$ CREATE PROCEDURE count_failed_students() BEGIN DECLARE c_name VARCHAR(20); DECLARE c_id CHAR(10); DECLARE n INT; DECLARE done INT DEFAULT FALSE; DECLARE cur1 CURSOR FOR SELECT CName, CID FROM COURSE; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur1; read_loop: LOOP FETCH cur1 INTO c_name, c_id; IF done THEN LEAVE read_loop; END IF; SELECT COUNT(*) INTO n FROM GRADE WHERE CID = c_id AND Score < 60; SELECT CONCAT(c_name, '不及格人数为', n) AS Result; END LOOP; CLOSE cur1; END$$ DELIMITER ; -- 执行存储过程 CALL count_failed_students(); ``` 以上代码是一个完整的MySQL数据库程序,可以创建数据库、关系表、插入数据、创建触发器和存储过程,实现对学生成绩的管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值