INSERT INTO 关系名 [(属性名1, ..., 属性名n)] VALUES (表达式1, ..., 表达式n);
例:
INSERT INTO Student VALUES ('MA-002', 'Cindy', 'F', 19, 'Math');INSERT INTO Student (Sno, Sname, Sage, Ssex) VALUES ('MA-002', 'Cindy', 19, 'F');
INSERT INTO 关系名 (子查询);
将一个查询的全部结果插入到另一个关系中.
例:
将计算机系学生的学号, 姓名, 选课数, 平均分插入到关系CS_Grade(Sno, Sname, Amt, AvgGrade)中.INSERT INTO CS_Grade (SELECT Sno, Sname, COUNT(*), AVG(Grade) FROM Student NATURAL JOIN SC WHERE Sdept = 'CS' GROUP BY Sno, Sname);
UPDATE 关系名 SET 属性名1 = 表达式1, ..., 属性名n = 表达式n [WHERE 修改条件];
WHERE
子句存在, 则将满足修改条件的元组中属性i的值修改为表达式i的值;WHERE
子句不存在, 则将所有元组中属性i的值修改为表达式i的值;例:
将学号为MA-002的学生的年龄修改为20岁.UPDATE Student SET Sage = 20 WHERE Sno = 'MA-002';将所有学生的年龄增加1岁.
UPDATE Student SET Sage = Sage + 1;
待修改的元组在一个关系中, 而修改条件涉及其他的关系.
例:
UPDATE SC SET Grade = 0 WHERE 'CS' = (SELECT Sdept FROM Student WHERE Student.Sno = SC.Sno); UPDATE SC SET Grade = 0 WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept = 'CS'); UPDATE SC SET Grade = 0 WHERE EXISTS (SELECT * FROM Student WHERE Student.Sno = SC.Sno AND Sdept = 'CS');
DELETE FROM 关系名 [WHERE 删除条件];
WHERE
子句存在, 则将满足删除条件的元组从关系中删除;WHERE
子句不存在, 则将所有元组从关系中删除 (这与DROP TABLE不同, 因为它并不删除关系本身);例:
将学号为MA-002的学生元组删除.DELETE FROM Student WHERE Sno = 'MA-002';
待删除的元组在一个关系中, 而删除条件涉及其他的关系.
例:
DELETE FROM SC WHERE 'CS' = (SELECT Sdept FROM Student WHERE Student.Sno = SC.Sno); DELETE FROM SC WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept = 'CS'); DELETE FROM SC WHERE EXISTS (SELECT * FROM Student WHERE Student.Sno = SC.Sno AND Sdept = 'CS');
数据修改可能导致数据库违反完整性约束, 需要对数据完整性进行检查.
有四种情况可能会破坏参照完整性.
情况1
在参照关系 (如SC) 中插入一个元组, 该元组的外键 (如Sno) 的值在被参照关系 (如Student) 的主键 (如Sno) 值中找不到, 即悬空 (dangling). 若发生这种情况, 则拒绝插入该元组.
情况2
修改参照关系 (如SC) 中的一个元组, 造成该元组的外键 (如Sno) 的值在被参照关系 (如Student) 的主键 (如Sno) 值中找不到. 若发生这种情况, 则拒绝修改该元组.
情况3
从被参照关系 (如Student) 中删除一个元组, 造成参照关系 (如SC) 中某些元组的外键 (如Sno) 的值在被参照关系 (如Student) 的主键 (如Sno) 值中找不到. 如果发生这种情况, 则采取下列处理方法之一:
情况4
修改被参照关系 (如Student) 中的一个元组, 造成参照关系 (如SC) 中某些元组的外键 (如Sno) 的值在被参照关系 (如Student) 的主键 (如Sno) 值中找不到. 如果发生这种情况, 则采取下列处理方法之一:
FOREIGN KEY
子句中声明, 当违反参照完整性约束时, 如何处理:FOREIGN KEY
子句的末尾加上ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION ON UPDATE RESTRICT | CASCADE | SET NULL | NO ACTION
RESTRICT
或NO ACTION
: 拒绝删除或修改, 缺省处理方式;CASCADE
: 级联删除或修改;SET NULL
: 置为空值.例:
FOREIGN KEY (Sno) REFERENCES Strdent(Sno) ON DELETE RESTRICT ON UPDATE RESTRICT
DISTINCT
GROUP BY
UNION
FROM
子句中包含子查询FROM
子句中包含不可更新的视图WHERE
子句包含相关子查询https://dev.mysql.com/doc/refman/5.5/en/view-updatability.html ↩︎