zoukankan      html  css  js  c++  java
  • [SQL] SQL 基础知识梳理(四)

    SQL 基础知识梳理(四) - 数据更新

    【博主】反骨仔    【原文】http://www.cnblogs.com/liqingwen/p/5929786.html

      

      这是《SQL 基础知识梳理(三) - 聚合和排序》的下篇。

    目录

    一、插入数据

      1.INSERT 语句的基本语法

    --语法:
    --INSERT INTO <表名>(列1, 列2, ...) VALUES (值1, 值2, ...)
    --示例
    INSERT
    INTO dbo.Shohin ( shohin_id , shohin_mei , shohin_bunrui , hanbai_tanka , shiire_tanka , torokubi ) VALUES ( '0011' , -- shohin_id - char(4) 'T 恤衫' , -- shohin_mei - varchar(100) '衣服' , -- shohin_bunrui - varchar(32) 1000 , -- hanbai_tanka - int 500 , -- shiire_tanka - int GETDATE() -- torokubi - date );

     

        (1)列名和值用逗号隔开,分别放在括号里,这种形式称为清单

            ( shohin_id ,        
              shohin_mei ,
              shohin_bunrui ,
              hanbai_tanka ,
              shiire_tanka ,
              torokubi
            )        
            --列清单
    
            ( '0011' , -- shohin_id - char(4)
              'T 恤衫' , -- shohin_mei - varchar(100)
              '衣服' , -- shohin_bunrui - varchar(32)
              1000 , -- hanbai_tanka - int
              500 , -- shiire_tanka - int
              GETDATE()  -- torokubi - date
            )        
            --值清单    
    INSERT INTO dbo.Shohin
            ( shohin_id ,
              shohin_mei ,
              shohin_bunrui ,
              hanbai_tanka ,
              shiire_tanka ,
              torokubi
            )
    VALUES  ( '0012' , -- shohin_id - char(4)
              'T 恤衫' , -- shohin_mei - varchar(100)
              '衣服' , -- shohin_bunrui - varchar(32)
              1000 , -- hanbai_tanka - int
              500 , -- shiire_tanka - int
              GETDATE()  -- torokubi - date
            ),
            ( '0013' , -- shohin_id - char(4)
              'T 恤衫' , -- shohin_mei - varchar(100)
              '衣服' , -- shohin_bunrui - varchar(32)
              1000 , -- hanbai_tanka - int
              500 , -- shiire_tanka - int
              GETDATE()  -- torokubi - date
            );
    一次性多行 INSERT

      

      2.省略列清单

    INSERT INTO dbo.Shohin
    VALUES  ( '0014' , -- shohin_id - char(4)
              'T 恤衫' , -- shohin_mei - varchar(100)
              '衣服' , -- shohin_bunrui - varchar(32)
              1000 , -- hanbai_tanka - int
              500 , -- shiire_tanka - int
              GETDATE()  -- torokubi - date
            );

      

      3.插入 NULL 值

    INSERT INTO dbo.Shohin
    VALUES  ( '0015' , -- shohin_id - char(4)
              'T 恤衫' , -- shohin_mei - varchar(100)
              '衣服' , -- shohin_bunrui - varchar(32)
              1000 , -- hanbai_tanka - int
              NULL , -- shiire_tanka - int
              GETDATE()  -- torokubi - date
            );

      【备注】插入 NULL 值的列不能设置为 NOT NULL 约束。

      

      4.插入默认值

    --示例:创建表时设置默认值
    CREATE TABLE ShohinIns
    (
        id CHAR(4) NOT NULL,
        num INT DEFAULT 0    --DEFAULT 默认约束
    )
    --示例:INSERT 时显示插入默认值
    INSERT INTO dbo.ShohinIns
            ( id, num )
    VALUES  ( '001', -- id - char(4)
              DEFAULT  -- num - int
              )
    --示例:INSERT 隐式插入默认值
    INSERT INTO dbo.ShohinIns( id )
    VALUES  ('002')

      【备注】建议使用显示的方式插入值。如果插入的时候隐式省略了列名,并且该列没有指定默认值的时候,该列的值会被设定为 NULL(如果省略的列设置了 NOT NULL 约束的话,执行会报错)。

      【总结】省略 INSERT 语句的列名,就会自动设定该列的默认值(没有默认值时会设定为 NULL)。

      

      5.从其它表复制数据

    --语法
    INSERT ... 
    SELECT ...
    --示例
    INSERT
    dbo.ShohinIns ( id, num ) SELECT shohin_id, shiire_tanka FROM dbo.Shohin
    --示例
    INSERT INTO dbo.ShohinIns
            ( id, num )
    SELECT id=1, num =2;
    --示例
    INSERT INTO dbo.ShohinIns
            ( id, num )
    SELECT 1, 2;

       【备注】INSERT 语句中的 SELECT 语句中,可以使用 WHERE 子句或者 GROUP BY 子句等任何 SQL 语法。(但使用 ORDER BY 子句并不会产生任何效果。)

    二、删除数据

      1.2 种 删除数据的方法:

        (1)DROP TABLE 语句:删除表

        (2)DELETE 语句:删除表的数据

    --语法
    --DELETE FROM <表名>;
    --示例
    DELETE
    FROM dbo.ShohinIns;

      【备注】DELETE 语句删除的对象是记录(行),不是表和列。

      2.指定删除对象的 DELETE 语句

    --语法
    --DELETE FROM <表名>
    --WHERE <条件>;
    --示例
    DELETE FROM dbo.Shohin
    WHERE hanbai_tanka >= 4000;

      【备注】可以通过 WHERE 子句指定对象条件来删除部分数据。

      【备注】DELETE 语句中不能使用 GROUP BY、HAVING 和 ORDER BY 三类子句。

      【备注】如果要删除表全部数据时请使用 TRUNCATE <表名>,它比 DELETE 子句更高效。

    三、更新数据

      1.UPDATE 子句的基本语法

    --语法
    --UPDATE <表名>
    --    SET <列名> = <表达式>

      2.指定条件的 UPDATE 语句

    --语法
    --
    UPDATE <表名> -- SET <列名> = <表达式> --WHERE <条件>;
    --示例
    UPDATE
    dbo.Shohin SET hanbai_tanka = hanbai_tanka * 10 WHERE shohin_bunrui = '厨房用具';

      

      3、使用 NULL 进行更新

    --示例
    UPDATE dbo.Shohin
        SET torokubi = NULL
    WHERE shohin_id = '008';

      【备注】只有未设置 NOT NULL 约束和主键约束的列才可以清空为 NULL。

      

      4.多列更新

    --示例
    UPDATE dbo.Shohin
        SET hanbai_tanka = hanbai_tanka * 10,    --逗号分割
            shiire_tanka = shiire_tanka / 2
    WHERE shohin_bunrui = '厨房用具'

    四、事务

      1.事务:需要在同一个处理单元中执行的一系列更新处理的集合。

      2.创建事务:

    --语法
    --事务开始语句
    --    DML 语句①;
    --    DML 语句②;
    --    ...
    --事务结束语句(COMMIT 或 ROLLBACK);

        (1)COMMIT - 提交处理:提交事务包含的全部更新处理的结束指令。一旦提交,无法恢复到事务开始前的状态。

        (2)ROLLBACK - 取消处理:取消事务包含的全部更新处理的结束指令。一旦回滚,数据库就会回复到事务开始之前的状态。

    --示例
    BEGIN
    TRANSACTION; UPDATE dbo.Shohin SET hanbai_tanka = hanbai_tanka - 1000 WHERE shohin_mei = '运动 T 恤'; UPDATE dbo.Shohin SET hanbai_tanka = hanbai_tanka + 1000 WHERE shohin_mei = 'T 恤衫'; DELETE FROM dbo.Shohin WHERE shohin_id = '0015'; ROLLBACK;  -- COMMIT

      

      3.ACID 特性

        (1)原子性(Atomicity):在事务结束时,其中包含的更新处理要么全部执行,要么完全不执行。

        (2)一致性(Consistency):事务中包含的处理,要满足数据库提前设置的约束,也称完整性。

        (3)隔离性(lsolation):保证不同事务之前互不干扰的特性。

        (4)持久性(Durability):事务一旦结束,DBMS 会保证该时点的数据状态得以保存的特性,也称耐久性。

          

    备注

      这里采用 MS SQL Server 进行验证,不保证所有的 DBMS 执行结果正确。

    传送门

      《SQL 基础知识梳理(一) - 数据库与 SQL

      《SQL 基础知识梳理(二) - 查询基础

      《SQL 基础知识梳理(三) - 聚合和排序


    【参考】《SQL ゼロからはじめるデータベース操作》

  • 相关阅读:
    UNIX网络编程读书笔记:原始套接口
    UNIX网络编程读书笔记:UNIX域协议
    UNIX网络编程读书笔记:名字与地址转换
    链表的游标(cursor)实现
    基数排序
    UNIX网络编程读书笔记:基本SCTP套接口编程
    Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
    git版本控制工具(二)----本地版本库的常用操作
    Android系列之Fragment(二)----Fragment的生命周期和返回栈
    Git版本控制工具(一)----git的安装及创建版本库
  • 原文地址:https://www.cnblogs.com/liqingwen/p/5929786.html
Copyright © 2011-2022 走看看