Используя ссылки в MySQL

Я получил ответ на другой вопрос здесь:

Схема DB для чатов?

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

  1. Для чего они используются?
  2. Как они используются?
  3. Дайте пример

7
задан Dakkaron 27 February 2018 в 16:20
поделиться

2 ответа

Ключевое слово REFERENCES является частью ограничения внешнего ключа и заставляет MySQL требовать, чтобы значения в указанные столбцы ссылочной таблицы также присутствуют в указанных столбцах ссылочной таблицы.

Это препятствует тому, чтобы внешние ключи ссылались на идентификаторы, которые не существуют или были удалены, и при желании может предотвратить удаление строк, пока на них еще есть ссылки.

Конкретный пример: если каждый сотрудник должен принадлежать к отделу, вы можете добавить ограничение внешнего ключа из employee.departmentid , ссылаясь на Department.id .

Выполните следующий код, чтобы создать две тестовые таблицы tablea и tableb , где столбец a_id в tableb ссылается на первичный ключ таблица . Таблица заполнена несколькими строками.

CREATE TABLE tablea (
    id INT PRIMARY KEY,
    foo VARCHAR(100) NOT NULL
) Engine = InnoDB;

INSERT INTO tablea (id, foo) VALUES
(1, 'foo1'),
(2, 'foo2'),
(3, 'foo3');

CREATE TABLE tableb (
    id INT PRIMARY KEY,
    a_id INT NOT NULL,
    bar VARCHAR(100) NOT NULL,
    FOREIGN KEY fk_b_a_id (a_id) REFERENCES tablea (id)
) Engine = InnoDB;

Теперь попробуйте эти команды:

INSERT INTO tableb (id, a_id, bar) VALUES (1, 2, 'bar1');
-- succeeds because there is a row in tablea with id 2

INSERT INTO tableb (id, a_id, bar) VALUES (2, 4, 'bar2');
-- fails  because there is not a row in tablea with id 4

DELETE FROM tablea WHERE id = 1;
-- succeeds because there is no row in tableb which references this row

DELETE FROM tablea WHERE id = 2;
-- fails because there is a row in tableb which references this row

Важное примечание: Обе таблицы должны быть таблицами InnoDB, иначе ограничение игнорируется.

12
ответ дан 6 December 2019 в 15:18
поделиться

Ключевое слово REFERENCES показывает ограничение внешнего ключа, что означает, что:

FOREIGN KEY (`chat_id` ) REFERENCES `chats`.`chat` (`id` )

... столбец chat_id в текущей таблице может только содержат значения, которые уже существуют в таблице chat , столбце id .

Например, если столбец CHAT.id содержит:

id
----
a
b
c

.. вы не можете добавлять какие-либо значения, кроме a / b / c, в столбец chat_id .

2
ответ дан 6 December 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: