【问题标题】:Python Teradata auto increment starts with a 6 digit number instead of 1?Python Teradata 自动增量以 6 位数字而不是 1 开头?
【发布时间】:2016-08-10 21:41:33
【问题描述】:

我想在 Teradata 中创建一个在 ID 列中使用自动增量的表。该代码有效,但我只是不知道为什么 ID 以 100001、100002.. 等开头,尽管声明了 start with 1 increment by 1

这是我的代码:

cur = connection.cursor()

创建表

create_stmt = """CREATE TABLE my_table,
                                NO FALLBACK,
                                NO BEFORE JOURNAL,
                                NO AFTER JOURNAL,
                                CHECKSUM = DEFAULT
                                ( 
                                 id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 NO CYCLE),
                                word VARCHAR(500) CHARACTER SET UNICODE, 
                                country VARCHAR(50) 
                                ) 
                                PRIMARY INDEX (id);"""
cur.execute(create_stmt)

插入表格

insert_stmt = """INSERT INTO my_table (word,country) VALUES(?,?);"""
mydata=("hello","USA")
my_query=cur.execute(insert_stmt,my_data)

全选测试

sel_all_stmt="sel * from my_table"
cur.execute(sel_all_stmt)
result = cur.fetchall()

我运行了几次插入语句,看看自动增量是什么样的,这就是我得到的:

[(100001, u'hello', u'USA'), (1, u'hello', u'USA'), (200001, u'hello', u'USA'), (400001, u'hello', u'USA'), (300001, u'hello', u'USA')]

知道为什么 id 这么长吗?

【问题讨论】:

    标签: python mysql teradata


    【解决方案1】:

    顺序处理违背了大规模并行 DBMS 的目的。

    Teradata 的 IDENTITY 不是单个序列,而是并行的多个序列(顺便说一句,符合标准 SQL):每个解析引擎 (PE) 和每个 AMP 请求一系列值并按顺序分配它们。因此,分配给 PE/AMP 中的行的编号是连续的,但不是跨 PE/AMP。

    More details can be found in the manuals.

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2015-02-09
      • 2013-10-27
      • 1970-01-01
      • 2023-03-22
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多