第四章 插入,更新与删除
- 插入新纪录
- 使用带有values子句的insert into语句来插入一行
- 对于DB2和MySQL,可以选择一次插入一行,或者用多个值列表一次插入多行
- 如果语句中没有列出要插入行中的目标字段,则必须要插入表中的所有列
- 插入默认值
- 使用default显式的指定某列插入默认值
- 当不需要将表所有列都插入值时,也可以明确的地指出要使用默认值的名称
- Oracle9i之前不支持显式插入默认值
- MySQL中,如果所有列都定义了默认值,可以用一个空的值列表来解决此问题
- PostgreSQL和SQL server支持default values子句
- 使用null代替默认值
- 在值列表中明确地指定null值
- 从一个表向另外的表中复制行
- 在insert into 语句后面跟随一个查询,通过该查询返回想要得到的行
- 复制定义表(创建新表,该表与已有表的列设置相同)
- DB2:
- 使用带有like子句的create table 表名 like 目标表
- Oracle,MySQL和PostgreSQL:
- 在create table命令中,使用一个不反悔任何行的子查询(比如1=0)
- DB2:
- 一次向多个表中插入记录
- Oracle:
- 使用insert all或insert first语句,除了关键字不同,用法完全相同
- DB2
- 将所有目标表用union all构成一个内联视图,并以该内联视图作为insert into的目标。
- MySQL,PostgreSQL和SQL server不支持多表插入
- Oracle:
- 组织对某几列插入(防止用户或是错误的软件应用程序对某几列插入数据)
- 在表中创建一个视图,该视图只显示允许用户进行操作的列,强制所有的插入操作都通过该视图进行
- 在表中编辑记录(要修改表中某些(或全部)行的值)
- 使用update语句来修改数据库表中已有行
- 当相应行存在时更新
- 在update中的where子句中使用子查询
- 用其他表中的值更新(使用一个表中的值来更新另外一个表中的行)
- 在表之间做联接,查找目标值并给update语句
- DB2和MySQL:
- 使用相关的子查询来设置表中的值,同样使用相关的子查询判别 表中哪些行需要被更新。
- Oracle:
- 可以使用2方法
- 也可以选择使用内联视图来进行更新
- PostgreSQL
- 可以使用2方法
- 也可以在update语句中直接使用联接
- SQL server:
- 可以使用2方法
- 也可以在update中直接使用联接
- 合并记录(根据表中记录存在状况,响应进行插入,更新或删除记录,条件为是否有响应的记录(如果记录存在,则更新;如果不存在,则插入;如果在更新之后不满足特定的条件,删除))
- 目前只有Oracle可以解决此问题,使用merge,它能够按需执行update或insert操作
- 从表中删除所有记录
- delete from 表名
- 删除指定记录
- delete from 表名 where 条件
- 删除单个记录
- delete from 表名 where 条件(条件要小)
- 删除违反参照完整性的记录
- 使用not exists和子查询来判断
- 也可使用not in来书写此查询
- 删除重复记录
- 使用 带有聚集函数的子查询,如min等,任意选择保留的ID
- 删除从其他表引用的记录
- 使用子查询和聚集函数count来查找目标,然后删除