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

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

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

Вы не зашли.

#1 03.04.2009 18:31:17

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Проблема с Merge-таблицами

Добрый вечер! Столкнулся с проблемой: создал 2 таблицы с одинаковым набором атрибутов. Объединил их в Merge-таблицу, и при попытке выборки (select * from table_name) из созданной таблицы, получил ошибку: Error 1168: Unable to open underlying table which is differently defined or non-MyISAM type or doesn`t exist.
И как с этим бороться?

Неактивен

 

#2 03.04.2009 20:05:10

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

Re: Проблема с Merge-таблицами

«2 таблицы с одинаковым набором атрибутов» должны быть типа MyISAM.

Неактивен

 

#3 03.04.2009 20:22:55

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

Так и есть, 2 таблицы MyISAM соединяю в Merge.

Неактивен

 

#4 03.04.2009 20:35:10

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

Re: Проблема с Merge-таблицами

Структуру всех трех табличек покажите, пожалуйста.
SHOW CREATE TABLE a;

Неактивен

 

#5 03.04.2009 21:07:33

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

Create table users (id_user int not null primary key auto_increment,
Surname tinytext not null,
Name tinytext not null,
Phone varchar(255),
Login tinytext not null);

Create table user1 (id_user int not null primary key auto_increment,
Surname tinytext not null,
Name tinytext not null,
Phone varchar(255),
Login tinytext not null);

Create table total  (id_user int not null primary key auto_increment,
Surname tinytext not null,
Name tinytext not null,
Phone varchar(255),
Login tinytext not null)
Engine=merge union=(users,user1) insert_method=last;

Неактивен

 

#6 04.04.2009 10:39:23

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

Re: Проблема с Merge-таблицами

Если первые две таблички действительно MyISAM, то должно работать. Убедитесь
еще раз в том, что они именно этого типа, что Вы можете делать выборки из каждой из них
по отдельности без проблем. Если все так, тогда это бага. Разумеется, если версия сервера
не последняя, то следует обновить сервер и проверить, что последняя версия сервера тоже
ведет себя так же.

Из других мыслей — может быть, например, одна табличка от «старого сервера», а вторая —
от «нового»? Так, что у них разные внутренние форматы? Посмотреть можно в
SHOW TABLE STATUS LIKE 'user%' — там должны стоять одинаковые версии.

Ну и, разумеется, чтобы решить проблему выборок, можно воспользоваться VIEW. Впрочем,
insert_method=last там, конечно же, нету.

Неактивен

 

#7 04.04.2009 23:01:34

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

Таблицы идентичны, обе MyISAM, делал я их сам на одном сервере, поэтому и версия у них идентична...что ж, пойду обновлять серверsmile спасибо за советы

Неактивен

 

#8 06.04.2009 15:22:54

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

Re: Проблема с Merge-таблицами

Какая версия сервера то? smile Расскажете, чем дело закончится?

Неактивен

 

#9 06.04.2009 22:32:17

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

Версия 5.1.33 - community, та же проблемаsad

Неактивен

 

#10 06.04.2009 23:21:16

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

Re: Проблема с Merge-таблицами

Попробуйте на обеих табличках принудительно сделать ALTER TABLE tablename ENGINE=MyISAM.
Это заодно сконвертирует их в последний формат. И пересоздайте над ними MERGE.

Неактивен

 

#11 07.04.2009 23:03:26

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

Бесполезно....

Неактивен

 

#12 08.04.2009 13:13:42

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

Re: Проблема с Merge-таблицами

Даже не знаю, что посоветовать... я просто запускаю кусок Вашего кода, и он работает.

Попробуйте создать отдельную базу, запустить в ней приведенный Вами код и сделать
выборку из соответствующих таблиц (пустых), потом заполнить их частично данными и
снова сделать выборку. Кажется, что дело в чем-то еще.

Неактивен

 

#13 08.04.2009 22:36:45

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

Да странно...я даже пробывал пример из учебника переписать, всё равно одна и та же ошибка.

Create table tb1 (id int not null auto_increment primary key,
name char(20));

Create table tb2 (id int not null auto_increment primary key,
name char(20));

Insert into tb1 (name) values ('12'), ('34');

Insert into tb2 (name) values ('15'), ('21');

Create table total (id int not null auto_increment,
name char(20), index(id))
engine=merge union=(tb1,tb2);

Неактивен

 

#14 09.04.2009 01:03:15

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

Re: Проблема с Merge-таблицами

Мммм... какая ОС? Какие-то лимиты стоят на стороне системы, может быть?

UPD: Кстати, в примере «из учебника» лишние индексы, они все равно над merge-таблицами не строятся.
С другой стороны, они не мешают...

Код:

[celestia] root test > Create table tb1 (id int not null auto_increment primary key, name char(20));
Query OK, 0 rows affected (0.05 sec)

[celestia] root test > Create table tb2 (id int not null auto_increment primary key, name char(20));
Query OK, 0 rows affected (0.00 sec)

[celestia] root test > Insert into tb1 (name) values ('12'), ('34');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

[celestia] root test > Insert into tb2 (name) values ('15'), ('21');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

[celestia] root test > Create table total (id int not null auto_increment, name char(20), index(id)) engine=merge union=(tb1,tb2);
Query OK, 0 rows affected (0.01 sec)

[celestia] root test > select * from total;
+----+------+
| id | name |
+----+------+
|  1 | 12   | 
|  2 | 34   | 
|  1 | 15   | 
|  2 | 21   | 
+----+------+
4 rows in set (0.00 sec)

Неактивен

 

#15 09.04.2009 07:42:18

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

ОС-Windows XP, права администратора, поэтому ограничений нет...что-то еще может мешать???
Может конфликтовать с какими-либо программами?

Неактивен

 

#16 09.04.2009 12:42:20

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

Re: Проблема с Merge-таблицами

Мда, виндоус под руками нету, чтобы попробовать.
Последнее предположение: без индекса пробовали MERGE создать?

Неактивен

 

#17 09.04.2009 21:27:46

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

а на UNIXе, значит, работает...

Неактивен

 

#18 09.04.2009 21:50:08

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

Ну в общем даже без индексов она не создаётся...Но всё же, спасибо за помощь! *THUMBS UP*

Неактивен

 

#19 09.04.2009 22:00:55

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

А еще вопрос...Если открыть созданную таблицу tablename.mrg при помощи notepad, что она должна содержать? Или нет такой информации? Просто у меня это:
1.tablename1
2.tablename2

Неактивен

 

#20 09.04.2009 22:13:14

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

Re: Проблема с Merge-таблицами

Боюсь, что идеи иссякли sad

Попробуйте сделать то же самое через представления / partitioning. Хоть какая-то замена.

Неактивен

 

#21 09.04.2009 22:14:00

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

Re: Проблема с Merge-таблицами

Она содержит названия таблиц, которые в нее включены, да. Только без цифр в начале.

Неактивен

 

#22 09.04.2009 22:20:54

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

ну цифры это из-за notepad2, они там автоматически строчки считают...
а вот что значит / partitioning я себе слабо представляю...судя по названию - разделение чего-то?

Неактивен

 

#23 10.04.2009 00:50:12

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

Re: Проблема с Merge-таблицами

Я расстроен, Вы меня обманули smile

Не поленился, поставил на Windows сервер со стандартными настройками. Вот лог:

Код:

mysql> \s
--------------
C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe  Ver 14.14 Distrib 5.1.33,
 for Win32 (ia32)

Connection id:          1
Current database:
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.1.33-community MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 16 sec

Threads: 1  Questions: 4  Slow queries: 0  Opens: 15  Flush tables: 1  Open tabl
es: 8  Queries per second avg: 0.250
--------------

mysql> use test;
Database changed
mysql> Create table tb1 (id int not null auto_increment primary key,
    -> name char(20));
Query OK, 0 rows affected (0.02 sec)

mysql> Create table tb2 (id int not null auto_increment primary key,
    -> name char(20));
Query OK, 0 rows affected (0.00 sec)

mysql> Insert into tb1 (name) values ('12'), ('34');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> Insert into tb2 (name) values ('15'), ('21');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> Create table total (id int not null auto_increment,
    -> name char(20), index(id))
    -> engine=merge union=(tb1,tb2);
Query OK, 0 rows affected (0.00 sec)

mysql> select * from total;
ERROR 1168 (HY000): Unable to open underlying table which is differently defined
 or of non-MyISAM type or doesn't exist
mysql> show table status like 'tb1'\G
*************************** 1. row ***************************
           Name: tb1
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 2
 Avg_row_length: 8192
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 4194304
 Auto_increment: 3
    Create_time: 2009-04-10 00:46:32
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.03 sec)

mysql> alter table tb1 engine=myisam;
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> alter table tb2 engine=myisam;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from total;
+----+------+
| id | name |
+----+------+
|  1 | 12   |
|  2 | 34   |
|  1 | 15   |
|  2 | 21   |
+----+------+
4 rows in set (0.00 sec)

Неактивен

 

#24 10.04.2009 11:16:44

Nem1r
Участник
Зарегистрирован: 03.04.2009
Сообщений: 16

Re: Проблема с Merge-таблицами

аааааааааsad прошу прощения, действительно проблема в моей невнимательности...
Но я честно менял InnoDB на MyISAM...
Спасибо большое, всё получилось, а то неделю с мертвой точки сдвинуться не мог.
Поражаюсь вашей "упертости" в хорошем смысле этого слова и работоспособности!
Еще раз спасибо!

Неактивен

 

Board footer

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