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。如下图:
 
《T-SQL入门(三)——增删改(INSERT、DELETE、UPDATE)》
 
二、删除
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]

    原文作者:MNight
    原文地址: https://www.cnblogs.com/mnight/archive/2013/03/05/3677633.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞