我有一个事件表,我刚刚为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?>;
但我真的不知道我在做什么:)
答案 0 :(得分:2)
我将如何执行类似的操作,将新的非可空列添加到现有表中,将是:
在第一步中将该列添加为可为空,否则您将无法获取rdbms来修改该表,因为它将违反非null约束。
将新列更新为您希望它拥有的数据
UPDATE event e
SET e.ticketing_information_id = (SELECT `id` FROM `ticketing_information` WHERE id = e.id)
您的更新需要告诉内部选择,它当前正在更新哪一行,因此您只能过滤内部选择中该特定行的数据。
将列修改为非空