Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: При запросе не выдает таблицу с расширением MRG
 
 автор: secondbro   (20.04.2010 в 14:03)   письмо автору
 
 

При запросе SELECT * FROM total; не выдает таблицу с расширением MRG

Пример:

CREATE TABLE tbl1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(20));
CREATE TABLE tbl2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(20));
INSERT INTO tbl1 (name) VALUES ('12'), ('34'), ('56');
INSERT INTO tbl2 (name) VALUES ('78'), ('9a'), ('bc');
CREATE TABLE total (
id INT NOT NULL AUTO_INCREMENT,
name CHAR(20), INDEX(id))
ENGINE=MERGE UNION=(tbl1,tbl2) INSERT_METHOD=LAST;

SELECT * FROM total;
ERROR 1017 (HY000): Can't find file: 'total' (errno: 2)

В чем ошибка?
PS: в книге показано, что при запросе SELECT * FROM total выдает все правильно.

  Ответить  
 
 автор: cheops   (20.04.2010 в 14:09)   письмо автору
 
   для: secondbro   (20.04.2010 в 14:03)
 

А вы где тестируете этот пример? На локальной машине или на арендованном сервере? Дело в том, что на хостингах таблицы в оперативной памяти зачастую запрещены.

  Ответить  
 
 автор: Secondbro   (20.04.2010 в 14:19)   письмо автору
 
   для: cheops   (20.04.2010 в 14:09)
 

На локальной машине.
изучаю MySQL 5 по книге.

  Ответить  
 
 автор: cheops   (20.04.2010 в 14:22)   письмо автору
 
   для: Secondbro   (20.04.2010 в 14:19)
 

Странно, у меня запрос выполнился. Вы из под какого пользователя работаете? root или из под анонимного пользователя?

  Ответить  
 
 автор: Secondbro   (20.04.2010 в 14:25)   письмо автору
 
   для: cheops   (20.04.2010 в 14:22)
 

Да, пользователь root.

Версия MySQL 5.0.6 beta
ОС Windows XP SP2

  Ответить  
 
 автор: cheops   (20.04.2010 в 14:29)   письмо автору
 
   для: Secondbro   (20.04.2010 в 14:25)
 

Попробуйте версию обновить - очень уж старенькая (на сегодняшний день, кроме того beta, т.е. не релиз и в ней могут быть ошибки) - возможно в этом дело. Загрузить последнюю рекомендованную версию можно по ссылке.

  Ответить  
 
 автор: Secondbro   (20.04.2010 в 14:36)   письмо автору
 
   для: cheops   (20.04.2010 в 14:29)
 

Спасибо!
Я только начал изучать MySQL по книге Самоучитель MySQL 5 (Максим Кузнецов, Игорь Симдянов). Книга как бы основывается на версии 6.0.3, и если я сейчас переустановлю на версию mysql-5.1.45-win32 мне это же не помешает продолжать изучение по этой книге?

  Ответить  
 
 автор: cheops   (20.04.2010 в 16:17)   письмо автору
 
   для: Secondbro   (20.04.2010 в 14:36)
 

Нет не помешает. В 5.1.x больше функциональности, таких как планировщик задач, сегментирование, но обратная совместимость с 5.0 полная.

  Ответить  
 
 автор: Secondbro   (20.04.2010 в 15:03)   письмо автору
 
   для: cheops   (20.04.2010 в 14:29)
 

Установил версию mysql-5.1.45-win32.

Набрал:

CREATE TABLE tbl1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(20));
CREATE TABLE tbl2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(20));
INSERT INTO tbl1 (name) VALUES ('12'), ('34'), ('56');
INSERT INTO tbl2 (name) VALUES ('78'), ('9a'), ('bc');
CREATE TABLE total (
id INT NOT NULL AUTO_INCREMENT,
name CHAR(20), INDEX(id))
ENGINE=MERGE UNION=(tbl1,tbl2) INSERT_METHOD=LAST;

Все прошло отлично, но при запросе:
SELECT * FROM total;
ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

в чем ошибка?

  Ответить  
 
 автор: cheops   (20.04.2010 в 16:16)   письмо автору
 
   для: Secondbro   (20.04.2010 в 15:03)
 

Ага, ясно в чем дело, у вас таблицы tbl1 и tbl2 создались как InnoDB, добавьте тип таблиц MyISAM в конце
CREATE TABLE tbl1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(20)) ENGINE=MYISAM;
CREATE TABLE tbl2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(20)) ENGINE=MYISAM;
INSERT INTO tbl1 (name) VALUES ('12'), ('34'), ('56');
INSERT INTO tbl2 (name) VALUES ('78'), ('9a'), ('bc');
CREATE TABLE total (
id INT NOT NULL AUTO_INCREMENT,
name CHAR(20), INDEX(id))
ENGINE=MERGE UNION=(tbl1,tbl2) INSERT_METHOD=LAST;

Или, чтобы по умолчанию создавались таблицы MyISAM вместо InnoDB в конфигурационном файле my.ini измените строку
default-storage-engine=INNODB

на
default-storage-engine=MYISAM

  Ответить  
 
 автор: Secondbro   (20.04.2010 в 16:59)   письмо автору
 
   для: cheops   (20.04.2010 в 16:16)
 

Все OK, спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования