DB2 自增長列匯入、匯出測試

來源:互聯網
上載者:User

DB2 自增長列測試
1當想將表中一列修改為自動成長時,可用下面命令:
Alter table  <table name>  alter column <column name>  set not null
Alter table <table name> alter column <column name> set generated always as identity (start with 1,increment by 1)
上面命令是在改一表中列的屬性時,在網上找到的很有用。

2當修改表中一列自動成長的開始值時,可用下面的命令:
ALTER TABLE <talbe_name> ALTER COLUMN <column name> RESTART WITH 18;

測試:

CREATE TABLE customer_orders_t (
  order_id  INT NOT NULL  GENERATED ALWAYS AS IDENTITY
      (START WITH 1
        INCREMENT BY 1
        MINVALUE 1
        NO MAXVALUE
      NO CYCLE
      NO CACHE
      ORDER),
  order_date        DATE NOT NULL,
  cust_id          INT NOT NULL,
  product_id        INT NOT NULL,
  quantity          INT NOT NULL,
  price              DECIMAL(10,2)        NOT NULL,
  status            CHAR(9)        NOT NULL,
  PRIMARY KEY (order_date, order_id))


註:該列中的以及它本身的 IDENTITY 屬性並沒有保證所產生的序列值是唯一的。
但是, PRIMARY KEY 約束保證了表中行的唯一性。
為了確保只將自動產生的值插入識別欄位,他們指定了 GENERATED ALWAYS 子句。
使用最後一個產生的 order_id 來確定多少資料
選項 NO CACHE 和 ORDER 確保了在系統故障的情況下,不廢棄未使用的標識值。

 

測試1

 插入資料

insert into customer_orders_t values (default,current date,12,12,12,10.2,'2')

--成功


insert into customer_orders_t values (1,current date,12,12,12,10.2,'2')

-- 報錯  因為:IDENTITY欄位不允許指定值

--解決方案
 ALTER TABLE customer_orders_t
        ALTER COLUMN order_id
        SET GENERATED BY DEFAULT


--建立orders_seq對象
 CREATE SEQUENCE orders_seq
        AS INT
        START WITH 1
        INCREMENT BY 1
        MINVALUE 1
        NO MAXVALUE
  NO CYCLE
  NO CACHE
  ORDER


--插入資料
INSERT INTO customer_orders_t VALUES (NEXT VALUE FOR orders_seq, CURRENT DATE,12,12,12,10.2,'2')

 

1、命令列取sequence soc.nico_qian的下一個值:
 db2 "values next value for soc.nico_qian"

2、命令列重設sequence soc.nico_qian:
 db2 "alter sequence soc.nico_qian restart",重設後的值預設為建立SEQUENCE時的MINVALUE

3、命令列以指定值22重設sequence soc.nico_qian:
 db2 "alter sequence soc.nico_qian restart with 22"

4、命令列重設表KS.CHECK_CONDITION的IDENTITY欄位初始值為20:
 db2 "ALTER TABLE KS.CHECK_CONDITION ALTER COLUMN identity_column_name RESTART WITH 20"

5、如果sequence被以命令列的方式重設,那麼用到這個sequence的嵌入式C程式碼的綁定包
   的VALID欄位會被修改為N,那麼在下一次這個代碼被調用的時候,DB2會自動重新綁定
   此代碼的綁定包,這個動作會給應用程式帶來不可預知的後果,比如:如果這段代碼是在很
   頻繁的被用到的時間段內被重新綁定,那麼極易造成死結。
   同樣的問題會出現在IDENTITY欄位上。

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.