MySQL 8.0 之不可见列的基本操作


Posted in MySQL onMay 20, 2021

01 创建不可见列

创建不可见列:

CREATE TABLE `t2` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int DEFAULT NULL INVISIBLE,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

   可以看到,我们的SQL里面创建了一个表t2的字段有id、name和age,其中,age字段设置了不可见属性。

   当然,我们可以使用alter table的语法来创建一个不可见列,给t2表中,添加一个score的不可见字段

mysql> alter table t2  add  score int invisible;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

create table like 的语法能不能完美兼容invisible字段呢?答案是可以的。

mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int DEFAULT NULL /*!80023 INVISIBLE */,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql> create table t3 like t1;
Query OK, 0 rows affected (0.09 sec)

mysql> show create table t3\G
*************************** 1. row ***************************
Table: t3
Create Table: CREATE TABLE `t3` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int DEFAULT NULL /*!80023 INVISIBLE */,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

而create table as的语法,默认是不保留invisible列的,如果想保留这个列,请采用下面的方法:

02 不可见列基本操作

    我们创建一个t1的表,包含id、name、age3个字段,其中,age字段是invisible的,下面来看几个基本操作:

mysql> insert into t1 values (1,'zhangsan',10);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

mysql> insert into t1 (id,name,age) values (1,'zhangsan',10); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
+----+----------+
1 row in set (0.00 sec)

   首先我们往表t1中插入1条记录,它包含3个字段,发现报错,提示列的数量不对应;

    然后我们在插入的时候,补充对应的字段,则发现插入正常了。

    但是在使用select * 语法进行查询的时候,发现查询的结果中,只有id 和name两个列,对于age这个invisible的列,默认是不显示的。

     当然,我们可以显示使用select来查看这个列:

mysql> select id,name,age from t1;
+----+----------+------+
| id | name     | age  |
+----+----------+------+
|  1 | zhangsan |   10 |
+----+----------+------+
1 row in set (0.00 sec)

03 不可见列元信息

    可以通过information_schema来查看某个列是否是不可见列,或者desc + table_name 的命令也可以。如下:

HERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1';
+------------+-------------+-----------+
| TABLE_NAME | COLUMN_NAME | EXTRA     |
+------------+-------------+-----------+
| t1         | i           |           |
| t1         | j           |           |
| t1         | k           | INVISIBLE |
+------------+-------------+-----------+

mysql> desc test.t1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| age   | int         | YES  |     | NULL    | INVISIBLE      |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

04 用作主键id

   看下面这个例子,我们设置主键id为不可见列,这样我们将更多的精力放在表的数据内容相关的字段上,而不必去关心id列,将它隐藏起来:

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table t4 (id int not null auto_increment primary key invisible,name varchar(20),age int );
Query OK, 0 rows affected (0.07 sec)

mysql> insert into t4 values ('zhangsan',10),('lisi',15);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t4;
+----------+------+
| name     | age  |
+----------+------+
| zhangsan |   10 |
| lisi     |   15 |
+----------+------+
2 rows in set (0.00 sec)

   这种方法有一个很大的好处:假设业务设计的表没有主键,这种表结构DBA肯定不允许,那么DBA就可以在不修改业务逻辑的情况下,将主键设置成一个不可见列,来解决这个表的问题。

以上就是MySQL 8.0 之不可见列的基本操作的详细内容,更多关于MySQL 8.0 不可见列的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
MySQL EXPLAIN输出列的详细解释
May 12 MySQL
MySQL如何构建数据表索引
May 13 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
MySQL中JOIN连接的基本用法实例
Jun 05 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
MySQL常用慢查询分析工具详解
Aug 14 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
Mysql Online DDL的使用详解
May 20 #MySQL
MySQL 存储过程的优缺点分析
May 20 #MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
MySQL 覆盖索引的优点
May 19 #MySQL
MySQL 视图(View)原理解析
超详细教你怎么升级Mysql的版本
详解mysql三值逻辑与NULL
You might like
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
理解python多线程(python多线程简明教程)
2014/06/09 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
运动会横幅标语
2014/06/17 职场文书
擅自离岗检讨书
2014/09/12 职场文书
计算机教师工作总结
2015/08/13 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
导游词之襄阳古城
2019/09/27 职场文书
python保存图片的四个常用方法
2022/02/28 Python