Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [MySQL]auto_increment и триггер

Ответить
Настройки темы
[MySQL]auto_increment и триггер

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Я пишу триггер, который при добавлении записи в одну таблицу, добавляет запись в другую таблицу. При этом используется primary key добавляемого элемента. Проблема в том, что в момент добавления элемента его pk равен нулю. А как получить его реальное значение?

Отправлено: 00:29, 14-11-2006

 

Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


делай предварительный запрос на max значение ключа и ++, это на поверхности... IMHO больше никак (если правильно понял)...

Отправлено: 01:37, 14-11-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Kerbit
Покажите код триггера

Цитата:
делай предварительный запрос на max значение ключа и ++, это на поверхности
Лучше руками обновление делать, чем так

-------
Fortes fortuna adiuvat


Отправлено: 02:44, 14-11-2006 | #3


Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


На данный момент код триггера и определения таблиц такие:
PHP код: Выделить весь код

CRETAE table tbl1 (Id_ int(32not null auto_incrementstr varchar(32not nullprimary key(Id_));

   
CREATE table tbl2 (Id_ int(32not null auto_incrementId int(32not nullstr varchar(32not nullprimary key(Id_));

   
CREATE TRIGGER new_tbl1 BEFORE INSERT ON tbl1
   
FOR EACH ROW 
   BEGIN
      insert into tbl2 values
(null, New.Id_'abc');
   
END

При выполнении триггера New.Id_ равен 0. В этом состоит проблема.
Цитата:
делай предварительный запрос на max значение ключа и ++, это на поверхности...
Метод не прокатит, так как если мы добавляли записи в tbl2, а потом удалили несколько последних добавленных, то id будет вовсе не max++.
В будущем этот новый id должен внешним ключем стать для tbl2, может тогда можно как-то проще сделать?

Последний раз редактировалось Kerbit, 14-11-2006 в 08:25.


Отправлено: 07:36, 14-11-2006 | #4


Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


Kerbit а если запрос на tbl1? (я чего-то не въехал пока )

Отправлено: 08:44, 14-11-2006 | #5


Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата:
Kerbit а если запрос на tbl1? (я чего-то не въехал пока )
При запросе вида:
PHP код: Выделить весь код

insert into tbl1 values(null'abc'); 


В tbl2 вставляются записи с id = 0. Но у новой вставленной в tbl1 записи id становится не нулевым.
PS: Я неделю назад начал писать на SQL, может я чего-то не понимаю?

Последний раз редактировалось Kerbit, 14-11-2006 в 09:11.


Отправлено: 08:53, 14-11-2006 | #6


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Kerbit
read this:
http://bugs.mysql.com/bug.php?id=12482

and this:
http://rh-web-guy.livejournal.com/778.html

Отправлено: 09:40, 14-11-2006 | #7


Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


Kerbit
Цитата:
CREATE table tbl2 (Id_ int(32) not null auto_increment
а зачем у тебя здесь auto_increment, если значение берешь из tbl1?

Отправлено: 11:32, 14-11-2006 | #8


Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата:
а зачем у тебя здесь auto_increment, если значение берешь из tbl1?
Значение из tbl1 я беру для Id, а не в Id_.
XCodeR
Если я правильно понял, то это баг и он исправлен в версии 5.0.12. Но у меня 5.0.24a. Как же так получается?

Отправлено: 18:05, 14-11-2006 | #9


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Kerbit
возможно, глупость скажу. А last_insert_id() использовать не пробовали?

P.S.
Цитата:
он исправлен в версии 5.0.12. Но у меня 5.0.24a. Как же так получается?
я же не знал Вашей версии MySQL.

Отправлено: 18:30, 14-11-2006 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [MySQL]auto_increment и триггер

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие БД - oracle]FRM-40735: POST-OUERY триггер вызвал необработанное ислючение ORA-01403 Molchun78 Программирование и базы данных 0 08-11-2008 23:07
MySQL - MySQL & MySQL-Front timon4ik Программирование и базы данных 2 06-04-2008 18:07
MySQL - auto_increment в id. LEXX2002 Вебмастеру 7 11-02-2005 19:15
MySQL alex r Общий по Linux 8 03-09-2003 11:04
MySQL UZER Хочу все знать 2 31-07-2003 00:22




 
Переход