解决Mysql建表时报错invalid ON UPDATE clause for 'create_date' column
作者:BugCounter
这篇文章主要介绍了解决Mysql建表时报错invalid ON UPDATE clause for 'create_date' column问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Mysql建表时报错invalid ON UPDATE clause for 'create_date' column
这个错误是由于mysql 版本问题导致的
`create_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
这是建表语句。MySQL 5.5 每个表只允许一个列的默认值根据时间戳生成时间
可以查看一下mysql的版本号:
show variables like 'innodb_version';
MySQL创建表易错
场景
提示:DDL - 表操作 - 创建:
通过 MySQL 中的SQL语句创建表遇到的各种报错
问题描述1
一开始是以为输入分号就可以成功创建,结果如下所示:
无论输入多少个按回车都是那样
mysql> create table tb_user( -> id int comment '编号', '> name varchar(50) comment `姓名`, '> age int comment `年龄`, '> gender varchar(1) comment `性别`, '> ) '> comment `用户表`; '> ; '> ; '> ; '> ^C
原因分析1
可能此处以括号结尾,后面的注释不应该换行:
实际上通过查阅资料才发现
MySQL 对于 SQL 语句中的换行没有特别的要求,可以在任何需要的地方进行换行。
SQL 语句的可读性和美观性对于维护和调试都非常重要,因此建议适当地进行换行和缩进,以提高代码的可读性。
建议在以下情况下进行换行:
- 在关键字前换行,以便更好地组织相关语句。
- 在 FROM、JOIN、WHERE、GROUP BY、HAVING、ORDER BY 等关键字后面换行。
- 在 SELECT、INSERT、UPDATE、DELETE 等语句中的列或值列表过长时,可以将每个列或值单独放在一行中,以提高可读性。
下面是一个使用换行和缩进的示例:
SELECT tb_user.*, tb_order.order_no, tb_order.create_time FROM tb_user JOIN tb_order ON tb_user.id = tb_order.user_id WHERE tb_user.age >= 18 GROUP BY tb_user.id HAVING COUNT(tb_order.id) >= 10 ORDER BY tb_user.create_time DESC;
问题描述2
在当初不知道情的情况下,我把换行的问题解决了,后来还是发现没有成功创建
这个语句一旦写错就得Ctrl + C重新来,目前没有找到重新编辑上一行语句的方法。
mysql> create table tb_user( -> id int comment '编号`, '> name varchar(50) comment `姓名`, '> age int comment `年龄`, '> gender varchar(1) comment `性别`, '> ) comment `用户表`; '> ^C
原因分析2
可能是中英文的问题,以及符号运用的问题
这是大多数初学者容易忽略的地方,通常中英文切换后很难记得这回事
还有就是字符串只能用单引号或者双引号,这里用反引号习惯了就出问题了
最后一行字段没有逗号!
解决方案
- 把所有中文符号改过来
- 把所有的字符串用的反引号换成单引号
- 最后一行的逗号去掉
改完之后的代码:
mysql> create table tb_user( -> id int comment '编号', -> name varchar(50) comment '姓名', -> age int comment '年龄', -> gender varchar(1) comment '性别' -> ) comment '用户表'; Query OK, 0 rows affected (0.02 sec)
此时终于创建成功了!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。