Создание представления MySQL с автоматически увеличивающимся столбцом идентификатора - PullRequest
14 голосов
/ 11 мая 2010

У меня есть база данных MySQL, из которой создается представление. Можно ли добавить автоматически увеличивающийся идентификатор для каждой строки в представлении?

Я пытался

CREATE ALGORITHM=UNDEFINED DEFINER=`database_name`@`%` SQL SECURITY DEFINER VIEW `MyView` AS 
set @i = 0;
select  @i:=@i+1 as `id`
        ...

но это не работает в представлении.

Ответы [ 3 ]

12 голосов
/ 15 ноября 2010

Извините - вы не можете автоинкрементировать в VIEW (хотя вы можете сделать это в хранимой процедуре).

Из Руководства MySQL :

Определение вида зависит от следующие ограничения: ВЫБРАТЬ утверждение не может относиться к системе или пользовательские переменные.

6 голосов
/ 30 августа 2017

Я знаю, что этот вопрос старый, но на случай, если другие столкнутся с этим вопросом, есть другая альтернатива.

ВАЖНО: эта альтернатива действительна до тех пор, пока автоинкремент не очень важен, поэтому вам необходим только уникальный идентификатор для строк представления:

Вы можете использовать функцию UUID (), которая предоставляет вам уникальный буквенно-цифровой идентификатор. Проверьте документацию в mysql-справочное руководство

Следовательно, вы можете создать вид, подобный этому:

Create view my-view AS
Select UUID() as 'id', t.name, t.value
from table t
....
1 голос
/ 24 мая 2011

Попробуйте это,

CREATE VIEW view_wp_postmeta AS(
SELECT (
  SELECT count( meta_id ) +1
  FROM wp_postmeta 
  AS vtmp     
  WHERE vtmp.meta_id < pm.meta_id
) AS vtmp_id, pm. *
FROM wp_postmeta AS pm
ORDER BY pm.meta_id DESC
)

В WordPress meta_id = AUTO_INCREMENT в wp_postmeta TABLE я создаю для этого VIEW, в котором view_id ведет себя как AUTO_INCREMENT в порядке DESC.

Например, В ТАБЛИЦА wp_postmeta -> meta_id [3,5,6,10,2,11] который появится в ПРОСМОТР view_wp_postmeta -> view_id [6,5,4,3,2,1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...