SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.07.2011 18:28:11

Герман Клюшин
Участник
Откуда: Севастополь
Зарегистрирован: 17.11.2008
Сообщений: 13

Эмуляция autoincrement

На уже готовой базе вдруг оказалось, что нужна не сквозная а отдельная нумерация sad
Пришлось добавить поле num и вписывать туда номер, таки образом:

table account (id, name, max_job_num)
table job (id, name, fk_account, num)

То есть при создании нового job нужно взять значение из account.max_job_num и вставить его в job.num, я думаю делать так:

update account set max_job_num = (SELECT @max_num:=max_job_num + 1)
where id=$account_id;
insert into job (name, fk_account, num)
values('job name', $account_id, @max_num);

Теоретически переменные MySQL же локальны и не видны из других потоков?
да если не понятно - $account_id переменная ПХПшная

Отредактированно Герман Клюшин (01.07.2011 18:29:46)


Иисус - Бог неба и земли!

Неактивен

 

#2 01.07.2011 18:41:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Эмуляция autoincrement

Возможно, Вас устроит встроенное в MySQL решение:

Код:

[silentia] root test > CREATE TABLE ai (a INT NOT NULL, b INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (a,b));
Query OK, 0 rows affected (0.00 sec)

[silentia] root test > INSERT INTO ai VALUES (1, NULL);
Query OK, 1 row affected (0.00 sec)

[silentia] root test > INSERT INTO ai VALUES (1, NULL);
Query OK, 1 row affected (0.00 sec)

[silentia] root test > INSERT INTO ai VALUES (1, NULL);
Query OK, 1 row affected (0.00 sec)

[silentia] root test > INSERT INTO ai VALUES (2, NULL);
Query OK, 1 row affected (0.00 sec)

[silentia] root test > INSERT INTO ai VALUES (2, NULL);
Query OK, 1 row affected (0.00 sec)

[silentia] root test > SELECT * FROM ai;
+---+---+
| a | b |
+---+---+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
+---+---+
5 rows in set (0.00 sec)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson