我有一个MySQL数据库,可以从中创建视图。是否可以为视图中的每一行添加自动递增ID?
我试过
CREATE ALGORITHM=UNDEFINED DEFINER=`database_name`@`%` SQL SECURITY DEFINER VIEW `MyView` AS
set @i = 0;
select @i:=@i+1 as `id`
...
但这在视图中不起作用。
答案 0 :(得分:12)
答案 1 :(得分:6)
我知道这个问题很老,但是如果其他人遇到这个问题,还有另一种选择。
重要提示:只要自动增量不是很重要,此备选方案就有效,因此您只需要视图行的唯一标识符:
您可以使用UUID()函数,该函数为您提供唯一的字母数字标识符。查看mysql-reference-manual
上的文档因此你可以创建一个这样的视图:
Create view my-view AS
Select UUID() as 'id', t.name, t.value
from table t
....
答案 2 :(得分:1)
试试这个,
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
)
在wp_postmeta TABLE中的WordPress meta_id = AUTO_INCREMENT中,我为此创建一个VIEW,其中view_id的行为类似于DESC顺序的AUTO_INCREMENT。
例如, 在 TABLE wp_postmeta - &gt; meta_id [3,5,6,10,2,11] 哪个会出现 在视图 view_wp_postmeta - &gt; view_id [6,5,4,3,2,1]
答案 3 :(得分:1)
尝试一下
create view view_st as
select row_number() over (order by column_st) id, column_st
from table_st;
答案 4 :(得分:0)
我一直在寻找与您相同的东西,但得出的结论是,我正在寻找的是一种唯一稳定地识别视图中记录的方法。
我的用例是“银行操作”视图,其中涉及将“存款”表中的记录与“取款”表中的记录合并,如最佳做法所建议的那样,每个记录都包含一个自动数字id列。 / p>
所以,我有两种操作类型
如果我认为以1开头的每一行都是存款,而以2开头的那一行是提款,则我认为在这种情况下有效。因此,要同时连接这两个变量,最好在操作类型本身上添加一些零,因此1变为10000000(如果您添加7个0),并假定此提款具有一个自动数字ID,例如33。
然后您去:10000000 + 33 = 10000033 因此,如果碰巧您有一个ID为33的提款记录,则该记录不应与我们的存款发生冲突(只要我们添加了足够的0,因为它的结果将是:20000033。)
知道了吗?好的,现在运行:
DELIMITER $$
CREATE FUNCTION renderVirtualId(part1 INT, part2 INT, len INT) RETURNS bigint(20) unsigned
NO SQL
BEGIN
return part1*POW(10,len)+part2;
end$$
DELIMITER;
然后您像这样编译视图:
CREATE OR REPLACE VIEW v_balance AS
SELECT renderVirtualId(1,id,10) as id,amount,account,datetime FROM deposits
UNION
SELECT renderVirtualId(2,id,10) as id,-amount,account,datetime FROM withdrawals
ORDER BY datetime DESC
希望您喜欢它。我确实做到了。
答案 5 :(得分:0)
这有效:
SET @autoIncrementNumber = 0;
SELECT @autoIncrementNumber:=@autoIncrementNumber + 1 AS Num, columnName FROM 视图名称 限制 0,8;