重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
我就不造你的 學生表和成績表了.
十年的江北網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整江北建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“江北網站設計”,“江北網站推廣”以來,每個客戶項目都認真落實執行。
用 test_main 表 和 test_sub ?代替說明
--?創建測試主表.?ID?是主鍵.
CREATE?TABLE?test_main?(
id??????INT???NOT?NULL,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?創建測試子表.?
CREATE?TABLE?test_sub?(
id??????INT??NOT?NULL,
main_id?INT?,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?插入測試主表數據.
INSERT?INTO?test_main(id,?value)?VALUES?(1,?'ONE');
INSERT?INTO?test_main(id,?value)?VALUES?(2,?'TWO');
--?插入測試子表數據.
INSERT?INTO?test_sub(id,?main_id,?value)?VALUES?(1,?1,?'ONEONE');
INSERT?INTO?test_sub(id,?main_id,?value)?VALUES?(2,?2,?'TWOTWO');
通過 ?DELETE CASCADE??外鍵約束的處理機制來處理
mysql?ALTER?TABLE?test_sub
-???ADD?CONSTRAINT?main_id_cons
-???FOREIGN?KEY?(main_id)
-???REFERENCES??test_main(id)
-???ON?DELETE?CASCADE//
Query?OK,?2?rows?affected?(0.16?sec)
Records:?2??Duplicates:?0??Warnings:?0
mysql?DELETE?FROM
-???test_main
-?WHERE
-???id?=?1;
-?//
Query?OK,?1?row?affected?(0.02?sec)
mysql?SELECT
-???*
-?FROM
-???test_sub;
-?//
+----+---------+--------+
|?id?|?main_id?|?value??|
+----+---------+--------+
|??2?|???????2?|?TWOTWO?|
+----+---------+--------+
1?row?in?set?(0.00?sec)
如果你非要使用觸發器來處理, 那么下面是一個例子:
--?創建測試主表.?ID?是主鍵.
CREATE?TABLE?t_test_main?(
id??????INT???NOT?NULL,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?創建測試子表.?
CREATE?TABLE?t_test_sub?(
id??????INT??NOT?NULL,
main_id?INT?,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?插入測試主表數據.
INSERT?INTO?t_test_main(id,?value)?VALUES?(1,?'ONE');
INSERT?INTO?t_test_main(id,?value)?VALUES?(2,?'TWO');
--?插入測試子表數據.
INSERT?INTO?t_test_sub(id,?main_id,?value)?VALUES?(1,?1,?'ONEONE');
INSERT?INTO?t_test_sub(id,?main_id,?value)?VALUES?(2,?2,?'TWOTWO');
DELIMITER?//
CREATE?TRIGGER?tr_t_test_main_Del
BEFORE?DELETE?ON?t_test_main
FOR?EACH?ROW
BEGIN
DELETE?FROM?t_test_sub?WHERE?main_id?=?OLD.id;
END;
//
DELIMITER?;
mysql?delete?from??t_test_main??where?id?=?1;
Query?OK,?1?row?affected?(0.01?sec)
mysql?select?*?from?t_test_sub;
+----+---------+--------+
|?id?|?main_id?|?value??|
+----+---------+--------+
|??2?|???????2?|?TWOTWO?|
+----+---------+--------+
1?row?in?set?(0.00?sec)
設定外鍵為級聯刪除就可以了。
alter table B add constraint fk_ID foreign key (ID) references A(ID) on delete cascade;
這樣只需:delete from A where ID=nnnn; 就可以自動刪除對應B表內容了。
通過外鍵無法實現同步更新。
這個在建表的時候就可以指定了
CREATE TABLE buildings (
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
CREATE TABLE rooms (
room_no INT PRIMARY KEY AUTO_INCREMENT,
room_name VARCHAR(255) NOT NULL,
building_no INT NOT NULL,
FOREIGN KEY (building_no)
REFERENCES buildings (building_no)
ON DELETE CASCADE
);
當執行
DELETE FROM buildings
WHERE
building_no = 2;的時候,rooms表中的building_no =2的記錄都會被刪掉。
DELETE刪除多表數據,怎樣才能同時刪除多個關聯表的數據呢?這里做了深入的解釋:
1 delete from t1 where 條件
2 delete t1 from t1 where 條件
3 delete t1 from t1,t2 where 條件
4 delete t1,t2 from t1,t2 where 條件
前 3者是可行的,第4者不可行。
也就是簡單用delete語句無法進行多表刪除數據操作,不過可以建立級聯刪除,在兩個表之間建立級聯刪除關系,則可以實現刪除一個表的數據時,同時刪除另一個表中相關的數據。
1、從數據表t1中把那些id值在數據表t2里有匹配的記錄全刪除 掉1 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id
2、從數據表t1里在數據表t2里沒有匹配的記錄查找出來并刪除掉1 DELETE t1 FROM t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL 或 DELETE FROM t1,USING t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL
3、 從兩個表中找出相同記錄的數據并把兩個表中的數據都刪除掉1 DELETE t1,t2 from t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t1.id=25
注意此處的delete t1,t2 from 中的t1,t2不能是別名
如:1 delete t1,t2 from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25
在數據里面執行是錯誤的(MYSQL 版本不小于5.0在5.0中是可以的)
上述語句改 寫成1 delete table_name,table2_name from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25
在數據里面執行是錯誤的(MYSQL 版本小于5.0在5.0中是可以的)