gpt4 book ai didi

sql - 有没有办法在 Vertica 中的现有表列上设置 AUTO_INCREMENT 属性?

转载 作者:行者123 更新时间:2023-12-05 00:26:10 33 4
gpt4 key购买 nike

假设我有一个简单的表:

CREATE TABLE user(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(32) NOT NULL,
)

有没有办法改变这个表 id会变成 AUTO_INCREMENT 字段吗?

我尝试了以下但没有运气:
  • ALTER TABLE(没有这样的语法)
  • 创建另一个具有自动增量 ID 的表,并从原始表复制数据(由于错误而无效:无法插入或更新 IDENTITY/AUTO_INCREMENT 列“id”)

  • 谢谢!

    最佳答案

    我会尝试只对行进行排名,并使用该序列进行 future 的插入。

    \set AUTOCOMMIT 'on'

    CREATE TABLE t1 (
    val char(1)
    );

    INSERT INTO t1 VALUES ('a');
    INSERT INTO t1 VALUES ('b');
    INSERT INTO t1 VALUES ('c');
    INSERT INTO t1 VALUES ('d');

    CREATE TABLE t2 (
    id int,
    val char(1)
    );

    INSERT INTO t2 (val, id)
    SELECT val, RANK() OVER (ORDER BY val) as id
    FROM t1;

    SELECT * FROM t2;

    我们得到:
     id | val----+-----  1 | a  3 | c  2 | b  4 | d

    Success!

    Let's prepare the table for future inserts:

    -- get the value to start sequence at
    SELECT MAX(id) FROM t2;

    -- create the sequence
    CREATE SEQUENCE seq1 START 5;

    -- syntax as of 6.1
    -- modify the column to add next value for future rows
    ALTER TABLE t2 ALTER COLUMN id SET DEFAULT NEXTVAL('seq1');

    快速测试:
    INSERT INTO t2 (val) VALUES ('e');
    INSERT INTO t2 (val) VALUES ('f');

    SELECT * FROM t2;

    我们得到:

    身份证 |值
    ----+-----
    4 | d
    2 |乙
    3 | C
    6 | F
    1 |一种
    5 |电子

    希望这可以帮助。

    关于sql - 有没有办法在 Vertica 中的现有表列上设置 AUTO_INCREMENT 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22741980/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com