问答详情
源自:4-1 数据库设计与编码

和老师的sql一样,怎么会报错1067?

DROP TABLE IF EXISTS `seckill`;
create table seckill(
`seckill_id` bigint not null auto_increment comment '商品库存ID',
`name` varchar(120) not null comment '商品名称',
`number` int not null comment '库存数量',
`start_time` timestamp not null comment '秒杀开始时间',
`end_time` timestamp not null comment '秒杀结束时间',
`create_time` timestamp not null default current_timestamp 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='秒杀库存表';

1067 - Invalid default value for 'end_time'

提问者:键盘兔 2016-07-13 11:20

个回答

  • withyou王杰
    2016-10-02 00:34:16

    我帮你是了一下可以的,应该改是其他的问题,不是代码的错

    你那第一行写的是什么?

  • 肖申克赫本
    2016-09-08 20:06:17

    应该是版本的事

  • 键盘兔
    2016-07-13 11:25:26

    这是我找的资料不知道对不对,不明白为什么老师就可以执行|?

    下文来自:http://lavasoft.blog.51cto.com/62575/280284

    MYSql5的日期类型有三种:date(只有日期)、datetime(时分秒)和timestamp(时分秒)。

    一、TIMESTAMP

    1、TIMESTAMP列必须有默认值,默认值可以为'0000-00-00 00:00:00',但不能为null

    2、TIMESTAMP列不可以设置值,只能由数据库自动去修改

    3、一个表可以存在多个TIMESTAMP列,但只有一个列会根据数据更新而改变数据库系统当前值(默认是第一个TIMESTAMP列),因此,一个表中有多个TIMESTAMP列,是没有一意义的,实际上一个表只设定一个TIMESTAMP列。

    4、TIMESTAMP列的默认值是CURRENT_TIMESTAMP常量值,当记录数据发生变化的时候,TIMESTAMP列会自动将其值设定为CURRENT_TIMESTAMP。

    5、TIMESTAMP列创建后的格式是:

    `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    语句含义是,a字段的默认值是CURRENT_TIMESTAMP,当纪录更新时候,自动将a字段的值设置为CURRENT_TIMESTAMP。

    6、另外,下面的定义从语法角度是对的,但是没有意义,因为该字段的值不可更改,永远只能为默认值。

    `b` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'。