Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при создании таблицы - помогите понять, в чем!  (Прочитано 18376 раз)
0 Пользователей и 1 Гость смотрят эту тему.
andrystepa
Помогающий

ru
Offline Offline

« : 14-08-2008 08:57 » 

Создаю таблицу в базе данных. Команда такая:
Код:
USE Classificator;

DROP TABLE IF EXISTS main;

CREATE TABLE main (
id INT(11) NOT NULL auto_increment PRIMARY KEY,
type_id SMALLINT UNSIGNED,
num SMALLINT UNSIGNED NOT NULL,
pr_id INT(11) NOT NULL default '0',
ust_id INT(11) NOT NULL default '0',
name VARCHAR(25),
maker_id INT(11), NOT NULL default '0',
dates TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

FOREIGN KEY (pr_id) REFERENCES projects (pr_id)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (ust_id) REFERENCES ustroistva (ust_id)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (maker_id) REFERENCES makers (maker_id)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (type_id) REFERENCES types (type_id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB;
не работает, выдает ошибку:
Код:
mysql> SOURCE /home/createclassificator5.sql;
Database changed
Query OK, 0 rows affected, 1 warning (0.00 sec)

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL default '0',
dates TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURREN' at line 8
Не понял, в чем ошибка! Если в определении dates, то вот копия документации с сайта MySQL:
Код:
Auto-initialization and auto-update: 
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Вроде бы то же самое. Если речь идет о FOREIGN KEY - в документации пример тоже такой же. Так в чем же ошибка? Помогите пожалуйста!
« Последнее редактирование: 14-08-2008 11:22 от RXL » Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 14-08-2008 09:10 » 

Цитата
maker_id INT(11), NOT NULL default '0'
Нафиг тут запятая?
Записан

Удачного всем кодинга! -=x[PooH]x=-
andrystepa
Помогающий

ru
Offline Offline

« Ответ #2 : 14-08-2008 09:43 » 

PooH,
Да, запятая явно лишняя. Спасибо большое! Как всегда дело в запятой!!!
« Последнее редактирование: 14-08-2008 10:02 от andrystepa » Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #3 : 14-08-2008 09:49 » 

andrystepa, да не за что =)
Записан

Удачного всем кодинга! -=x[PooH]x=-
andrystepa
Помогающий

ru
Offline Offline

« Ответ #4 : 14-08-2008 10:34 » 

Блин, что за черт! Опять ошибка, но теперь с другой таблицей, и другая ошибка. Создание таблицы:
Код:
USE Classificator;

DROP TABLE IF EXISTS maintbl;

CREATE TABLE maintbl (
id INT(11) NOT NULL auto_increment PRIMARY KEY,
type_id SMALLINT UNSIGNED,
gr_id INT(11) UNSIGNED,
num SMALLINT UNSIGNED NOT NULL,
pr_id INT(11) NOT NULL default '0',
ust_id INT(11) NOT NULL default '0',
name VARCHAR(25),
maker_id INT(11) NOT NULL default '0',
dates TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

FOREIGN KEY (pr_id) REFERENCES projects (pr_id)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (ust_id) REFERENCES ustroistva (ust_id)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (maker_id) REFERENCES makers (maker_id)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (type_id) REFERENCES izdtypes (type_id)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (gr_id) REFERENCES tblofcontents (gr_id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB;

 В результате получаю:

Код:
mysql> SOURCE /home/createclassificator5.sql;
Database changed
Query OK, 0 rows affected, 1 warning (0.00 sec)

ERROR 1005 (HY000): Can't create table './Classificator/maintbl.frm' (errno: 150)
« Последнее редактирование: 14-08-2008 11:22 от RXL » Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #5 : 14-08-2008 10:54 » 

вот что я нашел:
http://forums.mysql.com/read.php?25,15717,25969
Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 14-08-2008 11:25 » 

andrystepa, переформатировал твой код. MySQL очень гуманная система - она тебе написала, где у тебя ошибка - не ленись проверить и верь ей.

Offtopic:
Люди, я то думал, что это я ленивый... Ну, неудобно же читать! Пару табов, пару пустых строк и уже легче. Ведь большая часть читающих даже не взглянет на нечитаемый код!!!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
andrystepa
Помогающий

ru
Offline Offline

« Ответ #7 : 14-08-2008 12:07 » 

PooH,
А где там некорректно задан FOREIGN KEY?  Ошибка появилась, после того как я добавил последний. Но в чем некорректность? Вот команда для создания таблицы, на которую он ссылается:
Код:
se Classificator;
DROP TABLE IF EXISTS tblofcontents;
CREATE TABLE tblofcontents (
gr_id INT(11) NOT NULL auto_increment PRIMARY KEY,
izdoc_cur SMALLINT UNSIGNED,
izdoc_max SMALLINT UNSIGNED,
izdoc_min SMALLINT UNSIGNED,
uzl_cur SMALLINT UNSIGNED,
uzl_max SMALLINT UNSIGNED,
uzl_min SMALLINT UNSIGNED,
det_cur SMALLINT UNSIGNED,
det_max SMALLINT UNSIGNED,
det_min SMALLINT UNSIGNED
) ENGINE=InnoDB;
Никакого криминала я не нахожу. Где же ошибка?
RXL, Хоть убейте, не вижу, где она написала! Поверить чему? Тому что она не может открыть файл базы данных? Но почему? Ведь за несколько секунд до этого она благополучно открыла несколько аналогичных файлов. Единственное отличие - в них небыло внешних ключей.
Записан
andrystepa
Помогающий

ru
Offline Offline

« Ответ #8 : 14-08-2008 12:11 » 

Все-таки дело в последнем FOREIGN KEY - убираю его и таблица нормально создается. Добавляю - ошибка. Но она аналогичен предыдущим! В чем же проблема?!
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #9 : 14-08-2008 12:27 » 

Может ему типы полей связываемых не нравятся, например, UNSIGNED.
Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 14-08-2008 12:29 » 

andrystepa, цитифую тебя:
Цитата
Код:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL default '0',
dates TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURREN' at line 8

У тебя там запятая стояла? Стояла. О чем я и говорю.

По части FOREIGN KEY.
Посмотри в атаче - я сделал выдержку из мануала. Проверь, соблюдены ли у тебя требования, описанные там.

* mysql-5.0-foreign_keys.pdf (41.51 Кб - загружено 4589 раз.)
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
andrystepa
Помогающий

ru
Offline Offline

« Ответ #11 : 14-08-2008 13:17 » 

RXL, С этой ошибкой уже разобрались - выше смотри - PooH, подсказал.А за мануалы спасибо. Правда, пока ничего противоречащего не нашел.
Обе таблицы InnoDB, Соответствующие колонки имеют одинаковый тип INT, - префикс (11) убрал в обоих таблицах - ничего не изменилось. Что еще может быть не так?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 14-08-2008 13:20 » 

Там про порядок столбцов еще говорилось...
Главное, что ошибка у тебя есть - ее только надо найти. Сократи код до минимума и потестируй.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #13 : 14-08-2008 13:57 » 

меня просто смутило что у тебя "maintbl.gr_id INT(11) UNSIGNED", а "tblofcontents.gr_id INT(11) NOT NULL auto_increment"... я с mysql никогда толком не общался, может он и позволяет такое делать... попробуй UNSIGNED убрать.
« Последнее редактирование: 15-08-2008 13:53 от RXL » Записан

Удачного всем кодинга! -=x[PooH]x=-
andrystepa
Помогающий

ru
Offline Offline

« Ответ #14 : 14-08-2008 17:27 » new

Пришел домой, скачал MySQL под винду и создал ту же самую базу. Таблицы в виде скриптов принес с работы. PooH, ПРАВ!!! Спасибо большое - дело было именно в UNSIGNED - типы не совпадали. Спасибо еще раз - все же со стороны виднее!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines