2017-06-27 59 views
3

我使用的是MySQL 5.7MySql的安全模式下刪除

DROP TABLE IF EXISTS `session`; 
CREATE TABLE `session` (
`Id` varchar(128) NOT NULL, 
`Browser` varchar(128) NOT NULL, 
`IpAddress` varchar(128) NOT NULL, 
`UserId` varchar(128) NOT NULL, 
`CreatedAt` datetime DEFAULT NULL, 
`ModifiedAt` datetime DEFAULT NULL, 
`CreatedBy` varchar(256) DEFAULT NULL, 
`ModifiedBy` varchar(256) DEFAULT NULL, 
PRIMARY KEY (`Id`) 
); 


DELETE FROM session 
WHERE Id IN (SELECT * FROM (SELECT Id FROM session WHERE CreatedAt > NOW()) AS temp); 

我得到一個錯誤:錯誤代碼:1175您正在使用安全更新模式,你試過沒有一個WHERE使用一鍵更新表列要禁用安全模式,請在首選項 - > SQL編輯器中切換選項並重新連接。 0.000秒

我不認爲禁用安全更新是一個好主意。關閉保存模式answers here 也許有其他解決方案。有任何想法嗎 ? !

追加的虛擬條件= '' 和刪除作品

DELETE FROM session 
WHERE Id !='' AND Id IN (SELECT * FROM (SELECT Id FROM session WHERE Browser = "Mozilla") AS temp); 

SELECT * FROM會議;

像標識虛擬條件IS NOT NULL或身份證件( 「some_dummy_id_here」)犯規作品

感謝@ TIM-biegeleisen求助!

回答

2

也許你可以嘗試在使用密鑰的WHERE子句中添加一個虛擬條件,例如,

DELETE FROM session 
WHERE Id <> '' AND 
     Id IN (SELECT * FROM (SELECT Id FROM session WHERE CreatedAt > NOW()) AS temp); 

假設主鍵列Id始終沒有空字符串,那麼增加這個情況不會影響你的刪除邏輯。

正如你所說,你也可以在你的會話通過禁用安全模式:

SET SQL_SAFE_UPDATES = 0; 

如果你是偏執/謹慎,你甚至可以執行你刪除查詢後打開安全更新回

SET SQL_SAFE_UPDATES = 1; 
+0

Id是PK。我試過「不爲空」和「Id IN(」dummy_Id_here「)」不起作用 – Oleh

+0

請發佈'session'的表結構。 –

+0

更新了與表格的問題。我們使用GUID作爲Id,這就是爲什麼它是varchar(128) – Oleh