MySQL дает сообщение успеха, создавая foreignb ключ, но на самом деле это doesn' t создают тот

Я хочу добавить второе ограничение внешнего ключа между данные и контейнеры . Когда я удаляю контейнер, данные, связанные с этим контейнером, должны быть удалены также.

Столы:

mysql> DESCRIBE data;
+------------------------+--------------+------+-----+---------------------+----------------+
| Field                  | Type         | Null | Key | Default             | Extra          |
+------------------------+--------------+------+-----+---------------------+----------------
| imei                   | varchar(15)  | NO   | MUL | NULL                |                

mysql> DESCRIBE containers;
+--------------------+-------------+------+-----+---------------------+----------------+
| Field              | Type        | Null | Key | Default             | Extra          |
+--------------------+-------------+------+-----+---------------------+----------------+

| imei               | varchar(15) | NO   | MUL | NULL                |                |

Я создаю внешний ключ с этим заявлением:

 mysql> ALTER TABLE `data` ADD FOREIGN KEY (`imei`) REFERENCES `containers`(`imei`) ON DELETE CASCADE;
    Query OK, 15168 rows affected (0.12 sec)
    Records: 15168  Duplicates: 0  Warnings: 0

Но внешний ключ не был создан:

 mysql> use INFORMATION_SCHEMA;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A

    Database changed
    mysql> select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME = 'containers';
    +----------------+-------------+-----------------------+-----------------------+------------------------+
    | TABLE_NAME     | COLUMN_NAME | CONSTRAINT_NAME       | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
    +----------------+-------------+-----------------------+-----------------------+------------------------+
    | container_logs | imei        | container_logs_ibfk_1 | containers            | imei                   |
    +----------------+-------------+-----------------------+-----------------------+------------------------+
    1 row in set (0.16 sec)

Что я делаю неправильно?

0
nl ja de
Позор мне... Я haven' t проверил это... Спасибо. Отправьте его как ответ, я отмечу его как правильный ответ.
добавлено автор OrangeTux, источник
таблица данных - InnoDB? MyISAM не поддерживает внешние ключи
добавлено автор Maxim Krizhanovsky, источник

1 ответы

Не все двигатели хранения поддерживают внешние ключи; двигатели хранения, который не поддерживает определенные функции SQL, однако, не производят ошибку, но просто игнорируют заявления (на самом деле, анализатор SQL - более высокий слой в архитектуре MySQL, которая использует ПЧЕЛУ низшего уровня, чтобы общаться с двигателями хранения).

Таким образом, если вы используете MyISAM, вы не можете создать внешний ключ, но никакая ошибка не будет возвращена

2
добавлено
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw