查询数据库表字段属性

3 篇文章 0 订阅
1 篇文章 0 订阅

Mysql

SELECT  TABLE_SCHEMA dataBaseName					-- 库名
	   ,TABLE_NAME tableName 						-- 表名
       , COLUMN_NAME columnName						-- 列名
       , COLUMN_KEY  columnConstraint				-- 列限制 主键,唯一之类的
       , COLUMN_COMMENT columnComment				-- 列注释
       , DATA_TYPE columnType						-- 字段类型 varchar之类的
       , CHARACTER_MAXIMUM_LENGTH columnLength		-- 以字符为单位的最大长度
       , CHARACTER_OCTET_LENGTH columnOctetLength	-- 以字节为单位的最大长度
       , NUMERIC_PRECISION	columnNumberPrecision	-- 数字类型整数位长度
       , NUMERIC_SCALE  columnNumberScale			-- 数字小数位长度
       , COLUMN_DEFAULT columnDefault				-- 列的默认值
       , IS_NULLABLE columnIsNullable				-- 列是否可以为空 YES 是可以为空
FROM INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = database()
and TABLE_NAME = '{tableName}'

Oracle

SELECT 
	  a.USERNAME dataBaseName     				-- 库名
	, b.TABLE_NAME tableName					-- 表名
	, c.COLUMN_NAME columnName					-- 列名
	, e.CONSTRAINT_TYPE  columnConstraint		-- 主键,唯一之类的
	, f.COMMENTS columnComment					-- 列注释
	, c.DATA_TYPE columnType					-- 字段类型 varchar之类的
	, c.DATA_LENGTH columnLength				-- 以字符为单位的最大长度
	, -1 columnOctetLength						-- 以字节为单位的最大长度
	, c.DATA_PRECISION 	columnNumberPrecision	-- 数字类型整数位长度
	, c.DATA_SCALE  columnNumberScale			-- 数字小数位长度
	, c.DATA_DEFAULT columnDefault				-- 列的默认值
	, c.NULLABLE columnIsNullable				-- 列是否可以为空 YES 是可以为空
FROM  USER_USERS a
LEFT JOIN all_tables b ON a.USERNAME = b.OWNER 
LEFT JOIN user_tab_columns c ON b.TABLE_NAME = c.TABLE_NAME 
LEFT JOIN user_ind_columns d ON b.TABLE_NAME = d.TABLE_NAME 
LEFT JOIN user_constraints e ON b.TABLE_NAME = e.TABLE_NAME AND d.INDEX_NAME = e.INDEX_NAME 
LEFT JOIN all_col_comments f ON a.USERNAME = f.OWNER AND b.TABLE_NAME = f.TABLE_NAME AND c.COLUMN_NAME = f.COLUMN_NAME 
WHERE b.TABLE_NAME = '{tableName}'

SqlServer

SELECT	 A.name AS tableName
       , B.name AS columnName
  	   , isnull (D.value,B.name) AS columnComment
       , C.name AS columnType
FROM sys.tables A
INNER JOIN sys.columns B ON B.object_id = A.object_id
left join sys.types C ON B.system_type_id = C.system_type_id
LEFT JOIN sys.extended_properties D ON D.major_id = B.object_id AND D.minor_id = B.column_id
WHERE A.name = '{tableName}'

PostgreSql

select    a.relname tableName
		, b.attname columnName
		, COALESCE(c.description ,b.attname) columnComment
		, d.typname columnType
        from pg_class a
        left join pg_attribute b on a.oid = b.attrelid 
        left join pg_description c on b.attrelid  = c.objoid and b.attnum = c.objsubid 
        left join pg_type d on b.atttypid = d.oid
        where a.relname = '{tableName}'
        and b.attname not in ('gp_segment_id','tableoid','ctid','xmax','xmin','cmax','cmin')

Sqlite

	PRAGMA  table_info({tableName})

hive

desc {tableName}

深度解析

标准

select * from INFORMATION_SCHEMA.COLUMNS

我记得在一篇博客中看到过 这句sql是一个行业标准,我自己也有发现 在 sqlserver ,mysql ,postgresql 中都有支持,当然在mysql我认为是支持最好的,但是现在资料太少,等我慢慢整理,写在这里只是表示这是一个万金油语句,查询表字段的时候很多数据库都能支持的上的

Mysql

1 获取当前数据库

database()

Oracle

1、oracle 获取当前用户的详细信息

select * from USER_USERS 

查询出来的结果

1.1、oracle 获取当前模式(schema)

您可以简单理解为,schema 名 就是用户名 是一样的,每个模式代表一个用户

-- 查看所有schema 可以理解为查询所有的schema用户
select username from sys.dba_users;
-- (硬要查询的话应该就是下面的语句)根据当前用户查询schema
select a.USERNAME ,b.*
from USER_USERS a
LEFT JOIN  sys.dba_users b ON a.USER_ID = b.USER_ID ;

在这里插入图片描述

2、oracle获取当前用户的角色信息

SELECT * FROM USER_ROLE_PRIVS 

在这里插入图片描述

3、oracle获取当前用户的角色权限信息

SELECT * FROM ROLE_SYS_PRIVS

在这里插入图片描述

postgresql

在前面的语句中大家应该可以看到这个语句,因为我发现我在使用上面的语句获取表字段信息的时候发现会获取一些多余的字段,猜测应该是跟 Oracle 的rowid 一样的隐藏字段,可能在特殊的地方会有用处,但是我这里用不到,所以拿掉了,当然也可以使用上面的语句 标准

and b.attname not in ('gp_segment_id','tableoid','ctid','xmax','xmin','cmax','cmin')

SqlLite

目前获取字段名称方法我只找到这么一个,不过好消息是这个语句可以使用 sqlsugar 创建的数据库连接中直接调用,并返回结果
代码如下,自己的测试demo

public class program
    {
        public static void Main(string[] args)
        {
            string connect = "data source=C:\\Users\\Administrator\\AppData\\Local\\Packages\\cf906e41-910f-41ab-9cae-5a814460689d_9g7jfgbsde0p2\\LocalState\\sqlite.db";
            SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig
            {
                ConfigId = "A",
                ConnectionString = connect,
                DbType = SqlSugar.DbType.Sqlite
            });
            var dt = sqlSugarClient.Ado.GetDataTable("PRAGMA table_info(schedulework)");
            Console.WriteLine(dt.Rows.Count);
        }
    }

hive

hive 有一些查询表信息的命令,自己可以在控制台使用,但是无法使用上述的代码访问到具体信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值