将新的非可空列添加到MySQL中的表中

时间:2013-11-12 11:33:56

标签: mysql ddl

我有一个事件表,我刚刚为ticketing_information创建了一个新表。事件表中的每个事件都应该有一个ticketing_information,由唯一ID引用。我是sql的新手,请原谅我,如果这是一个非常基本/重复的问题,但我该如何进行迁移为每个现有事件向ticketing_information表添加一个新行,并为该事件提供生成的ticketing_information id ?

如果有帮助,我的一些SQL附件:

CREATE TABLE `ticketing_information` (
  `id` INT(10) unsigned NOT NULL AUTO_INCREMENT,
  `tickets_available` BOOLEAN DEFAULT TRUE NOT NULL,
  `ticketing_url` VARCHAR(2000) DEFAULT NULL,
  `additional_info_url` VARCHAR(2000) DEFAULT NULL,
  PRIMARY KEY (`id`);)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8; 

ALTER TABLE event
ADD COLUMN ticketing_information_id Int(10) unsigned DEFAULT NULL;

(这是一个非常精简的代码版本,但它应该有助于说明我想要的行为)

我认为它应该是

的内容
UPDATE event SET
ticketing_information_id = SELECT `id` FROM `ticketing_information` WHERE <some way of making a new ticketing_information?>;

但我真的不知道我在做什么:)

1 个答案:

答案 0 :(得分:2)

我将如何执行类似的操作,将新的非可空列添加到现有表中,将是:

  • 在第一步中将该列添加为可为空,否则您将无法获取rdbms来修改该表,因为它将违反非null约束。

  • 将新列更新为您希望它拥有的数据

    UPDATE event e 
    SET e.ticketing_information_id = (SELECT `id` FROM `ticketing_information` WHERE id = e.id)
    

    您的更新需要告诉内部选择,它当前正在更新哪一行,因此您只能过滤内部选择中该特定行的数据。

  • 将列修改为非空