• TSQL入门(三)——增删改(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]


  • 相关阅读:
    整形数组与字符串(字符数组)nex_permutation(或者是prve_permutation)的区别
    Dijkstra算法
    弗洛伊德算法(Floyd)
    Happy 2006
    EVENTTARGET 、EVENTARGUMENT 和VIEWSTATE
    C# App.config全攻略
    C#对Excel的样式操作
    Web.Config全攻略
    C# Setting.settings .
    UVa 10050 Hartals
  • 原文地址:https://www.cnblogs.com/mnight/p/3677633.html
Copyright © 2020-2023  润新知