在MySQL中向表中添加新的不可为null的列

在MySQL中向表中添加新的不可为null的列,mysql,ddl,Mysql,Ddl,我有一张活动的桌子,我刚刚为票务信息做了一张新桌子。事件表中的每个事件都应该有一个由唯一id引用的ticketing_信息。我是sql新手,所以请原谅,如果这是一个非常基本/重复的问题,那么我应该如何让迁移为每个现有事件在ticketing_信息表中添加新行,以及为活动提供生成的票务信息id 如果有帮助,我的一些sql将附加: CREATE TABLE `ticketing_information` ( `id` INT(10) unsigned NOT NULL AUTO_INCREMEN

我有一张活动的桌子,我刚刚为票务信息做了一张新桌子。事件表中的每个事件都应该有一个由唯一id引用的ticketing_信息。我是sql新手,所以请原谅,如果这是一个非常基本/重复的问题,那么我应该如何让迁移为每个现有事件在ticketing_信息表中添加新行,以及为活动提供生成的票务信息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?>;
更新事件集
票务信息id=从“票务信息”中选择“id”;

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

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

  • 在第一步中将该列添加为可空,否则您将无法让rdbms修改该表,因为它将违反NOTNULL约束

  • 将新列更新为所需的数据

    UPDATE event e 
    SET e.ticketing_information_id = (SELECT `id` FROM `ticketing_information` WHERE id = e.id)
    
    您的更新需要告诉内部选择,它当前正在更新哪一行,因此您只能在内部选择中筛选该特定行的数据

  • 将列修改为非空


难道你就不能
更新事件集票务信息\u id=id
?这并不重要。那些桌子不一样。一个是“活动”,另一个是“票务信息”。如果我通过OP的信息理解正确的话,那只是猜测内部select可以通过id与update语句链接。它应该只显示如何做这样的事情,这最终将如何实现我不知道,我不知道它们之间的关系。很抱歉,我没有正确阅读您的查询。。老实说,我只是有点担心,当它只涉及一个表时,使用这种技术有一些我不知道的原因;)谢谢如果您只想用同一个表中另一个字段的内容更新一个字段,您可以按照建议执行。1。关于使列不为null,没有任何遗漏,或者我错过了它?2.即使是这样,也可以使用默认值来解决这个问题。3.一个更易于阅读且可能更快的查询(如果您的查询在内部没有优化到以下语法):
updateevent e internal join ticketing\u信息t on e.whater=t.whater set e.whater=t.whater