开发者社区> 问答> 正文

MySQL 数据库将查询结果插入问题

在mysql的存储过程中执行:
insert into table1
select * from table2
where xxxx=xxxx
table1和table2的结构是一样的
但是select * from table2 where ...的结果有时候是空的
这时插入table1,就会出现Column 'ID' cannot be null的错误
请问有什么更加安全做法,如果查询的结果是空就不执行插入,MySQL有提供相关的支持么?

展开
收起
蛮大人123 2016-02-11 10:47:08 2693 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    我如果遇到这个问题,还不会去费尽心思想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的连接看是谁在锁这个表

    2019-07-17 18:40:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载

相关镜像