程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2和Oracle中唯一約束和唯一索引對比

DB2和Oracle中唯一約束和唯一索引對比

編輯:DB2教程


DB2和Oracle中唯一約束和唯一索引對比   db2創建唯一性約束:  db2 => connect to sample 數據庫連接信息  數據庫服務器 = DB2/NT 10.1.0 SQL  授權標識 = ADMINIST... 本地數據庫別名 = SAMPLE  創建表db2admin.test,允許字段id為空。   www.2cto.com   從下面的過程可以看出,db2中的唯一性約束不允許列值為空。  db2 => create table db2admin.test(id int) DB20000I SQL 命令成功完成。  db2 => alter table db2admin.test add constraint unique_test_id  unique(id) DB21034E 該命令被當作 SQL 語句來處理, 因為它是無效的“命令行處理器”命令。   在 SQL 處理期間,它返回:  SQL0542N 名為 "ID" 的列不能是主鍵或者唯一鍵約束的列,因為它可以包含空值。  SQLSTATE=42831 db2 => alter table db2admin.test alter column  id set not null DB20000I SQL 命令成功完成。  www.2cto.com    db2 => alter table db2admin.test add constraint unique_ test_id unique(id) DB21034E 該命令被當作 SQL 語句來處理, 因為它是無效的“命令行處理器”命令。在 SQL 處理期間,它返回:  SQL0668N 不允許對表 "DB2ADMIN.TEST" 執行操作,原因碼為 "7"。    SQLSTATE=57016 db2 => reorg table db2admin.test DB20000I REORG 命令成功完成。  db2 => alter table db2admin.test add constraint unique_test_id  unique(id) DB20000I SQL 命令成功完成。 DB2創建唯一性索引,從下面過程可以看出, 唯一性索引允許字段為空,但是只允許有一個null值。 db2 => drop table db2admin.test DB20000I SQL 命令成功完成。  db2 => create table db2admin.test(id int) DB20000I SQL 命令成功完成。  db2 =>create unique index idx_test_id on db2admin.test(id) DB20000I SQL命令成功完成。  db2 => insert into db2admin.test values(null) DB20000I SQL 命令成功完成。  db2 => insert into db2admin.test values(null) DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的“命令行處理器”命令。   在 SQL 處理期間,它返回: SQL0803N INSERT 語句、UPDATE 語句或由 DELETE 語句導致的外鍵更新中的一個或多個值無效,因為由 "1" 標識的主鍵、唯一約束或者唯一索引將表 "DB2ADMIN.TEST" 的索引鍵限制為不能具有重復值。  SQLSTATE=23505 Oracle中唯一約束: 從下面測試過程來看,Oracle中唯一約束允許字段為空,並且Oracle會認為null值互不相等。   www.2cto.com   SQL> create table test(id number); 表已創建。  SQL> alter table test add constraint unique_test_id unique (id); 表已更改。  SQL> insert into test values(null); 已創建 1 行。  SQL> insert into test values(null); 已創建 1 行。  SQL> commit; 提交完成。    Oracle唯一索引: 從下面測試過程來看,Oracle中唯一約束也允許字段為空值, 並且Oracle會認為null值互不相等。  SQL> drop table test; 表已刪除。  SQL> create table test(id number); 表已創建。  SQL> create unique index idx_test_id on test(id); 索引已創建。  SQL> insert into test values(null); 已創建 1 行。  SQL> insert into test values(null); 已創建 1 行。  SQL> commit; 提交完成。  綜上,Oracle和DB2中唯一性約束和唯一索引的區別: database 唯一約束 唯一索引 Oracle 允許多個null 允許多個null DB2  不允許為null 允許最多一個null

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved