mysql踩坑记录
程序员文章站
2024-03-25 11:28:22
...
由于本小白并未系统学习过mysql数据库,今天跟着慕课网视频,敲创表sql语句。一模一样的sql语句,人家的轻松通过,我的一直报错(用的cmd)。找了半天,逼不得已只能一个一个词去掉调试sql语句,还去度娘那串了个门。才发现了两处错误,特此做个笔记,希望下次不要在掉坑。
PS:看来得找个时间系统学下mysql了
sql语句在此(windows的给过了):
CREATE TABLE seckill (
seckill_id bigint NOT NULL AUTO_INCREMENT COMMENT '商品库存ID',
name varchar(120) NOT NULL COMMENT '名字',
number int NOT NULL COMMENT '库存数量',
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
start_time timestamp NOT NULL COMMENT '秒杀开始时间',
end_time timestamp NOT NULL COMMENT '秒杀结束时间',
PRIMARY KEY(seckill_id),
KEY idx_start_time(start_time),
KEY idx_end_time(end_time),
KEY idx_create_time(create_time)
)ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT '秒杀库存表';
问题:
- 在创建表的时候,列名(即字段名)上不能带引号(单、双引号都不行)。
- 在设置时间默认值上:由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用TIMESTAMP类型代替DATETIME类型。
- 可是,最坑的就是:TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。所以,需要创建默认时间的那个字段,在创表的时候一定要在其他时间字段上面。比如这样就可以:
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
start_time timestamp NOT NULL COMMENT ‘秒杀开始时间’,
end_time timestamp NOT NULL COMMENT ‘秒杀结束时间’,`
但是换一下顺序~~
就报错了
- 可是,最坑的就是:TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。所以,需要创建默认时间的那个字段,在创表的时候一定要在其他时间字段上面。比如这样就可以:
懵逼的是,老师的创建成功了。。。望路过的大神指点下
上一篇: vue-cli3配置ie兼容
下一篇: 实验十九MSTP