mysql3m定义_MYSQL8.023新特性,消失的列

本文介绍了MySQL8.0引入的不可见列特性,主要用于保护敏感信息,如示例中的`money`字段。通过设置列`money`为不可见,插入和查询操作必须显式指定列名。在没有主键的表中,不可见列可用于创建隐式主键,解决了存量表无法添加主键的问题。InnoDB存储结构中,主键对于数据存储和索引效率至关重要。总结来说,不可见列提供了一种在不改变表结构外观的情况下增强数据隐私保护的方法。
摘要由CSDN通过智能技术生成

image.php?url=0T1S3mopXwcreate table test_invisible(id int,name varchar(20),money float invisible)

我们假设钱这个字段涉及隐私,那么我们设置为不可见,用关键字 invisible,在表结构中我们在Extra列可以看到INVISIBLE 关键字:

2、查询一下该表select * from test_invisible

可以看到我们只能看到2个列,不可见列是目前是不显示的。

报错信息:[21S01][1136] Column count doesn't match value count at row 1

如预期,插入语句中如果我们不引用它,会报错。

如果想插入必须显示的指定列名,这么插入:insert into test_invisible(id,name,money) values (1,'zhangsan',123)

查询的时候,要注意,如果用select * from test_invisible

是无法查询money列的,如下图

必须指定列select money from test_invisible

首先我们要知道InnoDB如何存储数据?innoDB在表空间存储数据。这些记录存储并用聚簇索引排序(主键):它们被称为索引组织表。所有的二级索引也将主键作为索引中的最右边的列(即使没有公开)。这意味着当使用二级索引检索一条记录时,将使用两个索引:二级索引指向用于最终检索该记录的主键。主键会影响随机I/O和顺序I/O之间的比率以及二级索引的大小。

简单来讲对InnoDB表来说,当没有定义主键,会使用第一个唯一非空列。如果没有可用的列,InnoDB会创建一个隐藏主键(6位)。

这类主键的问题在于您无法控制它,更糟糕的是,这个值对所有没有主键的表是全局的,如果您同时对这些表执行多次写操作,可能会产生争用问题(dict_sys->mutex)。不可见列的用处:有了新的不可见列,如果业务上不允许添加新列,我们现在就可以向没有主键的表添加合适的主键。例如老系统的表不适合新增列,而且可能没有索引的表,create table test(name varchar(20),money float)

现在添加指定不可见主键:alter table test add column id int unsigned auto_increment primary key invisible first;

总结

在InnoDB中主键很重要,如果存量表没有主键,又不能显性新增列的话

从MySQL8.0.23开始,您可以用不可见列解决没有主键的表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是详解mysql8.0.18在linux上安装与配置过程: 1. 下载MySQL 8.0.18的安装包 可以在MySQL的官网上下载MySQL 8.0.18的安装包,下载地址为:https://dev.mysql.com/downloads/mysql/8.0.html#downloads 2. 解压安装包 下载完成后,将安装包解压到指定目录中,使用以下命令: tar zxvf mysql-8.0.18-linux-glibc2.12-x86_64.tar.gz -C /usr/local 3. 创建MySQL用户和组 创建MySQL用户和组,使用以下命令: groupadd mysql useradd -r -g mysql -s /bin/false mysql 4. 安装MySQL 切换到MySQL所在的目录,使用以下命令安装MySQL: cd /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64 ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/ --datadir=/usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data 5. 启动MySQL 启动MySQL,使用以下命令: ./bin/mysqld_safe --user=mysql & 6. 设置MySQL密码 MySQL启动后,需要设置MySQL的root用户的密码,使用以下命令: ./bin/mysql_secure_installation 7. 配置MySQL 进入MySQL的配置文件my.cnf,使用以下命令: cd /etc vi my.cnf 将以下内容加入到my.cnf中: [mysql] default-character-set=utf8mb4 [mysqld] port = 3306 datadir = /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data socket = /tmp/mysql.sock default-time-zone = '+8:00' character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci 8. 重启MySQL 修改完my.cnf后,重启MySQL,使用以下命令: systemctl restart mysqld 9. 登录MySQL 使用以下命令登录MySQL: ./bin/mysql -u root -p 至此,MySQL 8.0.18在linux上安装与配置完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值