将varchar列更改为另一个表SQL的外键

时间:2016-09-10 20:10:53

标签: mysql sql

我试图将列的varchar值更改为另一个表中的id外键值,而我似乎无法进行转换,总是会抛出错误

用户表...

CREATE TABLE User(
UserId INT NOT NULL AUTO_INCREMENT,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(50),
Username VARCHAR(20) NOT NULL,
Password VARCHAR(50) NOT NULL,
RoleName VARCHAR(50) NOT NULL,
LastLogin DATETIME,

PRIMARY KEY(UserId)
);

INSERT INTO User 
 (FirstName, LastName, Email, Username, Password, RoleName)
VALUES 

...

RoleName表...

create table rolename(
                RoleId int not null auto_increment,
                RoleName varchar(50),
                primary key(RoleId)
);
insert into rolename(RoleName) select distinct RoleName from user;

现在,我需要做的是让User表中的RoleName列指向RoleName表中的键。我一直在尝试这个,但总是给我一个错误。

update user set user.`RoleName` = rolename.`RoleId` from user inner join rolename on user.`RoleName` = rolename.`RoleName`;

我不确定我是否正确使用该代码设置外键...

1 个答案:

答案 0 :(得分:1)

不,你做错了。您将id放在User表中。解决这个问题:

alter table user add roleid int;
alter table user add constraint fk_user_roleid foreign key (roleid)  references rolename(roleid);

然后填充值:

update user u join
       rolename r
       on r.rolename = u.rolename
    set u.roleid = r.roleid;

摆脱旧栏目!

alter table user drop column rolename;
相关问题