数据库修改数据

1.插入数据

isnert的命令形式:

insert/values,insert/select,insert/exec,insert/defalut,select/into.

insert/select:

eg:

insert into table_name(First,Second)

select id,pwd from table_name1

使用该格式,主要的是要选择正确的数据集,一般在使用select时先测试数据集的结果

insert/exec插入存储过程返回的数据,并将其插入到表中。插入列的顺序必须与存储过程结果集的列顺序相同,以下是基本语法:

insert into owner.table[columns]

exec storedprocedure parameters

注意存储过程可能返回多个结果集,在这种情况下,insert命令试图插入每个结果集中的数据,因此必须保证每个结果集的列顺序与插入列的书序一致。

eg:

create procedure pro_test

as

select * from dt_1 where id<3

select 8 from dt_2 where id>7

//接下来使用存储过程

insert into dt_1[columns]

exec pro_test

创建由默认值组成的行:

eg:

insert into dt_name default values

插入数据时创建表:

select命令的一种变体。

在select语句中使用into选项将创建一个新表包含select结果集

eg:

select colomns

into NewTable

from DataSource

where[condition]

例子:

select *

into dt_new

from dt_old[order by ... asc,desc]

更新数据:

update每次能够更新多行,但是每次只能更新一个表。set关键字用于修改表中任何列的值,新值可以使硬编码的字符串面量、变量、表达式,还可以使sql update语句中from子句引用的数据源的列。

进行全程搜索和替换:

update dt_1

set id=replace(id,'23','22222')

即可将id位123456更新为122222456

更新数据表时引用多个表:

sql update:可以使用表达式给列赋值。该表达式可以引用同一列、其他列甚至其他表

这个过程比较复杂一点:

1.检查可用的数据2.测试公式3.执行更新

 

删除数据:

delete from dt_name

where ...

注意:级联删除

delete from dt_name

...

on delete cascade

 

返回修改后的数据:

sql server2005能够以数据集的方式返回修改后的数据,并供以后使用。使用output子句可以访问插入和删除的虚拟表

 

对数据修改的潜在限制:

主键限制:如果一个表中有主键  并且主键有限制的话,可以使用一下语句来破除这种限制。

set identity_insert table_name on

//

insert into table_name(id,pwd)//注意这里的列名一定要加上

value(1,2)

如果想恢复限制,可以set identity_insert table_name off

并且值得注意的是:我们在一个数据库中同一时刻只能有一个表可以将它设置为on。

 

@@identity可以返回插入行的标志值,scope_identity()功能同上,ident_current(table)

外键限制:

首先说说什么是外键:

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 

例如:

如果dt_test1(id,name) dt_test2(UserName,pwd)这两个表中的主键分别是id和UserName,dt_test1中的name是dt_test2的外键的话,那么插入dt_test1中的name的值就会有所限制,插入的值必须在dt_test2中出现过才行。

外键限制是一种很普遍的现象,比如:

insert into dt_test1 values(..),在dt_test2中如果没有相应的值会出现错误,如果在删除dt_test2中的某行时,检测到在dt_test1中有用到相应的值,那么也会发生错误。

 

唯一索引限制:

空值和默认值限制:

check约束限制:

首先为表dt_test1添加一个check约束

alter table dt_test1

add constraint test_ct

check(id>1000)

此时,如果再向其中添加id<1000的数据行则会发生错误。

 

instead of 触发器限制:

 


posted @ 2010-09-06 21:14  luck_net  阅读(1768)  评论(0编辑  收藏  举报