Mysql 将外键列添加到现有表中

Mysql 将外键列添加到现有表中,mysql,foreign-keys,alter,Mysql,Foreign Keys,Alter,我只是将一列添加到表中,并将新列设为外键 我已尝试从语句中删除回勾 声明如下: ALTER TABLE `user_list_v4` ADD `role_id` int(11) NOT NULL COMMENT `role.id` KEY `role_id` (`role_id`), CONSTRAINT `developer_standup_timezone_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `role_list_v4` (`i

我只是将一列添加到表中,并将新列设为外键

我已尝试从语句中删除回勾

声明如下:

ALTER TABLE `user_list_v4`
  ADD `role_id` int(11) NOT NULL COMMENT `role.id`
  KEY `role_id` (`role_id`),
  CONSTRAINT `developer_standup_timezone_ibfk_1` FOREIGN KEY 
(`role_id`) REFERENCES `role_list_v4` (`id`)
这是表格: //列名已转换为字母,原因如下:

CREATE TABLE `user_list_v4` (
     `a` int(11) NOT NULL,
     `b` varchar(50) DEFAULT NULL,
     `c` varchar(50) DEFAULT NULL,
     `d` varchar(50) NOT NULL DEFAULT '',
     `e` varchar(255) NOT NULL DEFAULT '',
     `f` varchar(5) NOT NULL DEFAULT '',
     `g` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
     `h` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
当我运行语句时,我希望它说:queryok,0行受影响(0.00秒)

但我得到了这个错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the 
manual that corresponds to your MySQL server version for the right 
syntax to use near '`role.id`
  KEY `role_id` (`role_id`),
  CONSTRAINT `developer_standup_timezone_' at line 2

我确信这是一个简单的语法错误,但我没有发现它

您必须添加列,并添加外键:

   ALTER TABLE `user_list_v4`
   ADD `role_id` INT NOT NULL COMMENT 'role.id', 
   ADD KEY `role_id` (`role_id`),
   ADD CONSTRAINT `developer_standup_timezone_ibfk_1` 
   FOREIGN KEY (`role_id`) REFERENCES `role_list_v4` (`id`);

如果我们想使一个新列
不为NULL
,我认为我们需要为现有行分配一个
默认值

允许列为null更容易,并将默认值指定为null

大概是这样的:

ALTER TABLE `user_list_v4`
  ADD `role_id` int(11) DEFAULT NULL COMMENT 'role.id' 
, ADD KEY `role_id` (`role_id`)
, ADD CONSTRAINT `developer_standup_timezone_ibfk_1` 
      FOREIGN KEY (`role_id`) REFERENCES `role_list_v4` (`id`)
; 
如果我们理解要分别添加每个组件,那么语法就更有意义了。我们正在添加一个列。我们正在添加一个索引。我们正在添加一个外键约束。我们可以通过三种不同的陈述获得相同的结果:

ALTER TABLE `user_list_v4`
  ADD `role_id` int(11) DEFAULT NULL COMMENT 'role.id' 
; 

ALTER TABLE `user_list_v4`
  ADD KEY `role_id` (`role_id`)
;

ALTER TABLE `user_list_v4`
  ADD CONSTRAINT `developer_standup_timezone_ibfk_1` 
      FOREIGN KEY (`role_id`) REFERENCES `role_list_v4` (`id`)
;
注意,使用InnoDB,我们不必创建索引;当我们添加外键约束时,InnoDB将自动创建合适的索引。在单独的步骤中添加索引可以让我们更好地控制名称,我们还可以添加其他列,等等



如果我们需要新列为非NULL,并且希望实现外键约束,那么必须为表中的每一行分配一个引用目标表中有效行的值。(假设我们不打算禁用外键。)

将您的评论放在单引号中(而不是反勾号)。是的,NOTNULL没有意义