|
|
|
| При запросе 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 выдает все правильно. | |
|
|
|
|
|
|
|
для: secondbro
(20.04.2010 в 14:03)
| | А вы где тестируете этот пример? На локальной машине или на арендованном сервере? Дело в том, что на хостингах таблицы в оперативной памяти зачастую запрещены. | |
|
|
|
|
|
|
|
для: cheops
(20.04.2010 в 14:09)
| | На локальной машине.
изучаю MySQL 5 по книге. | |
|
|
|
|
|
|
|
для: Secondbro
(20.04.2010 в 14:19)
| | Странно, у меня запрос выполнился. Вы из под какого пользователя работаете? root или из под анонимного пользователя? | |
|
|
|
|
|
|
|
для: cheops
(20.04.2010 в 14:22)
| | Да, пользователь root.
Версия MySQL 5.0.6 beta
ОС Windows XP SP2 | |
|
|
|
|
|
|
|
для: Secondbro
(20.04.2010 в 14:25)
| | Попробуйте версию обновить - очень уж старенькая (на сегодняшний день, кроме того beta, т.е. не релиз и в ней могут быть ошибки) - возможно в этом дело. Загрузить последнюю рекомендованную версию можно по ссылке. | |
|
|
|
|
|
|
|
для: cheops
(20.04.2010 в 14:29)
| | Спасибо!
Я только начал изучать MySQL по книге Самоучитель MySQL 5 (Максим Кузнецов, Игорь Симдянов). Книга как бы основывается на версии 6.0.3, и если я сейчас переустановлю на версию mysql-5.1.45-win32 мне это же не помешает продолжать изучение по этой книге? | |
|
|
|
|
|
|
|
для: Secondbro
(20.04.2010 в 14:36)
| | Нет не помешает. В 5.1.x больше функциональности, таких как планировщик задач, сегментирование, но обратная совместимость с 5.0 полная. | |
|
|
|
|
|
|
|
для: 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
в чем ошибка? | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: cheops
(20.04.2010 в 16:16)
| | Все OK, спасибо! | |
|
|
|