2016-09-10 3 views
0

Я пытаюсь изменить значения varchar столбца на его значение внешнего ключа из другой таблицы, и я не могу сделать преобразование, всегда выдает ошибку.Изменение столбца varchar на внешний ключ другой таблицы SQL

стол пользователя ...

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; 

Теперь, что мне нужно сделать, это столбец RoleName в пользователя table указывает на ключ в таблице RoleName. Я все время пытаюсь это сделать, но всегда дает мне ошибку.

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

Я не уверен, если я устанавливаю внешний ключ правильно с этим кодом либо ...

+0

Это были издевательские данные для обучения без надзоров, я не писал базу данных, просто таблицу поиска, но спасибо за головы! – remedy

ответ

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; 
+0

alter table user добавить ограничение fk_user_RoleId внешний ключ (RoleId); Я все еще получаю сообщение об ошибке – remedy

+0

@remedy. , , У меня было неверное ключевое слово. –

+0

Предположим, что этот ответ прежде, извините. Я получил его работу, спасибо @ Gordon Linoff – remedy

Смежные вопросы