簡體   English   中英

將varchar列更改為另一個表SQL的外鍵

[英]Changing varchar column to foreign key of another table 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`;

我不確定是否可以使用該代碼正確設置外鍵...

不,您做錯了。 您將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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM