mysql show full_MySQL SHOW FULL FIELDS FROM TABLE 语句的妙用

例如一个create table语句:

CREATE TABLE `t_user` (

`id` varchar(32) NOT NULL COMMENT '用户ID',

`user_name` varchar(64) NOT NULL COMMENT '用户姓名',

`password` varchar(64) NOT NULL COMMENT '登录密码',

`email` varchar(64) NOT NULL COMMENT '邮箱地址',

`mobile` varchar(64) NOT NULL DEFAULT '' COMMENT '手机号',

`address` varchar(512) NOT NULL DEFAULT '' COMMENT '地址',

`sex` tinyint(4) NOT NULL DEFAULT '0' COMMENT '性别,1-男、2-女、3-未知',

`status` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '状态:1、未转正;2、虚拟;4、转正;8、待离职;16、已离职',

`security_key` varchar(128) NOT NULL DEFAULT '' COMMENT '登陆安全校验码',

`ctime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '数据创建时间',

`mtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '记录最后一次修改的时间',

PRIMARY KEY (`id`),

KEY `idx_mobile` (`mobile`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';

表创建成功后,执行如下命令:SHOW FULL FIELDS FROM t_user

Field Type Collation Null Key Default Extra Privileges Comment

------------ ---------------- ------------------ ------ ------ ------- ------ ------------------------------- -----------------------------------------------------------------------------------

id varchar(32) utf8mb4_general_ci NO PRI (NULL) select,insert,update,references 用户ID

user_name varchar(64) utf8mb4_general_ci NO (NULL) select,insert,update,references 用户姓名

password varchar(64) utf8mb4_general_ci NO (NULL) select,insert,update,references 登录密码

email varchar(64) utf8mb4_general_ci NO (NULL) select,insert,update,references 邮箱地址

mobile varchar(64) utf8mb4_general_ci NO MUL select,insert,update,references 手机号

address varchar(512) utf8mb4_general_ci NO select,insert,update,references 地址

sex tinyint(4) (NULL) NO 0 select,insert,update,references 性别,1-男、2-女、3-未知

status int(10) unsigned (NULL) NO 1 select,insert,update,references 状态:1、未转正;2、虚拟;4、转正;8、待离职;16、已离职

security_key varchar(128) utf8mb4_general_ci NO select,insert,update,references 登陆安全校验码

ctime int(10) unsigned (NULL) NO 0 select,insert,update,references 数据创建时间

mtime int(10) unsigned (NULL) NO 0 select,insert,update,references 记录最后一次修改的时间

就是把表的结构当成表操作取出来,包括字段名、类型、备注等,执行这个sql语句能干什么呢?

一般,表创建后下一步是不是要写protobuf的message

或者写wiki

或者生成一些固定代码

如今通过SHOW FULL FIELDS FROM TABLE 可以轻轻松松自动化生成搞定一切。

比如写了个不到10行的php代码来生成markdown说明文档:

mysql_connect("localhost", "root", "123123") or

die("Could not connect: " . mysql_error());

mysql_select_db("test");

$result = mysql_query("SHOW FULL FIELDS FROM t_user");

echo "| 参数名称 | 类型 | 非空约束 | 备注说明|\n| ------ | ------ | ------ | ------ |\n";

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

echo "|{$row[0]}|{$row[1]}|{$row[3]}|{$row[8]}|\n";

}

mysql_free_result($result);

?>

最后直接输出:

| 参数名称 | 类型 | 非空约束 | 备注说明|

| ------ | ------ | ------ | ------ |

|id|varchar(32)|NO|用户ID|

|user_name|varchar(64)|NO|用户姓名|

|password|varchar(64)|NO|登录密码|

|email|varchar(64)|NO|邮箱地址|

|mobile|varchar(64)|NO|手机号|

|address|varchar(512)|NO|地址|

|sex|tinyint(4)|NO|性别,1-男、2-女、3-未知|

|status|int(10) unsigned|NO|状态:1、未转正;2、虚拟;4、转正;8、待离职;16、已离职|

|security_key|varchar(128)|NO|登陆安全校验码|

|ctime|int(10) unsigned|NO|数据创建时间|

|mtime|int(10) unsigned|NO|记录最后一次修改的时间|

复制到wiki上保存,惊喜出来了:参数名称类型非空约束备注说明idvarchar(32)NO用户IDuser_namevarchar(64)NO用户姓名passwordvarchar(64)NO登录密码emailvarchar(64)NO邮箱地址mobilevarchar(64)NO手机号addressvarchar(512)NO地址sextinyint(4)NO性别,1-男、2-女、3-未知statusint(10) unsignedNO状态:1、未转正;2、虚拟;4、转正;8、待离职;16、已离职security_keyvarchar(128)NO登陆安全校验码ctimeint(10) unsignedNO数据创建时间mtimeint(10) unsignedNO记录最后一次修改的时间

干净利落快捷一秒生成wiki,怎么一个爽字了得

总结

通过SHOW FULL FIELDS FROM TABLE 获取到了字段名、类型、注释要自动生成什么都是分分钟的事了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MySQL查询语句中,如果使用了GROUP BY子句,并且在SELECT子句中引用了非聚合列,会出现"ERROR 1140 (42000): In aggregated query without GROUP BY"错误,这是由于MySQL的默认设置是开启了ONLY_FULL_GROUP_BY模式,要避免此错误,可以采取以下几种方法。 1. 使用聚合函数:将所有的非聚合列都使用聚合函数进行处理,例如使用MAX()、MIN()、SUM()等函数。 2. 在SELECT子句中列出所有的非聚合列:将非聚合列都在SELECT子句中列出,作为GROUP BY子句的一部分。 3. 使用任意值函数:使用任意值函数如ANY_VALUE()可以欺骗MySQL,使其认为不需要严格的GROUP BY限制,但需要注意的是,这样做可能会导致在结果中随机返回值。 4. 修改SQL模式:可以通过修改MySQL的SQL模式来规避ONLY_FULL_GROUP_BY,可以通过以下命令来修改: SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 需要注意的是,修改SQL模式会影响全局的MySQL设置,可能对其他查询产生影响,所以在修改前请谨慎考虑。 总之,要规避ONLY_FULL_GROUP_BY错误,可以使用聚合函数、列出所有的非聚合列、使用任意值函数或修改SQL模式等方法。具体选择哪种方法要根据实际情况来决定。 ### 回答2: MySQL中的`ONLY_FULL_GROUP_BY`是一个SQL模式,用于控制GROUP BY查询的行为是否严格遵守标准。当启用`ONLY_FULL_GROUP_BY`模式时,任何SELECT语句中,SELECT列表中的非聚合列必须在GROUP BY子句中,或者作为聚合函数的参数。 为了规避`ONLY_FULL_GROUP_BY`,有以下几种方法: 1. 使用聚合函数:将非聚合列作为聚合函数的参数来解决。例如,使用`MAX()`、`MIN()`、`SUM()`等聚合函数对非聚合列进行聚合操作。 2. 使用子查询:将GROUP BY查询作为子查询,然后在外部查询中进行对非聚合的列的处理。例如,首先对数据进行GROUP BY操作,然后再在外部查询中使用聚合函数或其他方式对非聚合列进行处理。 3. 使用ANY_VALUE()函数:`ANY_VALUE()`函数可以允许非聚合的列出现在SELECT列表中,并避免`ONLY_FULL_GROUP_BY`错误。它返回一个组内某个非聚合列的任意值。 需要注意的是,根据业务需求和数据一致性,必须确保使用这些方法不会导致数据错误或不一致。因此,在使用这些方法之前,应仔细审查查询逻辑和数据的逻辑关系。另外,可以考虑将`ONLY_FULL_GROUP_BY`模式设置为严格模式,以确保查询的准确性和一致性。 ### 回答3: MySQL的"only_full_group_by"模式是在执行GROUP BY语句时的一个严格模式,要求SELECT语句中的列要么在GROUP BY子句中进行聚合,要么在SELECT列表中作为GROUP BY中的列。如果查询中出现了不符合该要求的列,MySQL会报错。 要规避"only_full_group_by"模式,可以使用以下方法: 1. 使用合适的聚合函数:将所有的非聚合列都替换为合适的聚合函数,如SUM、MAX、MIN、AVG等。这样就不需要在GROUP BY子句中进行聚合,也符合"only_full_group_by"模式的要求。 2. 使用任意值函数:可以使用任意值函数(如ANY_VALUE)来替代非聚合列。这样MySQL会随机选择一个值,作为非聚合列的值。虽然这样可能会导致结果不准确,但可以规避"only_full_group_by"模式。 3. 添加合理的GROUP BY子句:将所有的SELECT列表中的列都添加到GROUP BY子句中。这样可以确保每个非聚合列都在GROUP BY中,并符合"only_full_group_by"模式的要求。 需要注意的是,如果使用了上述方法规避了"only_full_group_by"模式,可能会导致查询结果不准确。所以在使用时需要根据具体的业务需求和数据特点来确定是否需要规避该模式,以及选择合适的方法进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值