各个数据库的索引、表结构、外键等sql记录
mysql
索引:
索引类型:
FULLTEXT 全文索引
NORMAL 普通索引
SPATIAL 空间索引
UNIQUE 唯一索引
默认的索引类型是 NORMAL
默认的索引方法是 BTREE
语句:ALTER TABLE `表名` ADD 索引类型 INDEX `索引名称`(`字段名`, `字段名`) USING 索引方法;
例子:ALTER TABLE `ttt` ADD NORMAL INDEX `name_`(`aa`, `bb`) USING BTREE;
删除:ALTER TABLE `数据库名`.`表名` DROP INDEX `索引名称`;
获取索引信息sql
SELECT t.table_schema , t.table_name , t.index_name , t.index_type , t.column_name as column_name , t.index_comment
FROM information_schema.statistics
t
where t.table_schema = "lowcode" # 数据库
and t.table_name = "test_table1" # 表名
and t.index_name != "PRIMARY"
order by t.index_name , t.seq_in_index asc
索引名称=t.index_name
索引类型=t.index_type
索引方法=t.index_type
字段名称=t.column_name
备注信息=t.index_comment
获取视图列表SQL
select table_schema #数据库名 , table_name #视图名称 , view_definition #执行SQL from information_schema.views
显示数据库列表
show databases;
外键:
删除策略 修改策略 默认是:cascade
1.cascade:在父表上 update / delete记录时,同步 update / delete掉子表的匹配记录
2.No action:如果子表中有匹配的记录, 则不允许对父表对应候选键进行update / delete操作
3.Restrict:同 no action, 都是立即检查外键约束
4.set null:在父表上 update / delete记录时,将子表上匹配记录的列设为 null要注意子表的外键列不能为 not null
5.default:父表有变更时, 子表将外键列设置成一个默认的值但Innodb不能识别
语句:ALTER TABLE `表名` ADD CONSTRAINT `外键名称` FOREIGN KEY (`字段名`,`字段名`) REFERENCES `被关联表名` (`字段名`,'字段名') ON DELETE 删除策略 ON UPDATE 修改策略;
例子:ALTER TABLE `ttt` ADD CONSTRAINT `asas` FOREIGN KEY (`aa`) REFERENCES `mdl_table` (`table_id`) ON DELETE CASCADE ON UPDATE CASCADE;
删除:ALTER TABLE `数据库名`.`表名` DROP FOREIGN KEY `外键名称`;
获取外键信息sql
select t.constraint_name , u.column_name , u.referenced_table_name , u.referenced_column_name , t.update_rule , t.delete_rule
from information_schema.referential_constraints t
join information_schema.key_column_usage u on u.constraint_schema = t.constraint_schema and t.table_name = u.table_name
where t.constraint_schema = "lowcode" #数据库名
and t.table_name = "test_table" #表名
and u.constraint_name != "PRIMARY" #去除外键限制
外键名称 = t.constraint_name
外键关联字段 = u.column_name
外键关联主表名 = u.referenced_table_name
外键关联主表字段 = u.referenced_column_name
修改策略 = t.update_rule
删除策略 = t.delete_rule
备注信息 = 无
Postgresql 索引名称在数据库中必须唯一
索引:
索引类型:
B-Tree B树索引
Hash 哈希索引
GIN 反向索引
默认的索引类型是 B-Tree
语句:CREATE INDEX "索引名称" ON "表名" USING (索引类型,如:B-Tree 就是 btree SP-GiST 就是 spgist) ( id );
例子:CREATE INDEX "asd" ON "123test" USING btree ( id );
删除:DROP INDEX "索引名称";
获取索引信息sql
select
A.SCHEMANAME,
A.TABLENAME,
A.INDEXNAME,
A.TABLESPACE,
A.INDEXDEF,
B.AMNAME,
C.INDEXRELID,
C.INDNATTS,
C.INDISUNIQUE,
C.INDISPRIMARY,
C.INDISCLUSTERED,
D.DESCRIPTION ,
at.attname
from
PG_AM B
left join PG_CLASS F on B.OID = F.RELAM
left join PG_STAT_ALL_INDEXES E on F.OID = E.INDEXRELID
left join PG_INDEX C on E.INDEXRELID = C.INDEXRELID
left join PG_DESCRIPTION D on C.INDEXRELID = D.OBJOID
left join pg_attribute at on at.attrelid = E.relid and at.attnum = ANY(C.indkey)
, PG_INDEXES A
where A.SCHEMANAME = E.SCHEMANAME
and A.TABLENAME = E.RELNAME
and A.INDEXNAME = E.INDEXRELNAME
and C.INDISPRIMARY = 'f' #不查主键索引
and E.SCHEMANAME = 'public' #数据库名
and E.RELNAME = 'testTable' #表名
索引名称=t.INDEXNAME
索引类型=t.AMNAME
索引方法=t.AMNAME
字段名称=at.attname
备注信息=D.DESCRIPTION
获取视图列表SQL
SELECT viewname FROM pg_views WHERE schemaname ='public'
显示数据库列表
select datname from pg_database;
外键:
删除策略 修改策略 默认是:cascade
restrict(约束):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。
no action:意思同restrict.
cascade(级联):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。
set null:当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
注:NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。
语句:ALTER TABLE "表名" ADD CONSTRAINT "名称" FOREIGN KEY ("当前表字段名称") REFERENCES "关联的数据库名"."关联的表名" ("关联字段") ON DELETE 删除策略 ON UPDATE 修改策略;
例子:ALTER TABLE "123test" ADD CONSTRAINT "aaa" FOREIGN KEY ("id") REFERENCES "gz_ods_schema"."base_imgs" ("imgs_id") ON DELETE RESTRICT ON UPDATE RESTRICT;
删除:ALTER TABLE "表名" DROP CONSTRAINT "外键名称";
获取外键信息sql
SELECT c.conname ,
CASE c.contype
WHEN 'c' THEN 'CHECK'
WHEN 'f' THEN 'FOREIGN KEY'
WHEN 'p' THEN 'PRIMARY KEY'
WHEN 'u' THEN 'UNIQUE'
END AS "constraint_type",
CASE WHEN c.condeferrable = 'f' THEN 0 ELSE 1 END AS is_deferrable,
CASE WHEN c.condeferred = 'f' THEN 0 ELSE 1 END AS is_deferred,
t.relname AS table_name,
array_to_string(c.conkey, ' ') AS constraint_key,
CASE confupdtype
WHEN 'a' THEN 'NO ACTION'
WHEN 'r' THEN 'RESTRICT'
WHEN 'c' THEN 'CASCADE'
WHEN 'n' THEN 'SET NULL'
WHEN 'd' THEN 'SET DEFAULT'
END AS on_update,
CASE confdeltype
WHEN 'a' THEN 'NO ACTION'
WHEN 'r' THEN 'RESTRICT'
WHEN 'c' THEN 'CASCADE'
WHEN 'n' THEN 'SET NULL'
WHEN 'd' THEN 'SET DEFAULT'
END AS on_delete,
CASE confmatchtype
WHEN 'u' THEN 'UNSPECIFIED'
WHEN 'f' THEN 'FULL'
WHEN 'p' THEN 'PARTIAL'
END AS match_type,
t2.relname ,
array_to_string(c.confkey, ' ') AS fk_constraint_key ,
a.attname ,
aa.attname ,
d.description
FROM pg_constraint c
LEFT JOIN pg_class t ON c.conrelid = t.oid
LEFT JOIN pg_class t2 ON c.confrelid = t2.oid
LEFT JOIN pg_attribute a ON a.attrelid = c.conindid and a.attnum = ANY(c.conkey)
LEFT JOIN pg_attribute aa ON aa.attrelid = c.confrelid and aa.attnum = ANY(c.confkey)
left join PG_DESCRIPTION d on c.oid = d.OBJOID
join pg_namespace sp on sp.oid = t.relnamespace
WHERE c.contype != 'p'
and t.relname = 'testTable'
and sp.nspname = 'public'
外键名称 = c.conname
外键关联字段 = a.attname
外键关联主表名 = t2.relname
外键关联主表字段 = aa.attname
修改策略 = on_update
删除策略 = on_delete
备注信息 = d.description
oracle 索引名称在数据库中必须唯一
索引:
索引类型:
Normal 普通索引
Unique 唯一索引
Bitmap 位图索引
默认的索引类型是 Normal
语句:CREATE 索引类型(如果索引类型是:Normal 不需要写索引类型,就是 CREATE INDEX 开头) INDEX "索引名称" ON "表名" ("字段名称", "字段名称")
例子:CREATE Unique INDEX "index" ON "TABLE_6" ("ID", "NAME")
删除:DROP INDEX "索引名称"
获取索引信息sql
select i.table_owner , i.table_name , i.index_name , i.index_type , u.column_name
from user_indexes i
join user_ind_columns u on u.index_name = i.index_name
where i.table_owner = 'TEST'
and i.table_name = 'testTable'
and i.index_name not like 'PK_%'
索引名称=i.index_name
索引类型=i.index_type
索引方法=i.index_type
字段名称=u.column_name
备注信息=无
获取数据库视图Sql
select * from user_views
VIEW_NAME 视图名称
TEXT 视图执行SQL
显示数据库列表
SELECT username FROM dba_users
外键:
删除策略 默认是:cascade
CASCADE:当主表的记录删除时,我们可以跟随主表删除记录(ON DELETE CASCADE)
SET NULL:或者相应字段设置为空(ON DELETE SET NULL)、注意,从表字段必须允许为NULL
语句:ALTER TABLE "数据库名"."表名" ADD CONSTRAINT "外键名称" FOREIGN KEY ("字段名") REFERENCES "被关联数据库名"."被关联表名" ("字段名") ON DELETE 删除策略
例子:ALTER TABLE "TEST"."AAA" ADD CONSTRAINT "aa" FOREIGN KEY ("qqq") REFERENCES "TEST"."TABLE_6" ("ID") ON DELETE CASCADE
删除:ALTER TABLE "数据库名"."表名" DROP CONSTRAINT "外键名称"
获取外键信息sql
select c.constraint_name , c.delete_rule , uc.table_name , uc.column_name , ucc.table_name , ucc.column_name
from user_constraints c
join user_cons_columns uc on uc.owner = c.owner and uc.table_name = c.table_name and uc.constraint_name = c.constraint_name
join user_cons_columns ucc on uc.owner = c.owner and ucc.constraint_name = c.r_constraint_name
where c.owner = 'TEST' #数据库名
and c.table_name = 'testTable' #表名
and c.constraint_type != 'P' #去除主键索引
外键名称 = c.constraint_name
外键关联字段 = uc.column_name
外键关联主表名 = ucc.table_name
外键关联主表字段 = ucc.column_name
修改策略 = 无
删除策略 = c.delete_rule
备注信息 = 无
sqlserver
索引:
索引类型:
唯一索引(UNIQUE) 唯一索引不允许两行具有相同的索引值
聚集索引(CLUSTERED) 表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
非聚集索引(NONCLUSTERED)非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
默认的索引类型就是不指定索引类型 create index 开头即可
语句:CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name ON table_name (column_name…)
例子:create index ix_com_Employee_IDName on Employee (ID,Name) ;
删除:drop index 索引名称 on "数据库名"."表名"
获取索引信息sql
SELECT
OBJECT_SCHEMA_NAME( sysi.object_id ) AS 'schema',
sysi.name AS '索引名称',
syst.name AS '表名',
sysc.name AS '列名',
sysi.type_desc AS '索引类型',
sysi.is_unique AS '索引是否要求唯一',
sysc.is_nullable AS '索引是否允许为空',
sysi.is_primary_key AS '是否是主键约束',
sysi.is_unique_constraint AS '是否是唯一约束' ,
ep.value
from sys.indexes sysi
left join sys.key_constraints sysk on sysi.object_id=sysk.parent_object_id and sysi.name=sysk.name
left join sys.index_columns sysic on sysi.object_id=sysic.object_id and sysi.index_id=sysic.index_id
left join sys.tables syst on sysi.object_id=syst.object_id
left join sys.columns sysc on sysi.object_id=sysc.object_id and sysic.column_id=sysc.column_id
left join sys.extended_properties ep on ep.major_id = sysi.object_id and ep.minor_id = sysi.index_id and ep.class_desc = 'INDEX'
WHERE sysi.object_id = OBJECT_ID( 'testTable' ) #表名
and sysi.is_primary_key = 0
索引名称=sysi.name
索引类型=sysi.type_desc
索引方法=sysi.type_desc
字段名称=sysc.name
备注信息=ep.value
获取数据库视图Sql
select v.name , c.text
from sys.VIEWS v
join sys.syscomments c on c.id = v.OBJECT_ID
显示数据库列表
select [name] from [sysdatabases] order by [name]
外键:
删除策略 修改策略 默认是:cascade
restrict(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
no action:意思同restrict.即如果存在从数据,不允许删除主数据。
cascade(级联):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
set null:当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)
例子:ALTER TABLE table1 ADD constraint fkname FOREIGN KEY (tid) REFERENCES table2(id)
语句:ALTER TABLE 子表 ADD CONSTRAINT 外键名 FOREIGN KEY (关联字段) REFERENCES 主表(被关联的字段) on delete cascade on update restrict;
删除:alter table 表名 drop constraint 外键名称
获取外键信息sql
SELECT
f.name AS foreign_key_name,
OBJECT_NAME( f.parent_object_id ) AS table_name,
COL_NAME( fc.parent_object_id, fc.parent_column_id ) AS constraint_column_name,
OBJECT_NAME( f.referenced_object_id ) AS referenced_object,
COL_NAME( fc.referenced_object_id, fc.referenced_column_id ) AS referenced_column_name,
f.is_disabled,
f.delete_referential_action_desc,
f.update_referential_action_desc ,
ep.value
FROM
sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.object_id = fc.constraint_object_id
left join sys.extended_properties ep on ep.major_id = f.object_id and ep.class_desc = 'OBJECT_OR_COLUMN'
WHERE f.parent_object_id = OBJECT_ID( 'testTable' ); #表名
外键名称 = f.name
外键关联字段 = constraint_column_name
外键关联主表名 = referenced_object
外键关联主表字段 = referenced_column_name
修改策略 = f.update_referential_action_desc
删除策略 = f.delete_referential_action_desc
备注信息 = ep.value
dm 索引名称在数据库中必须唯一
索引:
索引类型:
unique 唯一索引
cluster 聚集索引
默认的索引类型就是不指定索引类型 create index 开头即可
语句:create [index , [unique,cluster] ] "索引名称" on "表名"("字段名","字段名") ;
例子:create index "index" on "TABLE_1"("COLUMN_1") ;
删除:drop index "索引名称";
获取索引信息sql
select i.index_name , i.index_type , u.column_name
from user_indexes i
join user_ind_columns u on u.index_name = i.index_name
where i.table_owner = 'COST' #数据库名
and i.table_name = 'testTable' #表名
and i.index_name not like 'INDEX%'
索引名称=i.index_name
索引类型=i.index_type
索引方法=i.index_type
字段名称=u.column_name
备注信息=无
获取数据库视图Sql
select VIEW_NAME,TEXT from user_views
VIEW_NAME 视图名称
TEXT 视图执行SQL
显示数据库列表
SELECT username FROM dba_users
外键:
删除策略 修改策略 默认是:cascade
ON DELETE
restrict(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
no action:意思同restrict.即如果存在从数据,不允许删除主数据。
cascade(级联):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
set null:当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)
ON UPDATE
restrict(约束):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。
no action:意思同restrict.
cascade(级联):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。
set null:当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
注:NO ACTION 和 RESTRICT 的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。
例子:alter table "测试DBA"."TABLE_1" add constraint waijian foreign key("COLUMN_1") references "COST_CENTER"."SC_ZFCS"("ID") on update cascade on delete cascade;
语句:alter table "数据库名"."表名" add constraint 外键名称 foreign key("字段名","字段名") references "关联的数据库名"."关联的表名"("关联字段") on update 修改策略 on delete 删除策略;
删除:alter table "数据库名"."表名" drop constraint "外键名称";
获取外键信息sql
select c.constraint_name , c.delete_rule , uc.table_name , uc.column_name , ucc.table_name , ucc.column_name
from user_constraints c
join user_cons_columns uc on uc.owner = c.owner and uc.table_name = c.table_name and uc.constraint_name = c.constraint_name
join user_cons_columns ucc on uc.owner = c.owner and ucc.constraint_name = c.r_constraint_name
where c.owner = 'COST' #数据库名
and c.table_name = 'testTable' #表名
and c.constraint_type != 'P' #去除主键索引
外键名称 = c.constraint_name
外键关联字段 = uc.column_name
外键关联主表名 = ucc.table_name
外键关联主表字段 = ucc.column_name
修改策略 = 无
删除策略 = c.delete_rule
备注信息 = 无
创建数据库:CREATE DATABASE cssad
CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
删除数据库:DROP DATABASE IF EXISTS 数据库名
caching_sha2_password
创建用户:CREATE USER test
@ IDENTIFIED WITH mysql_native_password BY '123456'; test=用户名 123456=密码 授权用户权限:GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Grant Option, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `demo`.* TO `test`@
; test=用户名 demo=授权数据库
删除用户:drop user if exists '用户信息'@''