mysql使用中错误集锦

1.查询时报错 create_time can't be null

  一遍遍看数据  并未发现null的,将timestap类型改成datetime仍然不行 

 最后发现数据中 create_time 字段值为0000-00-00 00:00:00  改成正常值即可

疑问? 为什么这个值会被mysql数据库认为是null

未解,但get 到

mysql中时间类型datetime与timestamp的有效范围

datetime   类型取值范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59

timestamp类型取值范围:1970-01-01 00:00:00 到 2037-12-31 23:59:59


2.

首先 mysql 的update语句为

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'

再一次需要做更新的情况时 如下:我要根据各种条件查询查出满足条件的a表中的数据 然后再去更新这些数据中的某些属性

sql1:

select DISTINCT(contract_id) as a from class_user where class_user.contract_id in (select id from contract where plan_lesson_count =0 ) 

sql2:

UPDATE contract SET plan_lesson_count = total_lesson_count WHERE id in sql1

查询时报错:You can't specify target table <tbl> for update in FROM clause

原因:不能先select出同一表中的某些值,再update这个表(在同一语句中)

也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和oracle不会出现此问题

故 改造为:

UPDATE contract SET plan_lesson_count = total_lesson_count WHERE id in(select b.a from(select DISTINCT(contract_id) as a from class_user where class_user.contract_id in (select id from contract where plan_lesson_count =0 and contract.type = 2)) b

参考解决:

https://blog.csdn.net/priestmoon/article/details/8016121

------------------------------------------------------------------------------------------------------------------------------



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值