1

В базе данных у меня есть таблица имен пользователей, и у меня есть таблица юрисдикции. У меня также есть промежуточная таблица для назначения пользователя одной или нескольким юрисдикциям.Mysql 'Cascade On Delete' Не удаляется по внешней строке ключей при удалении родителя

employee table 

userID (primary Key) 
firstName 
lastName 
records: 

+--------+-----------+----------+ 
| userID | firstName | lastName | 
+--------+-----------+----------+ 
|  6 | John  | Doe  | 
|  11 | lisa  | lopez | 
+--------+-----------+----------+ 
jurisdictions table 

jurId (Primary Key) 
region 
records: 

+-------+--------------+ 
| jurID | jurisdiction | 
+-------+--------------+ 
|  1 | California | 
|  2 | Texas  | 
|  3 | Washington | 
|  4 | South Dakota | 
|  5 | Alaska  | 
|  6 | Ohio   | 
+-------+--------------+ 
user_jurisdiction 

userID (Foriegn Key pointing to employees userID) 
jurID (Foriegn Key pointing to jurisdictions jurID) 
records: 

    +--------+-------+ 
    | userID | jurID | 
    +--------+-------+ 
    |  6 |  2 | 
    |  6 |  3 | 
    |  11 |  2 | 
    +--------+-------+ 

Я хочу, чтобы сделать его там, где, если я удалить родительскую строку таблицы, промежуточный стол с соответствующим внешним ключом будет удален автоматически. Я сделал intermedieate таблицы:

CREATE TABLE user_jurisdiction(userID int NOT NULL, jurID int NOT NULL, FOREIGN KEY(userID) REFERENCES employee(userID) ON DELETE CASCADE, FOREIGN KEY (jurID) REFERENCES jurisdictions(jurID) ON DELETE CASCADE); 

Но когда я удалить что-то из родительской таблицы .... вроде состояния имени строки из таблицы jurisidictions.jurisdiction ... идент и JURID строка не удаляется из промежуточная таблица user_jurisdiction автоматически. Из того, что я вижу, я сделал DELETE ON CASCADE правильным для каждого внешнего ключа. Почему в строке промежуточной таблицы не удаляются строки с внешними ключами при удалении родительской таблицы?

ответ

1

Наиболее вероятная причина заключается в том, что вы используете движок MyISAM вместо механизма INNODB. Механизм MyISAM анализирует ограничения внешнего ключа, но не применяет их.

CREATE TABLE user_jurisdiction(
    userID int NOT NULL, 
    jurID int NOT NULL, 
    FOREIGN KEY(userID) 
    REFERENCES employee(userID) ON DELETE CASCADE, 
    FOREIGN KEY (jurID) 
    REFERENCES jurisdictions(jurID) ON DELETE CASCADE 
) ENGINE=INNODB; 

INNODB - это механизм хранения по умолчанию для MySQL, начиная с версии 5.5. Перед этим MyISAM был дефолтом.

Получите, как правило, публикацию SQL DDL вместо (или вместе с) описанием таблиц. DDL намного точнее, чем описание.

 Смежные вопросы

  • Нет связанных вопросов^_^