在mysql的存储过程中执行:
insert into table1
select * from table2
where xxxx=xxxx
table1
和table2
的结构是一样的
但是select * from table2 where ...
的结果有时候是空的
这时插入table1
,就会出现Column 'ID' cannot be null
的错误
请问有什么更加安全做法,如果查询的结果是空就不执行插入,MySQL有提供相关的支持么?
[补充]
上面是个归档的存过,归档之后还需要执行删除操作:
insert into month_table
select * from day_table
where xxxx=xxxx;
delete from day_table where xxxx=xxxx;
这时候出现了Dead lock found when try get lock; try restarting transaction
的错误。
是不是因为insert into select...
语句出错但并没有释放锁?
怪我咯2017-04-17 12:03:02
請問有什麼比較安全做法,如果查詢的結果是空就不執行插入,MySQL有提供相關的支援麼?
我如果遇到這個問題,還不會去費盡心思想insert into table1 select * from table2 where xxxx=xxxx
mysql有沒有對這種語法的保護(沒有資料不插入),想要這個小判斷為什麼不自己提前查一下有沒有數據呢?用count, limit 1
但是select * from table2 where ...的結果有時候是空的
這時插入table1,就會出現Column 'ID' cannot be null的錯誤
然後說這個,記憶中不會因為空集報錯的,所以特地寫了PROCEDURE試了下,如果查詢的是空結果集不會報錯,"Column 'ID' cannot be null"這個錯誤應該是ID不允許為空,但你要插入的是空,檢查下吧
這時候出現了Dead lock found when try get lock; try restarting transaction的錯誤。
是不是因為insert into select...語句出錯但並沒有釋放鎖定?
個人覺得不是,請先把上面插入改正確後看是否還有鎖提示,查看mysql的連接看是誰在鎖這個表