为了账号安全,请及时绑定邮箱和手机立即绑定

CREATE...SELECT出现错误

CREATE...SELECT出现错误 为什么先创建数据表,然后INSERT...SELECT时可以操作成功,但是直接CREATE...SELECT时就会出现错误:field'cate_name' doesn't have a default value?



正在回答

3 回答

上一条回答并不严谨,也没有捕捉到真正的点。

在使用CREATE SELECT时并没有指定对应列名,所以这里就需要注意一个地方:新创建表中的想插入数据的字段名必须要与SELECT中的字段名称一致才可以,如果名字不一致了那么插入查询结果时那个字段只能为NULL,但若同时那个字段被你定义为NOT NULL,那么就会产生这个“doesn't have a default value”问题。

在实际操作中,是这样的:

http://img1.sycdn.imooc.com//5a35200000017fd913400053.jpg

没错,是这个问题,于是去掉NOT NULL的非空约束,是没有问题了,Query OK, 9 rows affected。可是查询表中的记录,你会发现:

http://img1.sycdn.imooc.com//5a351fff00010d9103340295.jpg

因为字段名不一致,那个different的字段值都被赋为NULL,因为查不到,并且还创建了新的字段,这里也就明白了为什么老师PPT上为什么对列的定义 [(create_definition,…)] 竟然还是可选的参数,因为你要是不手动定义,MySQL会把SELECT的表对应的字段的定义给复制过来

另外上一条回答其实也牵涉到了另外一个知识点。

2 回复 有任何疑惑可以回复我~
#1

Hyalin3

刚试了一下有一个方法可以解决:使用别名就不会报错 将 SELECT brand_name FROM tdb_goods ...... 改为 SELECT brand_name AS name(就是新表对应的列名称) FROM tdb_goods...........
2019-04-17 回复 有任何疑惑可以回复我~

最简单的方法是cate_name字段允许为空,更详细的原因参考:https://www.cnblogs.com/os-python/p/6773499.html

0 回复 有任何疑惑可以回复我~

应该是列和对应的值得参数不匹配

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

CREATE...SELECT出现错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信