MySQL Workbench - производит плохой SQL? - PullRequest
1 голос
/ 24 ноября 2011

Я пытаюсь создать таблицу, которая имеет «созданную» временную метку и «обновленную» временную метку (и MySQL автоматически вставляет туда значения для меня).Это выполнимо, см .: http://gusiev.com/2009/04/update-and-create-timestamps-with-mysql/.

В качестве первого шага я скопировал таблицу примеров со ссылочного сайта и смоделировал ее в Workbench.Затем я сделал форвард-инженера и протестировал полученный SQL в phpMyAdmin.Все работалоВот 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 - Invalid default value for 'stamp_created'

Кто-нибудь видит, что вызывает мойпроблема?

1 Ответ

1 голос
/ 24 ноября 2011
stamp_created TIMESTAMP NULL DEFAULT 0,

или

stamp_created TIMESTAMP NULL DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP,

в зависимости от ваших потребностей, однако в вашем случае логичным должно быть:

  stamp_created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,

http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...