[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 ゼロからはじめるデータベース操作》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM