Sql запрос

  • Автор темы Автор темы tstf
  • Дата начала Дата начала
T

tstf

Не выполняется SQL запрос на Mysql 4.0 4.1 В чём проблема?

[sql]CREATE TABLE answers (
idAnswer int(11) NOT NULL auto_increment,
answ1 char(254) NOT NULL default '',
answ2 char(254) NOT NULL default '',
answ3 char(254) NOT NULL default '',
true tinyint(4) NOT NULL default '0',
idQuestion int(11) NOT NULL default '0',
PRIMARY KEY (idAnswer),
KEY indx (idQuestion),
CONSTRAINT `answers_ibfk_1` FOREIGN KEY (`idQuestion`) REFERENCES `questions` (`idQuestion`) ON DELETE CASCADE ON UPDATE CASCADE
) TYPE=InnoDB;
INSERT INTO answers VALUES (1,'ответ_1 1856','ответ_2 1856','ответ_3 1856',1,1);
INSERT INTO answers VALUES (2,'ответ_1 1856','ответ_2 1856','ответ_3 1856',1,2);
INSERT INTO answers VALUES (3,'ответ_1 1856','ответ_2 1856','ответ_3 1856',1,3);
INSERT INTO answers VALUES (4,'ответ_1 8577','ответ_2 8577','ответ_3 8577',1,4);
INSERT INTO answers VALUES (5,'ответ_1 3235','ответ_2 3235','ответ_3 3235',1,5);
INSERT INTO answers VALUES (6,'ответ_1 5473','ответ_2 5473','ответ_3 5473',1,6);
INSERT INTO answers VALUES (7,'ответ_1 6620','ответ_2 6620','ответ_3 6620',1,7);
INSERT INTO answers VALUES (8,'ответ_1 7917','ответ_2 7917','ответ_3 7917',1,11);
INSERT INTO answers VALUES (9,'ответ_1 6916','ответ_2 6916','ответ_3 6916',1,12);
INSERT INTO answers VALUES (10,'ответ_1 1963','ответ_2 1963','ответ_3 1963',1,13);[/sql]

Спасибо.
 
Проблема вроди тут:
Код:
CONSTRAINT `answers_ibfk_1` FOREIGN KEY (`idQuestion`) REFERENCES `questions` (`idQuestion`) ON DELETE CASCADE ON UPDATE CASCADE
 
Не в обиду tstf, но хочу рассказать маленькую историю.
Больше всего меня раздражает когда юзер бежит ко мне с горящими глазами и кричит что-то типа: "У меня ошибка!!!!"
Ему все равно чем я занят, он считает, что я все брошу,все пойму, потому что поню все наизусть, все и сразу разберусь. Них..чего подобного! Далее идет следующий диалог.
Спрашиваю его:
- Какая ошибка?
Отвечает:
- Я как всегда все делал, Аксесс и все такое, вдруг окошко там страшное, что с твоей базой ?!!!! - Делает страшные глаза.
- Бля, текст ошибки можешь сказать!!!!??? ;)
- УУУУ....ЭЭЭЭЭЭ....ААААА.... Нет.... :D
Конец....

Вот интересно, а на каком этапе ошибка? А какой текст ошибки?

Ну создается ли таблица (или скрипт выложен только для обзора структуры, а таблица уже есть), существует ли таблица questions, есть ли в таблице questions значения в поле idQuestion на которые ссылаются инсёрты?

Немножко злобно получилось, прошу не обижаться, а просто принять к сведению и посмеяться... :)
 
Для: Andromeda
Согласен. Не дописал ;)
Значит дело такое... Запрос отказывается выполняться ссылаясь на след. ошибку.

#1064 - 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 'true tinyint(4) NOT NULL default '0', idQuestion int(11) NOT NULL default '0'' at line 6

Тестил на Mysql 4.0 и 4.1.

Самое что интересное - мне сказали что

true - является зарезервированным словом. и надо заменить true на что то иное.

и ещё
true tinyint(4) NOT NULL default '0'

числовое поле имеет текстовое значение по-умолчанию. А по поводу "true" - дурной тон называть поля ключевыми словами. Но если уж назвали - придется теперь во всех запросах заключать название поля в кавычки.


<!--QuoteBegin-Andromeda+28:12:2006, 12:51 -->
<span class="vbquote">(Andromeda @ 28:12:2006, 12:51 )</span><!--QuoteEBegin-->существует ли таблица questions, есть ли в таблице questions значения в поле idQuestion на которые ссылаются инсёрты?
[snapback]52014" rel="nofollow" target="_blank[/snapback]​
[/quote]
существует и значения есть.
вот код таблицы question

Код:
CREATE TABLE questions (
idQuestion int(11) NOT NULL auto_increment,
text blob NOT NULL,
idLab int(11) NOT NULL default '0',
PRIMARY KEY (idQuestion),
KEY indx_lb (idLab),
CONSTRAINT `questions_ibfk_1` FOREIGN KEY (`idLab`) REFERENCES `labs` (`idLab`) ON DELETE CASCADE ON UPDATE CASCADE
) TYPE=InnoDB;
INSERT INTO questions VALUES (1,'текст нового вопроса1856',6);
INSERT INTO questions VALUES (2,'текст нового вопроса1856',6);
INSERT INTO questions VALUES (3,'текст нового вопроса1856',6);
INSERT INTO questions VALUES (4,'текст нового вопроса8577',5);
INSERT INTO questions VALUES (5,'текст нового вопроса3235',3);
INSERT INTO questions VALUES (6,'текст нового вопроса5473',7);
INSERT INTO questions VALUES (7,'текст нового вопроса6620',6);
INSERT INTO questions VALUES (8,'текст нового вопроса9773',6);
INSERT INTO questions VALUES (9,'текст нового вопроса7917',6);
INSERT INTO questions VALUES (10,'текст нового вопроса9149',6);
INSERT INTO questions VALUES (11,'текст нового вопроса7917',6);
INSERT INTO questions VALUES (12,'текст нового вопроса6916',6);
INSERT INTO questions VALUES (13,'текст нового вопроса1963',6);

Все остальные таблицы создались нормально за исключением answers.
 
Молодец!

Сам разобрался. Виш как оно в жизни: сам себе не поможешь - фиг кто поможет. :D

А я вот и не обратил даже внимания на имя поля - true :D . Стыдно мне...
Кажется в стандарте SQL-95 (помню, что в InterBase и FireBird это называется SQL версии 3) разрешили
использовать всяческие злобные имена типа true, но при их написании обязательно брать в двойные кавычки - по мне, так не лучшее решение, но это, само собой имхо.

Еще раз убеждаемся - надо читать чего нам пишут в текстах сообщений ошибок и проблем на порядок меньше будет!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!