SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 04.01.2012 16:41:50

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Помогите разобраться с уникальностью ID

Имеем 2 сервера А, В

Таблицы:  А.table1 (id,...); A.table2 (id, t1_id,...)
ночью это дело импортируется в одну таблицу на сервере В (как бы сливается, см. ниже)
B.table1 (id,...)

// id - везде PRIMARY + AUTOINCREMENT

следующим образом:
  A.table1 -> B.table1    без изменений
  A.table2 -> B.table1    по след схеме:
   
     если A.table2.t1_id <> 0,  INSERT B.table1(t1_id, ...)
     если A.table2.t1_id = 0, то выполняем

START TRANSACTION;
INSERT INTO A.table1();         // новая запись для получения ID через Autoincrement
SELECT LAST_INSERT_ID();     // то самое ID
UPDATE A.table2 SET t1_id = {то самое ID} WHERE {текущая запись};
DELETE FROM A.table1 WHERE id = {то самое ID};
COMMIT;

INSERT B.table1({то самое ID}, ...)



Т.о. в   A.table2.t1_id записывается ID эскпортированного елемента.

Обнаружил, что в A.table2.t1_id накопились дублирующиеся ID.

Вопрос: Гарантирует ли выше описанная схема уникальность объектов при сливании A.table1 & A.table2?

Отредактированно vaspet (04.01.2012 16:43:59)

Неактивен

 

#2 04.01.2012 19:35:57

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Помогите разобраться с уникальностью ID

Совсем простой вопрос.
Autoincrement гарантирует уникальность?

С таблицей происходит работа: вставление / удаление записей.

Неактивен

 

#3 05.01.2012 00:50:57

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

Re: Помогите разобраться с уникальностью ID

Автоинкремент гарантирует уникальность, но только в пределах одной таблицы.
В Вашем случае, кажется, всё должно работать правильно (при условии, что это
единственный способ получения ID во второй таблице, и обе таблицы InnoDB).

Неактивен

 

#4 05.01.2012 12:29:39

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Помогите разобраться с уникальностью ID

Спасибо за ответ.

Tаблица B.table1 только для чтения. [ только SELECT ]

А что с MyISAM таблицами?

Расклад следующий:
A.table1 - InnoDB
A.table2 - MyISAM
B.table1 - Access DB

Неактивен

 

#5 05.01.2012 19:59:58

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

Re: Помогите разобраться с уникальностью ID

MyISAM не поддерживает транзакции. Access, разумеется, внутрь той же
транзакции MySQL Вы тоже не засунете smile

Неактивен

 

#6 14.02.2012 14:59:52

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Помогите разобраться с уникальностью ID

Обнаружил на таблице A.table1 Триггер делающий вставки в другие таблицы. Понимаю я правильно, что следующая конструкция вернет не ID из A.table1, а последний ID вставленной в Триггере записи?
Можно как-нибудь это обойти или поймать ID из A.table1?

INSERT INTO A.table1();         // новая запись для получения ID через Autoincrement
TRIGGER (INSERT ...)
SELECT LAST_INSERT_ID();     // то самое ID (А вот и фиг там!)

Неактивен

 

#7 14.02.2012 15:14:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Помогите разобраться с уникальностью ID

Нет. Вернет id из первой таблицы.

Неактивен

 

Board footer

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