oracle中列的unique是通过constraint(约束)来完成,所以要取消某个列的unique,就应该把相对应的constraint drop 掉。通常在建表的时候,用户只是指定某个列unique而省略了constraint的名字,所以oracle会自动给这个constraint命名。-- 建立测试表,col1为unique
SQL> CREATE TABLE tbl_test(col1 VARCHAR2(10) UNIQUE);
Table created.-- 查找数据字典,找到oracle给该unique列所建constraint的命名
SQL> SELECT x.constraint_name, y.column_name
2 FROM user_constraints x, user_cons_columns y
3 WHERE x.owner = y.owner
4 AND x.table_name = y.table_name
5 AND x.constraint_name = y.constraint_name
6 AND x.table_name = 'TBL_TEST'
7 AND constraint_type = 'U';
CONSTRAINT_NAME
------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
SYS_C0081522
COL1-- 根据查到的constraint 名,drop掉该constaint就可以
SQL> ALTER TABLE tbl_test DROP CONSTRAINT SYS_C0081522;
Table altered.
SQL> CREATE TABLE tbl_test(col1 VARCHAR2(10) UNIQUE);
Table created.-- 查找数据字典,找到oracle给该unique列所建constraint的命名
SQL> SELECT x.constraint_name, y.column_name
2 FROM user_constraints x, user_cons_columns y
3 WHERE x.owner = y.owner
4 AND x.table_name = y.table_name
5 AND x.constraint_name = y.constraint_name
6 AND x.table_name = 'TBL_TEST'
7 AND constraint_type = 'U';
CONSTRAINT_NAME
------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
SYS_C0081522
COL1-- 根据查到的constraint 名,drop掉该constaint就可以
SQL> ALTER TABLE tbl_test DROP CONSTRAINT SYS_C0081522;
Table altered.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货