![]() |
|
Модераторы: skyboy |
![]()
|
|
| Иль |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Не знаете в чем причина может быть? Делаю стандартный пример из документации по SQL http://dev.mysql.com/doc/mysql/ru/example-foreign-keys.html в Windows в Денвере под MySQL 4.1.8-max и у меня получается глюк с LAST_INSERT_ID()
Здесь я привожу не полный пример, но в полном еще хуже (до 5 или 6 достигает значение поля owner, а должно быть максимум 2, ведь в таблице person будет всего 2 записи по примеру).
А вот что получается
Вот в нижней выборке и в нижней строке в поле owner значение 2, но это что-то из области фантастики, ведь select LAST_INSERT_ID() выдавал 1 перед началом последнего insert. Я в тупике. Может от того, что таблицы MyISAM, а не InnoDB? Я конечно могу все сделать через внутреннюю переменную, но хотелось бы разобраться от чего такой глюк. Это сообщение отредактировал(а) Иль - 3.10.2005, 18:06 -------------------- Ты виндусятник?... А я да. |
||||
|
|||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Пояснения не понял вообще, а по коду всё корректно выполнено.
-------------------- Теперь при чем :P |
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 4 Всего: 29 |
Привет,
LAST_INSERT_ID возвращяеть id последнего Inserta
Здесь у тебя 3 Inserta Первий LAST_INSERT_ID() возвращяеть id полученого при INSERT INTO person VALUES (NULL, 'Antonio Paz') (1), второй - полученого при (NULL, 'polo', 'blue', LAST_INSERT_ID()) (1), третий - при (NULL, 'dress', 'white', LAST_INSERT_ID()) (2)... если добавиш еще записей, то получиться 3, 4 и т.д. - каждий возвращяеть id из предишного insert-а, а то, что они в одной заявки не имеет значения Это сообщение отредактировал(а) Darhazer - 3.10.2005, 18:10 -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
А.... Въехал, что ты хотел. Придется с переменными извращаться. Ведь LAST_INSERT_ID() возвращает значение НЕЗАВИСИМО от того, в какую таблицу вставлена запись. Т.е. в 23 и 24 строке кода функция возвращает id записей таблицы `shirt`, а не `person`.
Добавлено @ 18:11 Darhazer, опередил -------------------- Теперь при чем :P |
|||
|
||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Ну как могу
Посмотрите на результат внизу
в последнем поле никак не может быть двойки, тк перед INSERT INTO shirt VALUES (проверял) запрос select LAST_INSERT_ID() выдавал 1, поэтому во всех полях owner должна быть только 1. -------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 4 Всего: 29 |
Иль перед INSERT INTO shirt VALUES есть только один insert и у него id 1 в INSERT INTO shirt VALUES делаеш 3 inserta и каждий меняеть id (NULL, 't-shirt', 'blue', LAST_INSERT_ID()); здесь получаешь id от (NULL, 'dress', 'white', LAST_INSERT_ID()), Это сообщение отредактировал(а) Darhazer - 3.10.2005, 18:18 -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Ничего себе, приехали. Ребята, это получается официальная документация не к черту!!!
Смотрите по ссылке в первом топе, что они там рисуют с SQL и что приводят в результате: В owner везде одни 1 и 2. Ну да бог сними (ведь, халява, сэр) Это еще цветочки, а как я "веселился", когда заполнял таблицы из файлов!!! В Windows же строки оканчиваются "\r\n" (у Никсов '\n', у MAC '\n\r'), а у LOAD DATA LOCAL INFILE по умолчанию стоит "\n" и если вносятся строки в полях текстовых типов в которых не применяется автоматическая обрезка начальных и конечных пробелов (TRIM) (это ENUM, TEXT и др), то такая каша мала на экране получалась из-за не удаленного знака переноса каретки \r. Добавлено @ 18:29 Darhazer, да это я с ответом Ignat опоздал. Понял, буду помнить. Это сообщение отредактировал(а) Иль - 5.10.2005, 11:11 -------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Darhazer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 4 Всего: 29 |
Может быт так било в ранних версиях. Посмотри что написано в английской документации: http://dev.mysql.com/doc/mysql/en/example-foreign-keys.html
-------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
||||
|
|||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Вау, смех да и только. И зачем я поленился по ангийски читать...
Именно через переменную пользователя они и делают. Урок на будующее, чтоб английские маны читал -------------------- Ты виндусятник?... А я да. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |