gpt4 book ai didi

primary-key - H2 相当于 Postgres `SERIAL` 或 `BIGSERIAL` 列?

转载 作者:行者123 更新时间:2023-12-04 00:39:07 26 4
gpt4 key购买 nike

Postgres , 用 SERIAL 定义一列/ BIGSERIAL 具有三重效果,如 discussed here :

  • 定义一个 int/bigint柱子。
  • 创建一个序列对象来生成自动递增的数字。
  • 设置列的默认值调用nextval()在序列上。

  • H2中是否有类似的快捷命令?获得这组相关的行为?

    如果不是,那么长版本的 SQL 是什么?

    最佳答案

    Where does the sequence live? How can you adjust its value or reset it?



    如果您将列创建为 auto_increment (或 identity )H2 在后台创建一个序列。该序列的名称可以通过查看 information_schema.columns 获得。 :
    create table foo 
    (
    id integer auto_increment,
    other_column varchar(20)
    );

    如果你然后运行:
    select column_name, column_default
    from information_schema.columns
    where table_name = 'FOO'
    and table_schema = 'PUBLIC';

    你会得到这样的东西:
    COLUMN_NAME  | COLUMN_DEFAULT                                                              
    -------------+-----------------------------------------------------------------------------
    ID | (NEXT VALUE FOR PUBLIC.SYSTEM_SEQUENCE_C1C36118_ED1C_44D6_B573_6C00C5923EAC)
    OTHER_COLUMN |

    您可以毫无问题地更改该顺序:
    alter sequence SYSTEM_SEQUENCE_C1C36118_ED1C_44D6_B573_6C00C5923EAC 
    restart with 42;

    这与 Postgres 的串行数据类型基本相同

    If not, what would the long version of the SQL be?


    create sequence foo_id_seq;

    create table foo
    (
    id integer default foo_id_seq.nextval,
    other_column varchar(20)
    );

    这与 Postgres 的巨大区别 serial是 H2 不知道序列“属于”列。删除表时需要手动删除它。
    foo_id_seq.nextval实际上会转换为 (NEXT VALUE FOR PUBLIC.FOO_ID_SEQ)创建表时(它将像这样存储在 information_schema.columns 中。

    关于primary-key - H2 相当于 Postgres `SERIAL` 或 `BIGSERIAL` 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36244641/

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