MySQL工作台-产生错误的SQL?

MySQL工作台-产生错误的SQL?,mysql,sql,mysql-error-1067,Mysql,Sql,Mysql Error 1067,我试图创建一个表,该表有一个已创建的时间戳和一个已更新的时间戳,并自动为我在其中插入MySQL值。这是可行的,请参见: 作为第一步,我从参考站点复制了示例表,并在Workbench中对其建模。然后我做了一个前端工程师,并在phpMyAdmin中测试了生成的SQL。一切顺利。下面是SQL: -- ----------------------------------------------------- -- Table `test_table` -- -----------------------

我试图创建一个表,该表有一个已创建的时间戳和一个已更新的时间戳,并自动为我在其中插入MySQL值。这是可行的,请参见:

作为第一步,我从参考站点复制了示例表,并在Workbench中对其建模。然后我做了一个前端工程师,并在phpMyAdmin中测试了生成的SQL。一切顺利。下面是SQL:

-- -----------------------------------------------------
-- Table `test_table`
-- -----------------------------------------------------

DROP TABLE IF EXISTS `test_table` ;

CREATE  TABLE IF NOT EXISTS `test_table` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `stamp_created` TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00' ,
  `stamp_updated` TIMESTAMP NULL DEFAULT now() on update now() ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;
在验证了这个想法的有效性之后,我在一个实际的表中实现了这个概念。生成的SQL如下所示:

-- -----------------------------------------------------
-- Table `user_login`
-- -----------------------------------------------------

DROP TABLE IF EXISTS `user_login` ;

CREATE  TABLE IF NOT EXISTS `user_login` (
  `user_login_id` INT NOT NULL AUTO_INCREMENT ,
  `user_id` INT NOT NULL ,
  `hashed_password` CHAR(255) NULL ,
  `provider_id` CHAR(255) NULL ,
  `provider_name` CHAR(255) NULL ,
  `unverified_email_address` CHAR(255) NULL ,
  `verification_code_email_address` CHAR(255) NULL ,
  `verification_code_password_change` CHAR(255) NULL ,
  `verified_email_address` CHAR(255) NULL ,
  `stamp_created` TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00' ,
  `stamp_updated` TIMESTAMP NULL DEFAULT now() on update now() ,
  `stamp_deleted` TIMESTAMP NULL ,
  PRIMARY KEY (`user_login_id`) ,
  INDEX `user_login_user_id` (`user_id` ASC) ,
  UNIQUE INDEX `verified_email_address_UNIQUE` (`verified_email_address` ASC) ,
  UNIQUE INDEX `unverified_email_address_UNIQUE` (`unverified_email_address` ASC) ,
  CONSTRAINT `user_login_user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `user` (`user_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
当我执行SQL时,我得到以下错误:

1067-无效的“已创建戳记”默认值

有人知道是什么引起了我的问题吗

但是,根据您的需要,您的逻辑应该是:

  stamp_created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,

但是,根据您的需要,您的逻辑应该是:

  stamp_created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,

bensui,为什么它必须是0?第一个表中是“0000-00-00:00:00”,这很好。顺便说一下,我尝试了你的建议,使用0作为默认值。同样的错误。bensui,如果我只有一个timestamp列,我可以使用stamp\u created timestamp NULL默认值CURRENT\u timestamp。但是我有不止一个timestamp列,我试图将它们默认为当前的时间戳。MySQL不允许这样。bensui,为什么它必须是0?第一个表中是“0000-00-00:00:00”,这很好。顺便说一下,我尝试了你的建议,使用0作为默认值。同样的错误。bensui,如果我只有一个timestamp列,我可以使用stamp\u created timestamp NULL默认值CURRENT\u timestamp。但是我有不止一个timestamp列,我试图将它们默认为当前的时间戳。MySQL不允许这样做。出于明显的原因,我不得不取消FK限制,但它通过MySQL查询浏览器运行良好。。。特有的读了bensiu答案中的链接后,更奇怪的是,当我运行SQL时,它并没有抱怨FK约束,我的数据库中没有用户表,它基本上是空的。我甚至都没有犯那个错误。我猜SQL会在第一个错误时停止,这一定是这个问题造成的。奇怪的是,它看起来与示例表中的完全相同。protocol_version=10,version=5.1.36-community-log。你的?我在5.5.8。另外,我们是否可以查看“选择@@sql\u模式”的结果;?选择@@sql\u模式;返回0个结果由于明显的原因,我不得不删除FK限制,但它通过MySQL查询浏览器为我运行良好。。。特有的读了bensiu答案中的链接后,更奇怪的是,当我运行SQL时,它并没有抱怨FK约束,我的数据库中没有用户表,它基本上是空的。我甚至都没有犯那个错误。我猜SQL会在第一个错误时停止,这一定是这个问题造成的。奇怪的是,它看起来与示例表中的完全相同。protocol_version=10,version=5.1.36-community-log。你的?我在5.5.8。另外,我们是否可以查看“选择@@sql\u模式”的结果;?选择@@sql\u模式;返回0个结果
  stamp_created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,