SQL 基礎知識梳理(四) - 數據更新 【博主】反骨仔 【原文】http://www.cnblogs.com/liqingwen/p/5929786.html 序 這是《SQL 基礎知識梳理(三) - 聚合和排序》的下篇。 目錄 插入數據 刪除數據 更新數據 事務 一、插入數據 1.INSERT ...
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 ゼロからはじめるデータベース操作》