[SQL] 資料庫控制語言與操作語言介紹

資料操作語言 DML

INSERT INTO插入資料

插入一筆資料到資料表(不指定欄位)
INSERT INTO userinfo VALUES ('A03','王大明')
注意:values後的資料順序要與資料表欄位相同,若不知道資料內容要補null,不可為空欄位。

插入資料到指定的欄位
/*將'宜蘭縣'插入到HOUSE資料表的ADDRESS欄位*/
INSERT INTO house(address) VALUES ('宜蘭縣')
(house資料表HID為自動填入的流水號,所以指定欄位Address填入。)

將某資料表裡的資料複製到新的資料表 (通常是備份資料時用)

/*將台北市民眾資料複製到另一個資料表*/
INSERT INTO new_table (uid, cname)
  SELECT uid, cname
  FROM v_userinfo_taipei

注意:插入資料前要確認目的地資料表已存在。

--把house表裡面的台北市資料插入到new_house資料表。
insert into new_house select * from house where address like '台北市%'

指定複製的欄位

/*把house表裡面的宜蘭縣資料插入到new_house資料表中的b欄位(指定複製的欄位要與新資料表欄位對應)*/
insert into new_house (b) select address from house where address like '宜蘭縣%'

UPDATE 更新資料

更新所有資料

UPDATE userinfo SET cname = NULL

更新特定資料

--將 A03 的姓名改為孫小毛,身份證字號改為B01
UPDATE userinfo SET
cname = '孫小毛',uid = 'B01'
WHERE uid = 'A03'

DELETE 刪除資料

刪除所有資料

/*刪除bill資料表內的所有資料*/
DELETE FROM bill

/*另一種刪除方式*/
TRUNCATE TABLE bill

補充:
Truncate算是軟刪除,將資料表上設個指標,因此瞬間就刪除了,但並非真的將資料完全刪除。
Delete刪除速度慢,是真的將資料刪除。

刪除特定資料

刪除userinfo裡UID為B01的資料

DELETE FROM userinfo
WHERE uid = 'B01'


資料控制語言 DCL

COMMIT&ROLLBACK

BEGIN TRANSACTION (又稱事務性工作) 宣告交易開始

COMMIT 確認交易成功

ROLLBACK 交易失敗,恢復交易前狀態


語法範例:

BEGIN TRANSACTION
DELETE FROM userinfo WHERE uid = 'A01'
ROLLBACK
/*A01 資料還在*/


注意事項:

Begin transaction 到 commit/rollback間越短越好,因為當中的資料是被lock住,其他使用者無法使用。

E.g. 提款機設計:在確認交易金額時再開始交易,前面的程序開始交易沒必要,反而造成資料被鎖定,造成效率低落。

**越爛的資料庫,鎖定的範圍越大。反之,越好的資料庫可根據使用者使用區域,單獨鎖定該使用者寫入的範圍資料,使其他使用者仍可正常存取未被鎖定住的資料。

**系統LOCK有時未必能滿足使用者需求,有時仍需手動LOCK。

E.g. 選課系統設定60人上限加退選(點選後拿取數據,確認是否小於60,若小於可加選並回寫資料庫),兩人同時拉資料庫數據(59),在同時放回(61),因此手動lock(開始交易,鎖定資料,限制一個人使用),問題解決。

留言

Popular Posts

[T-SQL] T-SQL 基本介紹_筆記

[SQL] 查詢語法基本介紹 Part 5 (視觀表 View)

[SQL] MS-SQL資料庫卸離與備份還原