PostgresSql 多表關聯刪除語句的操作
最近用PostgresSql數據庫進行多表關聯刪除的操作,在寫sql語句的時候遇到瞭問題:
DELETE s.* FROM student s,classroom c WHERE s.cid = c.id AND s.sid = 1 DELETE FROM student s,classroom c WHERE s.cid = c.id AND s.sid = 1
上面兩種寫法操作後提示報錯,下面是PostgresSql數據庫對多表關聯操作的正確用法,多張表之間用USING連接:
DELETE FROM student s USING classroom c WHERE s.cid = c.id AND s.sid = 1
補充:PostgresSQL中的限制和級聯刪除
刪除和更新時對應的操作是一樣的
1 Restrict
禁止刪除被引用的行 (不能將約束檢查推遲到事物的晚些時候)
2 No Action
如果存在任何引用行,則拋出錯誤,如果不聲明任何行為則No Action就是缺省行為 (允許約束檢查推遲到事物的晚些時候)
3 Cascade
在刪除一個被引用的行時,引用他的行被自動刪除
4 Set Null
(外鍵上才有) 刪除被引用行時,引用他的字段設置為NULL
5 Set Default
(外鍵上才有) 刪除被引用行時,引用他的字段被設置為缺省值
註意:一個動作聲明為Set Default 但是缺省值並不能滿足外鍵,那麼動作就會失敗
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- MySQL中外鍵的創建、約束以及刪除
- Mysql外鍵設置中的CASCADE、NO ACTION、RESTRICT、SET NULL
- postgresql刪除主鍵的操作
- 新手必學的mysql外鍵設置方式
- postgresql 實現多表關聯刪除