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没有意义