查询mysql表结构

阅读次数: 2,814

  • A+
所属分类:MYSQL

show create table

show create table 表名称

这也是我每次下意识想到的语句。语义好记,可以直接查看建表语句,但不便于代码处理。

information_schema.COLUMNS

select * from information_schema.COLUMNS where TABLE_SCHEMA = '库名称' and TABLE_NAME = '表名称'

相对show create table而言,相对简单,信息全面,可以查询出来字段的名称、类型、键、权限、注释和其他信息。为了获取字段名称,故我脚本中使用这个作为获取表结构的方法。

desc

desc 表名称

简单易用,可以获取到 COLUMNS 中的比较重要的字段:名称、类型、是否为空、键、默认值、额外信息。但无法获取字段的注释。

附:information_schema.COLUMNS字段和含义

字段名称含义
TABLE_CATALOG表类型(区分不同大仓的意思)
TABLE_SCHEMA所属库名称
TABLE_NAME表名称
COLUMN_NAME字段名称
ORDINAL_POSITION位置序号
COLUMN_DEFAULT默认值
IS_NULLABLE是否可为空
DATA_TYPE数据类型
CHARACTER_MAXIMUM_LENGTH字符串最大长度
(数值类型为空)
CHARACTER_OCTET_LENGTH字符串最大存储长度
(一般与上一字段相同)
NUMERIC_PRECISION数值精度
(非数值类型为空)
NUMERIC_SCALE数值小数位数
(非数值类型为空)
DATETIME_PRECISION日期精度
CHARACTER_SET_NAME编码方式
COLLATION_NAME排序方式
COLUMN_TYPE字段类型
COLUMN_KEY字段涉及的key
(主键、唯一键等)
EXTRA其他(如 auto_increment)
PRIVILEGES权限
COLUMN_COMMENT字段注释
GENERATION_EXPRESSION代表达式(自定义)

附:

所谓组合字段(自创的名字,没有在网上找到通用的名字),是MySQL5.7加入的新功能,可以定义一个字段,值是其他字段值的组合。

官网中举了一个勾股定理的例子:

CREATE TABLE triangle (
 
 sidea DOUBLE,
 
 sideb DOUBLE,
 
 sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb))
 
);
 
INSERT INTO triangle (sidea, sideb) VALUES(1,1),(3,4),(6,8);

INSERT INTO triangle (sidea, sideb) VALUES(1,1),(3,4),(6,8);
这个例子的意思是说sidec字段的值是sidea和sideb字段值的平方和再开方,在insert该表数据的时候可以不指定sidec的值,MySQL会自己计算。

这种组合字段有两种形式,Virtual Generated Column与Stored Generated Column,可以理解为虚拟组合列和存储组合列,Virtual Generated Column的数值不会存放在磁盘上,比较省空间,就是效率不高,如果需要查询建议加索引。

默认是Virtual Generated Column,如果要设置Stored Generated Column,需要在建表语句加上STORED关键字:

CREATE TABLE triangle (
 
 sidea DOUBLE,
 
 sideb DOUBLE,
 
 sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb) STORED)
 
);

字段设置为组合字段之后,如果数据库操作出现明显的逻辑错误,操作将被阻止,比如:

情况1:

把字段C设置为字段A除以字段B,然后试图insert一条字段A是1,字段B是0的数据,MySQL会提示错误。

情况2:

把字段C设置为字段A除以字段B,并把字段B设置为varchar类型。

建表可以成功。

insert一条字段A为1,字段B为2的数据,可以成功。

insert一条字段A为1,字段B为abc的数据,MySQL会提示错误。

以上可以看到,除非遇见MySQL实在解决不了的问题,多数数据库操作还是可以被允许的。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: