欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 ‘秒杀结束时间’,`
      mysql踩坑记录
      但是换一下顺序~~
      mysql踩坑记录
      就报错了

懵逼的是,老师的创建成功了。。。望路过的大神指点下
mysql踩坑记录