Как использовать ключевое слово «ссылки» в MySQL? - PullRequest
26 голосов
/ 03 февраля 2010

Как ключевое слово references используется при создании таблицы?

Допустим, я хочу создать две таблицы person и hobby и хочу, чтобы идентификатор таблицы хобби ссылался на идентификатор человека.?

person table
- id
- name

hobby
- id
- person_id
- hobby_name

Как мне это сделать?

Ответы [ 5 ]

31 голосов
/ 03 февраля 2010

Создайте таблицу хобби аналогично этому:

CREATE TABLE hobby (
  id INT NOT NULL AUTO_INCREMENT,
  person_id INT NOT NULL,
  hobby_name VARCHAR(255),
  PRIMARY KEY(id),
  FOREIGN KEY(person_id) REFERENCES person(id))
6 голосов
/ 03 февраля 2010
CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id));

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL,
PRIMARY KEY(hobby_id),
FOREIGN KEY(person_id) REFERENCES person(person_id));

Ключевое слово ссылки используется для определения таблицы и столбца, которые используются в отношении внешнего ключа. Это означает, что запись в таблице хобби должна иметь person_id, который существует в таблице person, иначе во время вставки вы получите сообщение об ошибке, что ключ не существует.

Чтобы ответить на ваш вопрос выше о том, что делает «ON DELETE CASCADE», он позволяет вам удалить запись родительского ключа (лично) и соответствующие дочерние записи (в хобби) без необходимости предварительно удалять все дочерние записи.

Чтобы уточнить, если у вас есть дочерние записи, прикрепленные к записи первичного ключа, и вы пытаетесь удалить запись первичного ключа, например:

DELETE FROM person where person_id = 1;

не имея УДАЛИТЬ НА КАСКАДЕ, вы получите сообщение об ошибке, если какие-либо записи в хобби имеют значение person_id = 1. Вы должны сначала удалить все эти записи, прежде чем выполнять удаление, указанное выше. При использовании DELETE ON CASCADE указанное выше удаление завершится успешно и автоматически удалит все записи из таблицы увлечений таблицы, связанные с person_id, удаляемым из таблицы первичного ключа.

6 голосов
/ 03 февраля 2010

Вот пример непосредственно с сайта MySQL :

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
                    INDEX par_ind (parent_id),
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
                    ON DELETE CASCADE
) ENGINE=INNODB;
1 голос
/ 28 августа 2016

Ключевое слово ссылки фактически используется, чтобы узнать, куда пришел внешний ключ.Это означает, какое имя таблицы и какое имя в этой таблице.

Я говорю, что это правильно:

CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id));

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL,
PRIMARY KEY(hobby_id),
FOREIGN KEY(person_id) REFERENCES person(person_id));

Затем посмотрите на эту строку: FOREIGN KEY (персона) ССЫЛКИ person (person_id));

Здесь person_id - это внешний ключ, полученный из таблицы person, и в этой таблице его имя person_id ... Вот и все.

0 голосов
/ 19 декабря 2016

Вот пример того, как вы можете его использовать.

create table hobby(id int references person(id),person_id int,hobby_varchar(20), primary key(id));

Что означает, references позволяет нам указать столбец целевой таблицы, к которой относится внешний ключ.

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