Создание представления MySQL с помощью столбца автоинкрементного идентификатора
У меня есть база данных MySQL, из которой создается представление. Можно ли добавить автоматически увеличивающийся идентификатор для каждой строки в представлении?
Я пробовал
CREATE ALGORITHM=UNDEFINED DEFINER=`database_name`@`%` SQL SECURITY DEFINER VIEW `MyView` AS
set @i = 0;
select @i:[email protected]+1 as `id`
...
но это не работает в представлении.
Ответы
Ответ 1
Извините - вы не можете автоинкремент в VIEW (вы можете сделать это в хранимой процедуре, хотя).
Из руководства MySQL:
Определение вида зависит от следующие ограничения: SELECT оператор не может ссылаться на систему или пользовательские переменные.
Ответ 2
Я знаю, что этот вопрос старый, но на случай, если другие столкнутся с этим вопросом, есть другая альтернатива.
ВАЖНО! Эта альтернатива действительна до тех пор, пока автоинкремент не очень важен, и поэтому вам нужен только уникальный идентификатор для строк представления:
Вы можете использовать функцию UUID(), которая предоставляет вам уникальный буквенно-цифровой идентификатор. Проверьте документацию в mysql-reference-manual
Следовательно, вы можете создать вид, подобный этому:
Create view my-view AS
Select UUID() as 'id', t.name, t.value
from table t
....
Ответ 3
Попробуйте это,
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 view_wp_postmeta → view_id [6,5,4,3,2,1]
Ответ 4
попробуй это,
create view view_st as
select row_number() over (order by column_st) id, column_st
from table_st;