Проблема создания внешних ключей в mySql - PullRequest
1 голос
/ 22 января 2011

Я создал внешний ключ в моем sql с помощью следующего statemnt ..

ALTER TABLE `users` ADD FOREIGN KEY ( `id`) 
REFERENCES `user_login` (`user_id`) 
ON DELETE CASCADE ;

Создание кажется успешным, после чего я выполняю оператор удаления

DELETE From user_login WHERE user_id = 1576;

пока что у пользователей все еще существует строка, которая ссылается на это. Я открываю рабочий стол mysql, и он не показывает никаких признаков того, что внешний ключ был создан. Кто-нибудь знает, почему это будет? Или что я делаю не так? Это взаимно-однозначное отношение в двух таблицах.

Ответы [ 3 ]

2 голосов
/ 22 января 2011

Таблица может быть в формате MyISAM, который не поддерживает внешние ключи.

Попробуйте сначала преобразовать его в InnoDB:

alter table users engine=InnoDB;
1 голос
/ 22 января 2011

Вы также должны убедиться, что у users.id и user_login.user_id есть индекс каждый.

0 голосов
/ 15 сентября 2017

Скопируйте и вставьте этот код в ваш Mysql скрипт редактора и запустите. У вас будет две таблицы категорий и продуктов , эти таблицы имеют cat_id как внешний ключ .

CREATE DATABASE IF NOT EXISTS dbdemo;

USE dbdemo;

CREATE TABLE categories(
   cat_id int not null auto_increment primary key,
   cat_name varchar(255) not null,
   cat_description text
) ENGINE=InnoDB;

CREATE TABLE products(
   prd_id int not null auto_increment primary key,
   prd_name varchar(355) not null,
   prd_price decimal,
   cat_id int not null,
   FOREIGN KEY fk_cat(cat_id)
   REFERENCES categories(cat_id)
   ON UPDATE CASCADE
   ON DELETE RESTRICT
)ENGINE=InnoDB;
...