[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(開始交易,鎖定資料,限制一個人使用),問題解決。
留言
張貼留言