Ответ 1
Создайте таблицу хобби следующим образом:
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))
Как используется ключевое слово references
при создании таблицы?
Скажем, я хочу создать две таблицы person
и hobby
, и я хочу, чтобы идентификатор таблицы хобби ссылался на идентификатор человека?
person table
- id
- name
hobby
- id
- person_id
- hobby_name
Как это сделать?
Создайте таблицу хобби следующим образом:
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))
Вот пример непосредственно с сайта 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;
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;
без DELETE ON CASCADE, вы получите сообщение об ошибке, если в каких-либо записях в хобби было person_id из 1. Сначала вы должны удалить все эти записи, прежде чем делать удаление выше. При использовании DELETE ON CASCADE вышеупомянутое удаление будет успешным и автоматически удалит любые и все записи из таблицы таблицы хобби, связанные с удалением person_id из таблицы первичных ключей.
Справочное ключевое слово используется, чтобы узнать, где пришел внешний ключ. Это означает, что это имя таблицы и что это имя в этой таблице.
Я говорю, что это правильно:
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_id) ССЫЛКИ person (person_id));
Здесь person_id - это внешний ключ, и он пришел из таблицы person и в этой таблице это имя person_id... Что это.
Вот пример того, как вы можете его использовать.
create table hobby(id int references person(id),person_id int,hobby_varchar(20), primary key(id));
Для чего это означает, references
позволяет нам указать столбец целевой таблицы, к которому относится внешний ключ.