1. 程式人生 > 其它 ><轉載>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

  

  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 執行結果正確。