T-SQL入门(三)——增删改(INSERT、DELETE、UPDATE)

创建了表之后之后的操作就是增删改查,但是查询需要用很大的篇幅描述,所以这次先写增删改。
 
一、插入
 
[sql]INSERT INTO 表名(字段1,字段2) VALUES(字段1的值,字段2的值)[/sql]
 
VALUES后跟的值的顺序要和表名后的字段顺序相同,格式相同。
 
需要注意的是:所有不可为空的字段都要填写,不然添加不成功。
 
错误如下:
 
消息515,级别16,状态2,第1 行
不能将值NULL 插入列'tname',表'stuDB.dbo.student';列不允许有空值。INSERT 失败。 
 
字符类型、时间类型要加单引号'',数值类型不用。
 
上面的语句可以简化为
 
INSERT INTO 表名 VALUES(字段1的值,字段2的值……)
 
这种写法是要全部填写表中的字段,并顺序一一对应,不推荐这种写法。
 
现在往上次建立的student表中添加数据
 
[sql]INSERT INTO student(tname,tage,tInterTime) VALUES('张三',15,'2013-03-03 17:50:23') <span style="font-size:14px;">[/sql] 
多条插入一:
 
但是如果我要添加张三,李四,王五,是不是要写成下面这个样子?
 
[sql] INSERT INTO student(tname,tage,tInterTime) VALUES('张三',15,'2013-03-03 17:50:23')<br /> INSERT INTO student(tname,tage,tInterTime) VALUES('李四',15,'2013-03-03 17:50:23')<br /> <p> INSERT INTO student(tname,tage,tInterTime) VALUES('王五',15,'2013-03-03 17:50:23') [/sql] 


有一个较为简单“点儿”的语法:

 

[sql] INSERT INTO student(tname,tage,tInterTime) SELECT 'name1',15,'2013-03-03 17:50:23' UNION SELECT 'name2',16,'2013-03-03 17:50:23' UNION SELECT 'name3',17,'2013-03-03 17:50:23' [/sql]
可以一次性插入多行。
 
sql server 2008中进行了增强,可以这样写:
[sql]INSERT INTO student(tname,tage,tInterTime) VALUES('name1',15,'2013-03-03 17:50:23'),('name2',16,'2013-03-03 17:50:23'),('name3',17,'2013-03-03 17:50:23')[/sql]
 
但是在2005是不可以的。
 
多条插入二:
插入多条语句还有两个变种的语句,但涉及到了查询,所以就先说一下简单查询:
 
[sql] SELECT * FROM student --查询所有数据 SELECT tName,tAge,tInterTime FROM student &nbsp;--查询student表中的tName,tAge和tInterTiem字段 [/sql]
 
这样就可以讲新的多条插入:
 
[sql] INSERT INTO student(tname,tage,tInterTime) SELECT tName,tAge,tInterTime FROM student [/sql]
 
把查询出来的数据插入到student表中的对应字段中,这种插入可以把多个表的数据联合起来放入新表中,而且可以进行很大的数据流操作,很强大。
 
多条插入三:
第三种也是相当强大:
[sql] SELECT student.tName,student.tAge,student.tInterTime INTO newstu FROM student [/sql]  
可以创建新表newstu,然后把student表中的对应字段作为数据插入到新表中。
 
然后我们可以得到一个新表newstu,里面有所有student中的对应数据。
 
但是有一个问题,如果我想在新表中有主键ID,并且ID可以自增长,那么可以通过下面的语句实现:
 
[sql] SELECT student.tName,student.tAge,student.tInterTime,IDENTITY(int,1,1) As StudentID INTO newstu2 FROM student[/sql]  
这样就可以在newstu2中创建了新的主键自增长的字段StudentID。如下图:
 
32356093
 
二、删除
1:
插入就说这么多,插入了就可能删除,删除的语法很简单:
 
[sql]DELETE FROM student[/sql]
 
很简单,但是破坏力也很强大,这条语句会情况student表中的所有数据,所以一般删除都要加条件。
 
[sql]DELETE FROM student WHERE tName='张三'[/sql]
 
这样就只会把姓名为张三的数据删掉,WHERE后跟的是条件,用来判断你要操作的数据。至于操作符后面会详细讲一下,这里只需记住简答的,=、!=、> 、<、>=、<=即可。
 
2:
[sql]TRUNCATE TABLE newstu2[/sql]
 
Truncate和delete from 不带where的功能接近。但是区别也很明显。
 
首先Truncate的速度要比delete更快。
 
Truncate table后不能跟条件,只能清空表中的全部数据。
 
另外Truncate清空数据后,自增长的数值也清空,再添加从初始值开始;delete则不会,它会保留自增信息,下次填写是会从上次的接触上继续增加。
比如你有一个个列,起始值为1,自增长为1,最初里面有10条记录,最后一条记录为10,用Truncate删除后,下次添加还是从1开始;用delete删除后,下次添加从11开始。
 
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
 
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
 
对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
 
TRUNCATE TABLE 不能用于参与了索引视图的表。
 
对用TRUNCATE TABLE删除数据的表上增加数据时,要使用UPDATE STATISTICS来维护索引信息。
 
如果有ROLLBACK语句,DELETE操作将被撤销,但TRUNCATE不会撤销。
 
3:
[sql]ALTER TABLE newstu2 DROP COLUMN tInterTime[/sql]
 
删除表中的某一列,上例为删除newstu2中的tInterTime列。
 
三、更新
现在我们要把student表中,tid为1的学生的名字改为“刘八”,那么我们该怎么做?
 
[sql]UPDATE student SET tname='刘八' WHERE tid=1[/sql]
 
语法:[sql]UPDATE 表名 SET &lt;列名=值&gt; WHERE 条件[/sql]


posted @ 2013-03-05 18:25  MNight  阅读(495)  评论(0编辑  收藏  举报