#下载地址:百度云下载 密码: 4n7f
Mysql5.7新特性
1.增加计算列
在MySQL5.7之前的版本,想要实现计算列的功能,有三种方式:
1)使用触发器,如:
create trigger inst_t before insert/update on t for each row set new.row3 = new.c1 + new.c2;
2)使用视图,如:
create view vw_t as select id,t1,t2,t1+t2 as t3 from t;
3)update方法,如:
udpate t set t3 = t1 + t2;
当然,第三种方法就当作没看见吧。。。MySQL5.7中增加了计算列,只需要定义一个列为计算列即可,语法:
clo_name data_type [GENERATED ALWAYS] AS (expression) [VIRTUAL | STORED] [UNIQUE[KEY]] [COMMENT comment][[NOT]NULL][[PRIMARY]KEY]
其中,VIRTUAL 和 STORED 分别指虚拟列和实际的列,虚拟列是不存储在磁盘中的,只在内存中。
如定义c3为计算列:
create table t(id auto_increment not null, c1 int, c2 int, c3 int as (t1 + t2), primary key(id));这样,insert或者update c1和c2之后,c3的值会自动变化。
2. 引入JSON列类型
在MySQL5.7之前的版本中,如果要使用JSON类型,只能在varchar或者text等字符类型的列中存储JSON类型的字符串,并通过程序解析使用JSON字符串。
MySQL5.7版本中,增加了JSON列类型以及JSON相关处理函数,如json_type(), json_object(), json_merge等。JSON列类型包括JSON数组和JSON对象两种,数组是以列表的形式存储的,使用json_array函数生成,如:
mysql> select json_array('a','b',now()); +------------------------------------------+| json_array('a','b',now()) | +------------------------------------------+| ["a", "b", "2016-01-23 22:30:11.000000"] |+------------------------------------------+1 row in set (0.03 sec)1234567JSON对象是以字典(键值对)形式存储的,使用json_object()函数生成,如:
mysql> select json_object('key1',1,'key2','hello'); +--------------------------------------+| json_object('key1',1,'key2','hello') | +--------------------------------------+| {"key1": 1, "key2": "hello"} | +--------------------------------------+1 row in set (0.00 sec)1234567来个例子:
mysql> create table json_t(t1 json); Query OK, 0 rows affected (0.09 sec)mysql> show create table json_t; +--------+---------------------------------------------+| Table | Create Table | +--------+---------------------------------------------+| json_t | CREATE TABLE `json_t` ( `t1` json DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +--------+---------------------------------------------+1 row in set (0.00 sec) mysql> insert into json_t(t1) values(json_array('a','b',1,2)); Query OK, 1 row affected (0.01 sec)mysql> select * from json_t; +------------------+| t1 | +------------------+| ["a", "b", 1, 2] |+------------------+1 row in set (0.01 sec) mysql> insert into json_t(t1) values(json_object('key1','aa','key2',10)); Query OK, 1 row affected (0.04 sec)mysql> select * from json_t; +----------------------------+| t1 | +----------------------------+| ["a", "b", 1, 2] || {"key1": "aa", "key2": 10} | +----------------------------+2 rows in set (0.00 sec)12345678910111213141516171819202122232425262728293031323334353. 基于表的多线程复制
MySQL5.6版本开始支持多线程复制,只不过对于每一个库一个复制线程。
MySQL5.7版本开始对多线程的复制功能进行了加强,增加了slave_parallel_type参数来控制并发同步是基于database还是logical_clock。
MySQL5.7同时增加了对在线变更复制方式的支持,把基于日志点的复制方式变为基于gtid的复制方式,或者把gtid的复制方式转变为基于日志点的复制方式,在MySQL5.7之前的版本中都需要重启master服务器,MySQL5.7不需要重启。在线变更复制方式:
1. SET @@GLOBAL.ENFORCE_GRID_CONSISTENCY = WARN;
执行完这一步后,要保证所有服务器都没有警告发生,有的话要查看警告原因。
2. SET @@GLOBAL.ENFORCE_GRID_CONSISTENCY = ON;
3. SET @@GLOBAL.GRID_MODE = OFF_PERMISSIVE;
4. SET @@GLOBAL.GRID_MODE = ON_PERMISSIVE;
5. SHOW STATUS LIKE ‘ONGOING_ANONYMOUS_TRANSACTION_COUNT’;
6. SET @@GLOBAL.GRID_MODE = ON; 并把gtid-mode=on 加入到my.cnf配置文件中。
7. STOP SLAVE [FOR CHANNEL ‘channel’];
CHANGE MASTER TO MASTER_AUTO_POSITION = 1 [FOR CHANNEL ‘channel’];
START SLAVE [FOR CHANNEL ‘channel’];4. InnoDB引擎增强
支持缓冲池大小在线改变。
增加innodb_buffer_pool导入导出功能。
支持为innodb表建立公用表空间。5.安全管理方面的增强
不再支持old_password认证。
增加账号默认过期时间及加强了账号的管理功能。
show variables like ‘default_password_lifetime’;
可以看到账号默认过期时间为360天,为了避免修改密码的麻烦,可以设置为0。
可以对账号进行锁定和解锁。
增加了sys管理数据库。sys数据库中的表都是依赖于performance_schema数据库中的表的视图。
宠物免费领养小程序,欢迎来踩