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是因为没有对其指定其他值。
相关文章推荐
- SQLCookBook第四章学习日记12
- SQLCookBook第四章学习日记14
- 【笨鸟先飞】Java重新学习日记11---创建一个类
- 黑马程序员_学习日记11_asp.net初探之视图状态
- Java学习日记11:JSP自定义标签
- SQLCookBook第三章学习日记5
- 黑马学习日记11
- SQLCookBook第三章学习日记8
- 学习日记2011.3.10-11
- 跟我一起学习MySQL技术内幕(第五版):(第三章学习日记11)
- 黑马程序员_Java学习日记11_常用类
- SQLCookBook第一章学习日记1
- python学习日记_第四天(ex9~11)
- SQLCookBook第二章学习日记3
- SQLCookBook第三章学习日记6
- Java学习日记-11 集合(1)
- SQLCookBook第三章学习日记10
- SQLCookBook第三章学习日记7
- java学习日记_11:面向对象之简单的建立一个类。
- android成长日记 11.详细学习了数据存储相关基础知识