zoukankan      html  css  js  c++  java
  • TSQL入门(三)——增删改(INSERT、DELETE、UPDATE)

    创建了表之后之后的操作就是增删改查,但是查询需要用很大的篇幅描述,所以这次先写增删改。
     
    一、插入
     
    INSERT INTO 表名(字段1,字段2) VALUES(字段1的值,字段2的值)

     
    VALUES后跟的值的顺序要和表名后的字段顺序相同,格式相同。
     
    需要注意的是:所有不可为空的字段都要填写,不然添加不成功。
     
    错误如下:
     
    消息515,级别16,状态2,第1 行
    不能将值NULL 插入列'tname',表'stuDB.dbo.student';列不允许有空值。INSERT 失败。
     
    字符类型、时间类型要加单引号'',数值类型不用。
     
    上面的语句可以简化为
     
    INSERT INTO 表名 VALUES(字段1的值,字段2的值……)
     
    这种写法是要全部填写表中的字段,并顺序一一对应,不推荐这种写法。
     
    现在往上次建立的student表中添加数据
     
    INSERT INTO student(tname,tage,tInterTime) VALUES('张三',15,'2013-03-03 17:50:23')
     
    多条插入一:
     
    但是如果我要添加张三,李四,王五,是不是要写成下面这个样子?
     
    INSERT INTO student(tname,tage,tInterTime) VALUES('张三',15,'2013-03-03 17:50:23')
    INSERT INTO student(tname,tage,tInterTime) VALUES('李四',15,'2013-03-03 17:50:23')
    INSERT INTO student(tname,tage,tInterTime) VALUES('王五',15,'2013-03-03 17:50:23')
     
    有一个较为简单“点儿”的语法:
     
    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 server 2008中进行了增强,可以这样写:
    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')
     
    但是在2005是不可以的。
     
    多条插入二:
    插入多条语句还有两个变种的语句,但涉及到了查询,所以就先说一下简单查询:
     
    SELECT * FROM student --查询所有数据
    SELECT tName,tAge,tInterTime FROM student  --查询student表中的tName,tAge和tInterTiem字段
     
    这样就可以讲新的多条插入:
     
    INSERT INTO student(tname,tage,tInterTime) SELECT tName,tAge,tInterTime FROM student 
     
    把查询出来的数据插入到student表中的对应字段中,这种插入可以把多个表的数据联合起来放入新表中,而且可以进行很大的数据流操作,很强大。
     
    多条插入三:
    第三种也是相当强大:
    SELECT student.tName,student.tAge,student.tInterTime
    INTO newstu
    FROM student
     
    可以创建新表newstu,然后把student表中的对应字段作为数据插入到新表中。
     
    然后我们可以得到一个新表newstu,里面有所有student中的对应数据。
     
    但是有一个问题,如果我想在新表中有主键ID,并且ID可以自增长,那么可以通过下面的语句实现:
     
    SELECT student.tName,student.tAge,student.tInterTime,IDENTITY(int,1,1) As StudentID
    INTO newstu2
    FROM student
     
    这样就可以在newstu2中创建了新的主键自增长的字段StudentID。如下图:
     
     
    二、删除
    1:
    插入就说这么多,插入了就可能删除,删除的语法很简单:
     
    DELETE FROM student
     
    很简单,但是破坏力也很强大,这条语句会情况student表中的所有数据,所以一般删除都要加条件。
     
    DELETE FROM student WHERE tName='张三'
     
    这样就只会把姓名为张三的数据删掉,WHERE后跟的是条件,用来判断你要操作的数据。至于操作符后面会详细讲一下,这里只需记住简答的,=、!=、> 、<、>=、<=即可。
     
    2:
    TRUNCATE TABLE newstu2
     
    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:
    ALTER TABLE newstu2 DROP COLUMN tInterTime
     
    删除表中的某一列,上例为删除newstu2中的tInterTime列。
     
    三、更新
    现在我们要把student表中,tid为1的学生的名字改为“刘八”,那么我们该怎么做?
     
    UPDATE student SET tname='刘八' WHERE tid=1
     

     

    语法:UPDATE 表名 SET <列名=值> WHERE 条件
  • 相关阅读:
    Vue
    Vue
    Vue
    Vue
    Vue
    Vue
    Vue
    Vue
    Vue
    建立索引该如何选取字段
  • 原文地址:https://www.cnblogs.com/mnight/p/2945728.html
Copyright © 2011-2022 走看看