SQL 基礎知識

SQL 基礎知識 - 數據更新

  這是《SQL 基礎知識梳理(三) - 聚合和排序》的下篇。

目錄

  • 插入數據
  • 刪除數據
  • 更新數據
  • 事務

一、插入數據

  1.INSERT 語句的基本語法

<code>--語法:
--INSERT INTO (列1, 列2, ...) VALUES (值1, 值2, ...)/<code>
<code>--示例
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
);/<code>
SQL 基礎知識 - 數據更新

    (1)列名和值用逗號隔開,分別放在括號裡,這種形式稱為清單。

<code>        ( 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
)
--值清單 /<code>

一次性多行 INSERT

  

  2.省略列清單

<code>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
);/<code>

  

  3.插入 NULL 值

<code>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
);/<code>

  【備註】插入 NULL 值的列不能設置為 NOT NULL 約束。

  

  4.插入默認值

<code>--示例:創建表時設置默認值
CREATE TABLE ShohinIns
(
id CHAR(4) NOT NULL,
num INT DEFAULT 0 --DEFAULT 默認約束
)/<code>
<code>--示例:INSERT 時顯示插入默認值
INSERT INTO dbo.ShohinIns
( id, num )
VALUES ( '001', -- id - char(4)
DEFAULT -- num - int
)/<code>
<code>--示例:INSERT 隱式插入默認值
INSERT INTO dbo.ShohinIns( id )
VALUES ('002')/<code>
SQL 基礎知識 - 數據更新

  【備註】建議使用顯示的方式插入值。如果插入的時候隱式省略了列名,並且該列沒有指定默認值的時候,該列的值會被設定為 NULL(如果省略的列設置了 NOT NULL 約束的話,執行會報錯)。

  【總結】省略 INSERT 語句的列名,就會自動設定該列的默認值(沒有默認值時會設定為 NULL)。

  

  5.從其它表複製數據

<code>--語法
INSERT ...
SELECT .../<code>
<code>--示例
INSERT dbo.ShohinIns
( id, num )
SELECT shohin_id, shiire_tanka
FROM dbo.Shohin/<code>
<code>--示例
INSERT INTO dbo.ShohinIns
( id, num )
SELECT id=1, num =2;/<code>
<code>--示例
INSERT INTO dbo.ShohinIns
( id, num )
SELECT 1, 2;/<code>

  【備註】INSERT 語句中的 SELECT 語句中,可以使用 WHERE 子句或者 GROUP BY 子句等任何 SQL 語法。(但使用 ORDER BY 子句並不會產生任何效果。)

二、刪除數據

  1.2 種 刪除數據的方法:

    (1)DROP TABLE 語句:刪除表

    (2)DELETE 語句:刪除表的數據

<code>--語法
--DELETE FROM ;/<code>
<code>--示例
DELETE FROM dbo.ShohinIns;/<code>

  【備註】DELETE 語句刪除的對象是記錄(行),不是表和列。

  2.指定刪除對象的 DELETE 語句

<code>--語法
--DELETE FROM
--WHERE ;/<code>
<code>--示例
DELETE FROM dbo.Shohin
WHERE hanbai_tanka >= 4000;/<code>

  【備註】可以通過 WHERE 子句指定對象條件來刪除部分數據。

  【備註】DELETE 語句中不能使用 GROUP BY、HAVING 和 ORDER BY 三類子句。

  【備註】如果要刪除表全部數據時請使用 TRUNCATE ,它比 DELETE 子句更高效。

三、更新數據

  1.UPDATE 子句的基本語法

<code>--語法
--UPDATE
-- SET = /<code>

  2.指定條件的 UPDATE 語句

<code>--語法
--UPDATE
-- SET =
--WHERE ;/<code>
<code>--示例
UPDATE dbo.Shohin
SET hanbai_tanka = hanbai_tanka * 10
WHERE shohin_bunrui = '廚房用具';/<code>

  

  3、使用 NULL 進行更新

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

  【備註】只有未設置 NOT NULL 約束和主鍵約束的列才可以清空為 NULL。

  

  4.多列更新

<code>--示例
UPDATE dbo.Shohin
SET hanbai_tanka = hanbai_tanka * 10,    --逗號分割
shiire_tanka = shiire_tanka / 2
WHERE shohin_bunrui = '廚房用具'/<code>

四、事務

  1.事務:需要在同一個處理單元中執行的一系列更新處理的集合。

  2.創建事務:

<code>--語法
--事務開始語句
-- DML 語句①;
-- DML 語句②;
-- ...
--事務結束語句(COMMIT 或 ROLLBACK);/<code>

    (1)COMMIT - 提交處理:提交事務包含的全部更新處理的結束指令。一旦提交,無法恢復到事務開始前的狀態。

    (2)ROLLBACK - 取消處理:取消事務包含的全部更新處理的結束指令。一旦回滾,數據庫就會回覆到事務開始之前的狀態。

<code>--示例
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/<code>

  

  3.ACID 特性

    (1)原子性(Atomicity):在事務結束時,其中包含的更新處理要麼全部執行,要麼完全不執行。

    (2)一致性(Consistency):事務中包含的處理,要滿足數據庫提前設置的約束,也稱完整性。

    (3)隔離性(lsolation):保證不同事務之前互不干擾的特性。

    (4)持久性(Durability):事務一旦結束,DBMS 會保證該時點的數據狀態得以保存的特性,也稱耐久性。

      

備註

  這裡採用 MS SQL Server 進行驗證,不保證所有的 DBMS 執行結果正確。


分享到:


相關文章: