今天一個一起搬磚的兄弟同事過來問,為什么他的索引刪不掉?我過去看了下:
執(zhí)行腳本:
drop index constraint_unique
報錯如下:
執(zhí)行時出錯 確認(rèn)要繼續(xù)執(zhí)行嗎?
單擊“詳細(xì)信息”了解詳情。
SQL錯誤碼: = 2BP01
ERROR: cannot drop index constraint_unique because constraint constraint_unique on table t1 requires it
Hint: You can drop constraint constraint_unique on table t1 instead.
行號: 19
報錯大意是:不能刪除索引constraint_unique因為約束constraint_unique在表t1上引用了它。
暗示:你可以刪除約束constraint_unique在表t1上來代替它。
于是我執(zhí)行drop constraint的語句,刪除成功。
alter table t1 drop CONSTRAINT constraint_unique;
究其原因,該索引并不是通過create index直接創(chuàng)建的,而是在創(chuàng)建唯一約束的時候順帶創(chuàng)建的。實(shí)驗發(fā)現(xiàn),openGauss在創(chuàng)建唯一約束的時候,同時會創(chuàng)建一個唯一索引,當(dāng)然在刪除唯一約束的同時,也會刪除掉創(chuàng)建唯一約束時附帶創(chuàng)建的唯一索引;
但是在創(chuàng)建唯一索引的時候,并不會同時顯式創(chuàng)建一個唯一約束。通過創(chuàng)建索引直接創(chuàng)建的索引,好像有點(diǎn)繞咔咔咔,則可以直接通過drop index的方式刪除。
再對比下創(chuàng)建唯一索引和唯一約束后,在插入重復(fù)數(shù)據(jù)時的區(qū)別:
- 唯一索引:插入重復(fù)數(shù)據(jù)時報錯,插入時也報唯一約束沖突
ERROR: duplicate key value violates unique constraint “idx_unique”
Detail: Key (c1)=(1) already exists.
- 唯一約束:
ERROR: duplicate key value violates unique constraint “constraint_unique”
Detail: Key (c1)=(1) already exists.
那么約束是否存在呢?我對于增加唯一約束的場景,嘗試執(zhí)行 drop constraint的操作,系統(tǒng)會報錯constraint不存在,這說明確實(shí)沒有創(chuàng)建約束。
執(zhí)行時出錯 確認(rèn)要繼續(xù)執(zhí)行嗎?
單擊“詳細(xì)信息”了解詳情。
SQL錯誤碼: = 42704
ERROR: constraint “idx_unique” of relation “test” does not exist
行號: 2文章來源:http://www.zghlxwxcb.cn/news/detail-405835.html
來自:如魚得水文章來源地址http://www.zghlxwxcb.cn/news/detail-405835.html
到了這里,關(guān)于openGauss中創(chuàng)建唯一索引和創(chuàng)建唯一約束的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!