创建具有自动递增id列的mysql视图

c8ib6hqw  于 2021-06-18  发布在  Mysql
关注(0)|答案(5)|浏览(402)

我有一个mysql数据库,从中创建了一个视图。是否可以为视图中的每一行添加一个自动递增的id?
我试过了

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

但从一个Angular 看,这是行不通的。

p5fdfcr1

p5fdfcr11#

试试这个,

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\u postmeta表中的wordpress meta\u id=auto\u increment中,我为此创建了一个视图,其中视图id的行为类似于auto\u increment。
例如,在wp\u postmeta->meta\u id[3,5,6,10,2,11]表中,它将出现在view\u wp\u postmeta->view\u id[6,5,4,3,2,1]

zvms9eto

zvms9eto2#

抱歉-不能在视图中自动递增(但可以在存储过程中执行此操作)。
从mysql手册:
视图定义受以下限制:select语句不能引用系统或用户变量。

3pvhb19x

3pvhb19x3#

我知道这个问题由来已久,但万一别人遇到这个问题,还有另一个选择。
重要提示:只要autoincrement不是很重要,此选项就有效,因此您只需要视图行的唯一标识符:
可以使用uuid()函数,该函数为您提供唯一的字母数字标识符。查看mysql参考手册中的文档
因此,可以创建如下视图:

Create view my-view AS
Select UUID() as 'id', t.name, t.value
from table t
....
z8dt9xmd

z8dt9xmd4#

试试这个,

create view view_st as
select row_number() over (order by column_st) id, column_st 
from table_st;
doinxwow

doinxwow5#

我在寻找与您相同的,但得出的结论是,我正在寻找的是一种在视图中唯一和稳定地标识记录的方法。
我的用例是一个“银行操作”视图,它涉及将“存款”表中的记录与“取款”表中的记录合并在一起,每个记录都包含一个自动编号的id列,如最佳实践所示。
所以,我有两种手术方式
存款
撤回
如果在我看来,每一行以1开头是存款,如果以2开头是取款,我认为这是有效的。为了连接这两种类型,最好在操作类型本身中添加一些0,这样1就变成了10000000(如果添加70),并且假设这个取款有一个自动数字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

希望你喜欢。我真的做到了。

相关问题