您的位置:首页 > 数据库

SQLCookBook第四章学习日记11

2016-11-19 14:32 183 查看

第四章 插入、更新与删除

本章主要介绍以下三部分内容:

1.在数据库中插入新记录
2.更新已有记录
3.删除不需要的记录


为便于读者在需要的时候可以方便的查阅本章内容,本章按如下方式组织:首先是所有有关插入数据的内容,然后是更新部分,最后是删除数据部分。

通常,插入数据是一个简单的操作。首先从简单的插入单行的问题开始,然而很多时候采用基于集合的方法来创建新行更高效;最后,介绍如何一次插入多行的技术。

同样,更新和删除叶聪简单的任务开始,首先是更新或是删除一条记录,然后是使用更有效的方法来更新一大批记录。本章还介绍了使用很多方便的方法来删除记录,例如,可以根据是否在另外一个 表中有相应的记录来删除源表中的记录。

对于SQL来说,还有另一种方法,可以一次进行插入更新和删除记录的全部操作,这相对而言是标准中的新增功能。merge语句目前似乎不十分有用,但是它代表了一种将数据库的表与外部数据源(来

自远程系统的无格式文件)同步的淑芬强有力的方法。

4.1插入新记录

问题:向表中插入一条新的记录,例如,要向dept表中插入一条新的记录。其中,deptno值为50、dname的值为“PROGRAMMING” loc的值为“BALTMORE”

解决方案

使用带有values子句的insert语句来插入一行:

insert into dept (deptno, dname, loc)
values (50,'PROGRAMMING', 'BALTMORE')


和对于DB2和MySQL,可以选择一次插入一行,或者用多个值一次插入多行:

insert into dept (deptno, dname, loc)
values (1, 'A', 'B'),
(2, 'B', 'C')


讨论

insert语句允许在数据库表中创建新行。在所有类型的数据库系统中,插入语句的语法格式完全相同。

作为一种简便方式,在insert语句中,可以省略字段列表。

insert into dept
values (50, 'PROGRAMMING', 'BALTMORE')


然而,如果语句中没有列出要插入行中的目标字段,则必须要插入表中的所有列,需要注意的是,在插入值列表中所有的值得顺序,必须与select * 查询语句所列出的列顺序完全一致。

4.2插入默认值

问题:

定义表时可以为某些列定义默认值,现要以默认值插入一行,而无需指定各列的值。看一下下面列出的表:

create table D (id interger default 0)


要插入零值,而不像在insert语句的值列表中明确得为该行指定0值,这里明确的要求插入默认值,而不管默认值是什么。

解决方案;

所有数据库系统都支持使用default关键字显示的指定某列插入默认值,有些数据库系统还有其他的方法来解决这个问题。

下面的例子说明了使用default关键字来解决这个问题的方法:

insert into D values (default)


当不需要将表中所有列都插入值时,也可以明确的指定要使用默认值的列名称

insert into D(id) values(default)


Oracle8i数据库及以前的版本不支持default关键字。在Oracle9i以前版本的数据库中,无法显示的插入默认值。

在MySQL中,如果表中所有的列都定义了默认值,可以用一个空的值列表来解决此问题:

insert into D values()


在这种情况下,所有的列将设置为其默认值。

PostgreSQL和SQL server支持DEFAULT VALUES子句:

insert into D default values


default values子句将所有的列设置为其本身的默认值。

讨论:

在值列表中的default关键字为相应列插入默认值,默认值在创建表时定义,所有的dbms中都可以使用此关键字。

如果表的每列都定义了默认值(表D就是这种情况),MySQL PostgreSQL和SQL Server 用户也可以使用其他的方法。例如,可以使用空Values列表(MySQL)或者指定default values子句 (postgresql和SQL Server)来用默认值创建行;否则,就需要对表中的每一行指定default

如果一个表部分列有默认值,部分列没有默认值,要向某列中插入默认值只要将该列排除在插入列表之外,都不需要使用default关键字,假设表D有另外一列没有定义默认值:

create  table D (id integer defaylt 0, foo varchar(10))


在插入列表中只猎虎foo字段,id中就可以插入默认值:

insert into D (name) values ('Bar')
使用上述语句的结果是FOO字段值为“Bar”而id字段的值为“0”。ID字段的值为0是因为没有对其指定其他值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql