1

我有一个活动表,我刚刚为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?>;

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

4

1 回答 1

2

我将如何执行类似的操作,向现有表添加一个新的不可为空的列,将是:

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

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

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

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

  • 将列修改为不为空

于 2013-11-12T11:40:58.013 回答