3.2 数据的更新
3.2.1 简单的数据更新
UPDATE 语句用来对数据表中的数据进行更新。下边的语句用来将表 T_Person 中所有
人员的 FREMARK 字段值更新为“SuperMan” :
UPDATE T_Person SET FRemark = 'SuperMan'
UPDATE 语句用来将所有人员的 FRemark 字段更新为“Sonic” ,并且将年龄更新为 25:
UPDATE T_Person SET FRemark = 'Sonic',FAge=25
多个列之间需要使用逗号分隔开。
3.2.2 带 WHERE 子句的 UPDATE 语句
HERE 语句中我们设定适当的过滤条件,这样 UPDATE 语句只会更新符合 WHERE 子句中过滤条件的行,而其他行的数据则不被修改。执行下边的 UPDATE 语句:
UPDATE T_Person SET FAge = 12 WHERE FNAME='Tom'
可以使用复杂的 WHERE 语句来满足更加复杂的需求,比如下面的 UPDATE 语句就用来将 FNAME 等于’Jim’或者’LXF’的行的 FAge 字段更新为 22:
UPDATE T_Person SET FAge = 22 WHERE FName ='jim' OR FName='LXF'
这里我们使用 OR 逻辑运算符来组合两个条件来实现复杂的过滤逻辑, 我们还可以使用
OR、NOT 等运算符实现更加复杂的逻辑,甚至能够使用模糊查询、子查询等实现高级的数
据过滤
3.2.3 非空约束对数据更新的影响
T_Debt 表的 FAmount 字段是有非空约束
UPDATE T_Debt set FAmount = NULL WHERE FPerson='Tom'
错误信息:
不能将值 NULL 插入列 'FAmount',表 'demo.dbo.T_Debt';列不允许有空值。UPDATE
失败。
3.2.3 主键对数据更新的影响
主键是在同一张表中必须是唯一的, 如果在进行数据更新的时候指定的主键与表中已有
的数据重复的话则会导致违反主键约束的异常。
UPDATE T_Debt set FNumber = '2' WHERE FPerson='Tom'
由于表中已经存在一条 FNumber 字段为 2 的记录,所以运行这句 SQL 的时候会报出类似
如下的错误信息:
违反了 PRIMARY KEY 约束 'PK__T_Debt__1920BF5C'。不能在对象 'dbo.T_Debt' 中插入重复键。
3.2.4 外键对数据更新的影响
外键是指向另一个表中已有数据的约束,因此外键值必须是在目标表中存在的。如果更
新后的数据在目标表中不存在的话则会导致违反外键约束异常。
UPDATE T_Debt set FPerson = 'Merry' WHERE FNumber='1
由于在 T_Person 表中不存在 FName 字段等于“Merry”的数据行,所以会数据库系统会
报出类似如下的错误信息:
UPDATE 语句与 FOREIGN KEY 约束"FK__T_Debt__FPerson__1A14E395"冲突。该冲突发生于数据库"demo",表"dbo.T_Person", column 'FName'。
3.3 数据的删除
数据库中的数据一般都有一定的生命周期,当数据不再需要的时候我们就要将其删除,
执行 DELETE 语句就可以将数据从表中删除。不过需要注意的就是如果被删除的数据行是
某个外键关联关系中的被引用数据的话,则进行删除的时候会失败,如果要删除成功则必须
首先删除引用者才可以。
3.3.1 简单的数据删除
DELETE FROM T_Debt;
DELETE FROM T_Person;
3.3.2 带 WHERE 子句的 DELETE 语句
我们要删除年龄大于 20 岁或者来自火星(Mars)的人员,因此使用带复合逻辑 WHERE
子句
DELETE FROM T_Person WHERE FAge > 20 or FRemark = 'Mars'