2009-09-07 4 views
1

Я хотел бы создать функцию автоматического увеличения, которая позволяет мне сохранять уникальность в определенных столбцах на нескольких таблицах.помочь создать пользовательскую функцию автоматического приращения в mysql

Я понимаю, что это не поддерживается стандартными функциями mysql, но, похоже, это можно сделать вручную. Может ли кто-нибудь указать мне в правильном направлении?

Thanks

ответ

1

У вас есть несколько вариантов. Во-первых, вы можете сделать идентификатор UUID (поле 36+ varchar) и использовать функцию MySQL UUID(). Другой вариант - использовать таблицу как таблицу генерации последовательности, позволяющую использовать функции auto_increment и просто использовать все, что генерируется при введении в эту таблицу в качестве ключа в другом месте.

Лично я бы выбрал UUID, поскольку это довольно распространенный способ иметь глобально уникальные идентификаторы. Предупреждение: вам может быть лучше генерировать эти UID на языке вашего клиента, а не использовать реализацию MySQL.

0

В чем проблема с установкой столбца (идентификатора) в первичный/уникальный и автоматический_инкремент?

ps: кроме того, если вам нужна уникальность между несколькими таблицами, вы, вероятно, неправильно делаете что-то.

+0

используя уникальность по нескольким таблицам не мой единственный вариант, но я предпочел бы его на объединение двух таблиц и добавления столбца типа. Кроме того, две таблицы содержат разные данные для двух типов информации. Таким образом, объединение наборов данных приведет к избыточным нулям. – dittle

+0

Я все еще не понимаю, почему у вас не было главной таблицы с первичными идентификаторами для каждой подтаблицы. поэтому мы называем mysql реляционным. – dusoft

+0

Я думаю, что это можно сделать, если я использовал триггеры для генерации значений во вспомогательных таблицах. Тем не менее, было бы неплохо, если бы все это было в одной функции. – dittle

0

Думаю, что это может быть что-то вроде этого

delimiter $$ 
CREATE PROCEDURE myProc() 
BEGIN 
DECLARE mid INT; 
START TRANSACTION; 
select MAX(id) + 1 INTO mid ( SELECT id FROM tbl1 UNION ALL SELECT id from tbl2 ...) tbls; 
INSERT INTO <somt_tbl> VALUES (mid, ...); 
COMMIT; 
END$$ 
+1

@Paul Svirin: Я бы предложил добавить эту подпись в свой профиль. Стандартная практика здесь на SO заключается в том, чтобы предоставлять только ссылки, которые помогут людям решить ответ. Бесстыдные самоподключатели не поощряются, и никто не использует линию подписи, как вы. – RSolberg

 Смежные вопросы

  • Нет связанных вопросов^_^