本篇文章主要介绍了"新石器时代的特征 Mysql57版本新特征",主要涉及到新石器时代的特征方面的内容,对于MySql感兴趣的同学可以参考一下:
Mysql5.7版本新特征初始化方式变更5.7版本之前scripts/mysql_install_db \--datadir=/data/sql_data \-...
Mysql5.7版本新特征
初始化方式变更
5.7版本之前
scripts/mysql_install_db \
--datadir=/data/sql_data \
--user=mysql --basedir=/home/mysql
5.7版本之后
bin/mysqld --initialize --user=mysql \
--basedir=/home/mysql \
--datadir=/home/mysql/data
支持为表增加计算列
mysql5.7之前需要使用触发器实现相关功能
触发器
--要实现的功能:c3=c1+c2
mysql> CREATE TABLE `test` (id int auto_increment not null, c1 int, c2 int, c3 int, primary key(id));
--创建插入触发器
mysql> create trigger inst_t before insert on test for each row set new.c3=new.c1+new.c2;
mysql> insert into test(c1,c2) values(12,13);
mysql> select * from test;
--当使用sql更新c1或者c2,c3的数值不能更新,有缺陷
--创建update触发器
mysql> create trigger upd_t before update on test for each row set new.c3=new.c1+new.c2;
mysql> update test set c1=4 where id=1;
视图解决
create view vm_t as select id,c1,c2,c1+c2 as c3 from test;
select * from vm_t;
使用视图和触发器对查询效率有一定的影响,生产环境下尽量少的使用视图和触发器
5.7版本
mysql> drop table test;
mysql> create table test(
id int auto_increment not null,
c1 int,
c2 int,
c3 int as(c1+c2),
primary key(id)
);
mysql> show create table test;
有虚拟列,不存储在磁盘中
引入JSON列类型及相关函数
5.7版本之前
只能在varchar或是text等字符类型的列中存储json类型的字符串,并通过程序解析使用json字符串
5.7版本之后
增加了json列类型及以json_开头的相关处理函数,如json_type(),json_object(),json_merge()等
--json数组
select json_array('a','b',now());
["a", "b", "2016-06-15 18:05:43.000000"]
--[]括起的数组
--json对象
select json_object('key1',1,'key2',2);
{"key1": 1, "key2": 2}
--{}括起的对象
--创建列名col_name,数据类型为json的表
create table test(col_name,json);
Replication相关增强
多源复制
channel的解决方案
基于表的多线程复制
5.7版本之前
在mysql5.6开始支持多线程复制,只不过是对于每一个库一个复制线程
5.7版本之后
增加了slave_parallel_type参数可以控制并发同步是基于database还是logic_clock
在线变更复制方式