Предыстория.
Ни разу не случалось, чтоб под Yii2 миграция с первого раза проходила до конца. Но в данный момент это было последней каплей.
Воспроизведение ошибки
1. Создаем миграцию
Код: Выделить всё
$this->createTable('doctors_speciality', [
'doctor_id'=>'INT(11) NOT NULL',
'speciality_id'=>'INT(11) NOT NULL',
]);
$this->createIndex('doctor_id','doctors_speciality','doctor_id');
$this->createIndex('speciality_idэ,'doctors_speciality','speciality_id');
$this->addForeignKey('fk_doctor_id', 'doctors_speciality', 'doctor_id', 'doctors', 'id');
$this->addForeignKey('fk_speciality_id', 'doctors_speciality', 'speciality_id', 'specialities', 'id');
Код: Выделить всё
mysql> show tables;
+---------------------+
| Tables_in_dockids |
+---------------------+
| cities |
| doctors |
| migration |
| reviews |
| specialities |
+---------------------+
5 rows in set (0.00 sec)
Код: Выделить всё
*** applying m141024_075914_create_doctors_specilaities_table
> create table doctors_speciality ... done (time: 0.133s)
> create index doctor_id on doctors_speciality (doctor_id) ... done (time: 0.168s)
> create index speciality_id on doctors_speciality (speciality_id) ... done (time: 0.211s)
> add foreign key fk_doctor_id: doctors_speciality (doctor_id) references doctors (id) ...Exception 'yii\db\Exception' with message 'SQLSTATE[HY000]: General error: 1005 Can't create table 'dockids.#sql-2a77_3e' (errno: 121)
The SQL being executed was: ALTER TABLE `doctors_speciality` ADD CONSTRAINT `fk_doctor_id` FOREIGN KEY (`doctor_id`) REFERENCES `doctors` (`id`)'
in /var/www/left/dockids.loc/vendor/yiisoft/yii2/db/Schema.php:532
Error Info:
Array
(
[0] => HY000
[1] => 1005
[2] => Can't create table 'dockids.#sql-2a77_3e' (errno: 121)
)
Индексы есть, таблица на месте.
5. Попытаемся руками выполнить запрос, который предложила нам миграция.
Код: Выделить всё
mysql > ALTER TABLE `doctors_speciality` ADD CONSTRAINT `fk_doctor_id` FOREIGN KEY (`doctor_id`) REFERENCES `doctors` (`id`)
ERROR 1005 (HY000): Can't create table 'dockids.#sql-2a77_4d' (errno: 121)
6. Попытаемся добавить руками через phpMyadmin (HeidySQL такая же лабуда, потому на старенького и немощного pma не надо гнать)
Фигакс.
Помимо ошибки нас выкинуло из pma/HeidySQL
7. Авторизовываемся. заходим в базу.
8. Видим
Наша таблица пропала! Более того, я с таким именем больше не могу создать таблицу заново!
Код: Выделить всё
CREATE TABLE `doctors_speciality` (
`doctor_id` INT(11) NOT NULL,
`speciality_id` INT(11) NOT NULL
)
Код: Выделить всё
SQLSTATE[HY000]: General error: 1005 Can't create table 'dockids.doctors_speciality' (errno: 150)
/var/log/mysql/error.log
Код: Выделить всё
php -v
PHP 5.5.9-1ubuntu4.4 (cli) (built: Sep 4 2014 06:56:34)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
Код: Выделить всё
mysql -v
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.5.40-0ubuntu0.14.04.1-log (Ubuntu)