亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

不同級聯策略影響行數

這個不同的級聯策略影響的行數還不一樣呀?使用案例中的這個數據庫表級聯策略為cascade時影響的row為1,級聯策略為set null時影響的行數為記錄的條數

正在回答

2 回答

你好,我使用mysql5.7做實驗,進行級聯刪除策略設置,例如我刪除一個角色表中的數據,持有該角色的用戶表的用戶也跟著級聯刪除或者設置為set null,并且持有該角色的用戶都是2條,兩種不同策略下的執行delete角色操作,影響的row都顯示為1,沒出現你說的情況,請問你是使用什么數據庫的什么版本,怎樣設置,怎么操作的出現了上述情況?

0 回復 有任何疑惑可以回復我~
#1

qq_你的樣子_3 提問者

我的數據庫版本是mysql 5.5 級聯策略為cascade時執行:delete from user。結果為:共 1 行受到影響 級聯策略為set null時執行:delete from user。結果為:共 5 行受到影響
2019-10-10 回復 有任何疑惑可以回復我~
#2

老猿 回復 qq_你的樣子_3 提問者

剛才我又試驗了一遍,設置成set null后,影響行數還是1,你delete掉的user記錄確實是一條嗎?難道是不同的mysql版本,不一樣。
2019-10-10 回復 有任何疑惑可以回復我~
#3

qq_你的樣子_3 提問者 回復 老猿

我在下面的回答寫了建表語句,你看一下有什么問題嗎
2019-10-10 回復 有任何疑惑可以回復我~

CREATE TABLE USER(

? ? id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主鍵id',

? ? username VARCHAR(20) DEFAULT NULL COMMENT '姓名',

? ? age INT NOT NULL DEFAULT 0 COMMENT '年齡',

? ? email VARCHAR(30) DEFAULT NULL COMMENT '郵箱',

? ? manager_id BIGINT(20) DEFAULT NULL COMMENT '直屬主管id',

? ? create_time DATETIME DEFAULT NULL COMMENT '創建時間',

? ? update_time DATETIME DEFAULT NULL COMMENT '修改時間',

? ? VERSION INT(11) NOT NULL DEFAULT 1 COMMENT '版本',

? ? deleted INT(1) NOT NULL DEFAULT 0 COMMENT '邏輯刪除標識(0:未刪除,1:已刪除)',

? ? CONSTRAINT manager_fk FOREIGN KEY (manager_id) REFERENCES USER (id) ON DELETE CASCADE ON UPDATE CASCADE

? ? -- CONSTRAINT manager_fk FOREIGN KEY (manager_id) REFERENCES USER (id) ON DELETE set null ON UPDATE set null

)ENGINE=INNODB CHARSET=utf8;


INSERT INTO USER (id, username, age, email, manager_id, create_time)

VALUES(10001, '大boss', 40, '[email protected]', NULL, '2019-06-06 06:06:06'),

? ? ? (10002, '張三豐', 40, '[email protected]', 10001, '2019-07-07 07:07:07'),

? ? ? (10003, '郭靖', 40, '[email protected]', 10002, '2019-08-08 08:08:08'),

? ? ? (10004, '楊過', 35, '[email protected]', 10002, '2019-08-28 20:08:08'),

? ? ? (10005, '張無忌', 20, '[email protected]', 10002, '2019-06-25 15:22:34');


這個是建表以及插入語句,上面設置了兩種不同的級聯策略,我再看一看吧??!這個就是我在看那個mp自定義sql的時候執行了自定義的delete from user看到最后返回的結果是影響的行數是1,才看了看這個東西。

0 回復 有任何疑惑可以回復我~
#1

老猿

哦,我的操作跟你不一樣,所以結果不一樣。我跟你一樣的操作,結果和你是一樣的,設置策略為級聯刪除的話,我刪除了五條記錄,但返回的影響行數是1。這應該是數據庫的機制,我猜測他是給你刪除了大boss那條數據,然后其他四條因為manager_id直接或間接關聯到大boss,所以級聯刪除了。但數據庫認為你只直接刪了大boss,其他是級聯刪除,所以影響行數為1.
2019-10-10 回復 有任何疑惑可以回復我~
#2

qq_你的樣子_3 提問者 回復 老猿

好吧,那這樣的話一般設計表是設計級聯策略為not null還是就不進行級聯關系的設置,在查詢的時候進行邏輯上的級聯。O(∩_∩)O哈哈~,隨便討論討論
2019-10-10 回復 有任何疑惑可以回復我~
#3

老猿 回復 qq_你的樣子_3 提問者

我們一般做項目,主外鍵不設置級聯刪除和set null。因為這樣挺危險的,很多公司不允許這么干。如果有外鍵關系,不設置級聯刪除和set null,一般物理刪除,先判斷該數據的從表中是否有數據引用該數據,如果有通過程序控制,提示不允許刪除。如果是邏輯刪除的話,因為該數據只是更新,不會涉及到從表的變化。
2019-10-12 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

不同級聯策略影響行數

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號