我有一个应用程序,它使用Hibernate来支持Oracle和MySQL数据库。更新之后,我必须手动删除包含索引/约束的一些列。这些索引已经Hibernate生成了随机名称。
在Oracle中,我可以这样做:
ALTER TABLE table_name DROP (column_name) CASCADE CONSTRAINTS;
不幸的是,这对于MySQL来说是不可能的。有可能做这种事吗
DROP INDEX (SELECT Key_name FROM (SHOW INDEX FROM table_name WHERE Column_name = 'column_name'
我知道MySQL实用程序名为。但是我可以通过SQL查询找到重复的索引吗?我试过这个,但想找个更好的主意或者改进
SELECT DISTINCT
TABLE_NAME,
COLUMN_NAME,
GROUP_CONCAT(DISTINCT INDEX_NAME)
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'db_name'
AND INDEX_NAME NOT IN ('PRIMARY')
GROUP BY COLUMN_NAME
HAVING count(DISTIN
我正在处理一个拥有大约300个表的数据库,我正在寻找一种方法来查找所有没有索引的表(不包括主表)。理想情况下,我希望返回一个结果集,它给出了每个表的索引数。--我使用了这样的查询:
SELECT
table_name, column_name, index_name, count(table_name) as index_count
FROM
information_schema.statistics
WHERE
index_name != 'primary'
AND
table_schema = 'your_database'
GR
我想知道在PostgreSQL和Oracle中禁用/启用的索引的列表。有人能给我推荐这个问题吗?
我对SQL Server的查询如下所示
SELECT *
FROM sys.indexes I
INNER JOIN sys.tables T ON I.object_id = T.object_id
WHERE I.type_desc = 'NONCLUSTERED'
AND I.name IS NOT NULL
AND I.is_disabled = 1`
我正在为PostgreSQL和甲骨文寻找类似的查询。
我刚报名,希望这是有意义的。
总之,我想测试某一列是否有索引,如果有,则删除索引。我希望通过将索引名传递给DROP语句来确定是否可以做到这一点。
首先,FYI表名是'Account‘,列名是'ID’。
为了测试索引是否存在,我使用以下方法(不要认为我是个天才,我从这里得到了SELECT语句):
IF EXISTS
(SELECT
sysindex.name AS IndexName
FROM
sys.indexes AS SysIndex
INNER JOIN sys.index_columns AS SysIndexCol ON SysIndex
我想使用游标从表中获取所有现有的索引(Bitmap Index Joins)并删除它们。好的,反过来,如果和索引不存在,创建它们。
到目前为止,我使用的是一个过程:
DECLARE
COUNT_INDEXES INTEGER;
BEGIN
SELECT COUNT(*)
INTO COUNT_INDEXES
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDXNAME' ;
IF COUNT_INDEXES > 0 THEN
EXECUTE IMMEDIATE 'DROP INDEX IDXNAME&
全, SQL> SELECT 1 FROM all_indexes WHERE table_name = UPPER( 'abcatcol' ) AND index_name = UPPER( 'abcatcol_tnam_ownr_cnam' );
no rows selected
SQL> CREATE INDEX abcatcol_tnam_ownr_cnam ON abcatcol(abc_tnam, abc_ownr, abc_cnam);
CREATE INDEX abcatcol_tnam_ownr_cnam ON abcatco
我们系统的自动数据库迁移过程包括运行包含新表定义及其附带索引的.sql脚本。
只有当这些表和索引还不存在时,我才需要创建它们的能力。表是通过使用IF NOT EXISTS来处理的,但是在创建索引时不存在这样的语法。
我曾尝试编写一个存储过程,如下所示,但这可能会失败,因为您无法从show语句中进行选择。
DELIMITER $$
DROP PROCEDURE IF EXISTS csi_add_index $$
CREATE PROCEDURE csi_add_index(in theTable varchar(128), in theIndexName varchar(128), in th
我想删除所有与模式相关的对象,这可以通过下面的查询来实现:
USER_SCHM_NAME=Employee
$ORACLE_HOME/bin/sqlplus -s / as sysdba <<EOF >>$ORA_ERR
set feedback off
set echo off
set trimspool on
set termout off
set serveroutput on size 100000 format wrapped
set lines 500
set pages 0
spool /tmp/drop_obj_$ORACLE_SID_$DATE2.s
我有一个位置mysql db包含3列
Country State City
US California Los Angeles
AU Queensland Brisbane
AU Victoria Southbank
AU Queensland Brisbane
如何删除mysql查询中重复的行?
DELETE FROM location WHERE country IN (
SELECT * FROM table_name
GROUP BY
给定一个具有两个唯一索引的表,如下所示,如何确定哪个唯一索引对应于主键,而不是该表上的其他唯一索引?
user_indexes和user_ind_columns似乎没有携带这些信息。谢谢,-DD
PS:当然,没有显式地命名索引和使用命名约定。
SQL> create table tt (id number not null primary key, name varchar2(64 char) not null unique, info varchar2(4000));
SQL> create index tt_idx on tt(info);
SQL> select I
我希望获得PostgreSQL中特定数据库的所有唯一索引(用于唯一列组合)的列表。我搜索了,但找不到这个查询。
我发现了这两个问题。
SELECT indexname FROM pg_indexes;
SELECT * from pg_indexes where schemaname = 'public';
但这两个都不适合我的需要。我只需要那些标识唯一列的索引的索引。谢谢。