Sql простая операция для начинающих - PullRequest
0 голосов
/ 06 марта 2012

У меня есть таблица с именем USERS с user_id в качестве первичного ключа и user_name.

У меня есть другая таблица USERS_ACT с user_act_id первичным ключом, user_act_user_id и еще 2 столбца.

Мне нужен user_act_user_id для использования внешнего ключа в USERS?Как мне этого добиться?

Это мой первый день в SQL, поэтому, пожалуйста, будьте любезны объяснить, если то, что я спрашиваю, неверно.

Ответы [ 4 ]

1 голос
/ 06 марта 2012

Предполагается, что вы используете InnoDB (единственный движок, который поддерживает внешние ключи):

ALTER TABLE users_act
    ADD CONSTRAINT fk_users_act_users
        FOREIGN KEY (user_act_user_id) 
        REFERENCES users (user_id);
1 голос
/ 06 марта 2012

давайте предположим, что вы не администратор БД, и вы просто хотите получить имена всех активных пользователей;))

select users.user_name
from users
join users_act on users.user_id = users_act.user_act_user_id
1 голос
/ 06 марта 2012

Это зависит от вашего типа БД, если MySql даже поддерживает внешние ключи.Например, вы можете использовать внешние ключи в формате InnoDB, но не в формате MyIsam.При работе с MySql я лично предпочитаю работать с MyIsam и делаю большую часть проверки целостности во время программирования.В общем, вы можете просто добавить user_act_user_id в вашу таблицу USERS, но не отмечать его как любой ключ.После этого вы можете просто использовать JOIN, но, конечно, ссылочная целостность не предоставляется, поэтому вам нужно написать свой собственный «триггер» на сайте программирования, если вы хотите, чтобы он автоматически удалял данные, принадлежащие пользователю в другой таблице.В противном случае вам придется использовать ограничения или триггеры, но это может быть не так просто, когда вы только начинаете с SQL.

1 голос
/ 06 марта 2012

Без ссылочной целостности вы должны заставить ее работать, вокруг нее нет "магии".

Заполните ваш user_act_user_id значением pk от ПОЛЬЗОВАТЕЛЕЙ, и вот оно у вас.

Вы можете добавить ограничения, но это может быть не то, что вы просите, http://msdn.microsoft.com/en-us/library/ms175464.aspx

Короче говоря, они держат ключи между столами в хорошем состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...