一句话笔记-20221028

各数据库判断索引是否存在

MySQL

1
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'xxx';

当然,如果想要精确的确定某个列是否有某个类型的索引则需要用到另一个表:

1
2
3
4
5
6
7
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS A
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
ON C.CONSTRAINT_NAME = A.CONSTRAINT_NAME
WHERE A.TABLE_NAME = 'xxx'
AND C.COLUMN_NAME = 'id'
AND A.CONSTRAINT_TYPE = 'UNIQUE';

Oracle

同 MySQL 一样,也是使用到了元表:

1
2
3
4
5
6
7
SELECT *
FROM SYS.USER_CONSTRAINTS A
LEFT JOIN SYS.USER_CONS_COLUMNS B ON A.TABLE_NAME = B.TABLE_NAME AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
WHERE A.TABLE_NAME = 'XXX'
AND A.CONSTRAINT_TYPE = 'U'
AND B.COLUMN_NAME = 'ID'
AND A.OWNER = 'XXX_OWNER';

注意:SQL 为什么使用 SYS schema,是因为加了 SYS 以后刚好是 OceanBase Oracle 的 SQL。

OceanBase MySQL/Oracle

见前两者~


一句话笔记-20221028
https://blog.isnap.cn/posts/8d25d0c0/
作者
三岁于辛
发布于
2022年10月28日
许可协议