SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.07.2008 15:10:20

NUKE
Участник
Зарегистрирован: 02.07.2008
Сообщений: 6

ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

привет всем
может ктото подскажет пожалуйста почему не отрабатывает такой запрос
create table info(id varchar(32) not null) engine=innodb;
create table user(id integer not null auto_increment primary key)engine=innodb;
alter table user add info_id varchar(32);
alter table user add foreign key (info_id) references info(Id);

последний альтер выдает ошибку... хотя если делать все это же для mssql то все отлично!

Неактивен

 

#2 02.07.2008 15:52:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

Нужно еще сделать
alter table info add index(id) - innodb требует наличия индекса на колонке отношения.

Неактивен

 

#3 02.07.2008 16:58:32

NUKE
Участник
Зарегистрирован: 02.07.2008
Сообщений: 6

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

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

create table vk_host_scsi_lun (Id bigint not null auto_increment, HostId bigint not null, DeviceName varchar(200) not null, CanonicalName varchar(100)
not null, Uuid varchar(100) not null, primary key (Id)) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS vk_disk_type (Id varchar(32) not null, Name varchar(50), ReadBW bigint, WriteBW bigint, Custom bit, primary key (Id))

ENGINE=InnoDB;

alter table vk_disk_type add index vk_disk_type_fk1 (Id);

alter table vk_host_scsi_lun add DiskTypeId varchar(32);

alter table vk_host_scsi_lun add index vk_host_scsi_lun_fk2 (DiskTypeId);

alter table vk_host_scsi_lun add constraint vk_host_scsi_lun_fk2 foreign key (DiskTypeId) references vk_disk_type (Id);

если их выполнить на чистой базе то все отработает, но почему то не отрабатывает если пытаюсь мигрировать старую базу такими запросами

CREATE TABLE IF NOT EXISTS vk_disk_type (Id varchar(32) not null, Name varchar(50), ReadBW bigint, WriteBW bigint, Custom bit, primary key (Id))

ENGINE=InnoDB;

alter table vk_disk_type add index vk_disk_type_fk1 (Id);

alter table vk_host_scsi_lun add DiskTypeId varchar(32);

alter table vk_host_scsi_lun add index vk_host_scsi_lun_fk2 (DiskTypeId);

alter table vk_host_scsi_lun add constraint vk_host_scsi_lun_fk2 foreign key (DiskTypeId) references vk_disk_type (Id);


т.е.  таблица vk_host_scsi_lun уже есть и в ней еще есть связи и данные.

Изза чего такое возможно.. не могу понять sad

Неактивен

 

#4 02.07.2008 17:04:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

Приведите, пожалуйста, сами ошибки - очень тяжело пытаться сообразить, где происходит
ошибка и какая smile

Неактивен

 

#5 02.07.2008 17:09:25

NUKE
Участник
Зарегистрирован: 02.07.2008
Сообщений: 6

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

возникает
ERROR 1005 (HY000): Can't create table '.\vk\#sql-590_2.frm' (errno: 150)
только после
alter table vk_host_scsi_lun add constraint vk_host_scsi_lun_fk2 foreign key (DiskTypeId) references vk_disk_type (Id);

Неактивен

 

#6 02.07.2008 17:37:18

NUKE
Участник
Зарегистрирован: 02.07.2008
Сообщений: 6

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

Просто интерес в том, что эту схему создания базы делает хибернейт.. оно то отрабатывает, но только на создание базы... а если я хочу добавить еще одну таблицу (потом когда таблицы уже заполнены,... хотя даже если их почистить тоже не пашет) vk_disk_type и свзяь с vk_host_scsi_lun то не работает!

Может быть ли это связано с какими то другимим связями которые есть в vk_host_scsi_lun?

Неактивен

 

#7 02.07.2008 17:52:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

А таблица vk_disk_type уже есть? IF NOT EXISTS может очень здорово испортить Вам импорт...

alter table vk_host_scsi_lun add index vk_host_scsi_lun_fk2 (DiskTypeId);
Вот этот запрос, вроде, лишний - на эту же таблицу индекс создастся сам.

Просто если наличие данных не дает создать таблицу (а без данных все создается), то значит,
дело в конфликтующих данных. Пустая таблица не может конфликтовать данными. Следовательно,
она не пустая. Я прав?

Неактивен

 

#8 02.07.2008 18:03:12

NUKE
Участник
Зарегистрирован: 02.07.2008
Сообщений: 6

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

Я проверил, без IF NOT EXISTS всеравно та же ошибка.
Таблицы vk_disk_type нет до этого.

И таблицы пустые.

mysql> CREATE TABLE vk_disk_type (Id varchar(32) not null, Name varchar(50), Rea
dBW bigint, WriteBW bigint, Custom bit, primary key (Id)) ENGINE=InnoDB;
Query OK, 0 rows affected (0.00 sec)

mysql> alter table vk_disk_type add index (Id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table vk_host_scsi_lun add DiskTypeId varchar(32);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table vk_host_scsi_lun add index vk_host_scsi_lun_i2 (DiskTypeId);

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table vk_host_scsi_lun add foreign key (DiskTypeId) references vk_d
isk_type (Id);
ERROR 1005 (HY000): Can't create table '.\vk\#sql-590_2.frm' (errno: 150)
mysql> select * from vk_disk_type;
Empty set (0.00 sec)

mysql> select * from vk_host_scsi_lun;
Empty set (0.00 sec)

просто если нет больше никаких таблиц и связей то эти запросы отрабатывают, а если есть еще связи с vk_host_scsi_lun то не отрабатывает

Неактивен

 

#9 02.07.2008 21:02:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

Для пустых табличек проходит:

Код:

mysql> create table vk_host_scsi_lun (id int) engine=innodb;
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TABLE vk_disk_type (Id varchar(32) not null, Name varchar(50), ReadBW bigint, WriteBW bigint, Custom bit, primary key (Id)) ENGINE=InnoDB;
Query OK, 0 rows affected (0.05 sec)

mysql> alter table vk_disk_type add index (Id);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table vk_host_scsi_lun add DiskTypeId varchar(32);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table vk_host_scsi_lun add index vk_host_scsi_lun_i2 (DiskTypeId);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table vk_host_scsi_lun add foreign key (DiskTypeId) references vk_disk_type (Id);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

Может быть, первая табличка у Вас не InnoDB?

Неактивен

 

#10 03.07.2008 10:52:30

NUKE
Участник
Зарегистрирован: 02.07.2008
Сообщений: 6

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

Точно InnoDB.

Как оказалось  - база не смигрирует если её сначала сдампить , потом развернуть.
Потом уже миграция не пройдет!

Как можно это объяснить?

Неактивен

 

#11 04.07.2008 15:56:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1005 (HY000): Can't create table '.\vkernel\#sql-590_1.frm' (errno: 150)

Насколько мне известно, проблема импорта-экспорта с внешними ключами тяжела
в любых СУБД. Единственное разумное решение - отключать на время импорта
индексы (ALTER TABLE tablename DISABLE INDEX), импорт данных, и включение
индексов (ENABLE INDEX). Стандартные дампы поддерживают disable-enable на
уровне единичных таблиц. Вроде бы, такого должно хватать, но кто знает...

По поводу Вашей ошибки:
1. Какая у Вас версия MySQL?
2. Зайдите все-таки в каталог с данными и убедитесь, что там есть только файлы
*.frm (и, возможно, *.ibd) - важно, чтобы не было файлов *.MYD и *.MYI.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson