适用于mysql5.7,只有简单的示例。
ALTER DATABASE 语句
示例
:
因为在测试环境的 /etc/my.cnf 中如下配置,
[mysqld]
datadir=/var/lib/mysql
所以,各数据库的总体特征文件db.opt均位于/var/lib/mysql。查询测试数据库test的总体特征:
# cat /var/lib/mysql/test/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
与mysql命令行查询结果一致:
> SHOW VARIABLES like 'character_set_database';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
进行修改,将数据库默认字符集修改为big5
> ALTER DATABASE test CHARACTER SET big5;
再次查询,已经更改过来了
> SHOW VARIABLES like 'character_set_database';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | big5 |
+------------------------+-------+
# cat /var/lib/mysql/test/db.opt
default-character-set=big5
default-collation=big5_chinese_ci
ALTER EVENT 语句
ALTER EVENT 仅适用于现有事件。
在以下示例中,假定myevent已定义命名事件 ,如下所示:
CREATE EVENT myevent
ON SCHEDULE
EVERY 6 HOUR
COMMENT 'A sample comment.'
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
该事件从输入语句开始,每6小时执行一次。事件内容为将mytable表中mycol列的所有值同时加1。
将该事件更改为:自输入sql语句4小时后开始,每12小时执行一次。
ALTER EVENT myevent
ON SCHEDULE
EVERY 12 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;
可以在单个语句中更改事件的多个特征。示例将myevent执行的SQL语句更改为从mytable中删除所有记录的语句,并且1天之后执行该事件;
ALTER EVENT myevent
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO
TRUNCATE TABLE myschema.mytable;
在ALTER EVENT语句中仅为要更改的特性指定选项;省略的选项保留其现有值。
要禁用myevent,请使用以下语句:
ALTER EVENT myevent
DISABLE;
要重命名事件,请使用ALTER EVENT语句的RENAME TO子句:
ALTER EVENT myevent
RENAME TO yourevent;
您还可以将事件移动到其他数据库 ,如下所示:
ALTER EVENT olddb.myevent
RENAME TO newdb.myevent;
执行该语句的用户必须同时具有olddb和newdb数据库的EVENT权限。
ALTER FUNCTION 语句
该语句可用于更改存储函数的特征。ALTER FUNCTION语句中可以指定多个更改 。但是,不能使用此语句更改参数或存储函数的内容。要进行此类更改,必须使用DROP FUNCTION删除函数并用CREATE FUNCTION重新创建函数。
示例
:
创建函数:
> CREATE FUNCTION hello (s CHAR(20))
-> RETURNS CHAR(50) DETERMINISTIC
-> RETURN CONCAT('Hello, ',s,'!');
使用函数:
> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world! |
+----------------+
对参数的注释进行修改:
> ALTER FUNCTION hello
-> COMMENT 'a test';
查询注释已经修改过来了:
> SHOW FUNCTION status\G
*************************** 1. row ***************************
Db: test
Name: hello
Type: FUNCTION
Definer: root@localhost
Modified: 2020-02-27 16:17:38
Created: 2020-02-27 16:16:44
Security_type: DEFINER
Comment: a test
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
删除函数:
> DROP FUNCTION hello;
ALTER INSTANCE 语句
示例
:
临时加载keyring_file插件并检查:
> INSTALL PLUGIN keyring_file soname 'keyring_file.so';
> SELECT PLUGIN_NAME, PLUGIN_STATUS
-> FROM INFORMATION_SCHEMA.PLUGINS
-> WHERE PLUGIN_NAME LIKE 'keyring%';
+--------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+--------------+---------------+
| keyring_file | ACTIVE |
+--------------+---------------+
确认已启用该插件:
> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES
-> WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%';
+--------------+------------+----------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |
+--------------+------------+----------------+
| test | test_table | ENCRYPTION="Y" |
+--------------+------------+----------------+
因为我的mysql二进制安装目录为 /usr/local/mysql,所以二进制密钥文件位于目录/usr/local/mysql/keyring,在更新密钥前进行md5验证:
# md5sum /usr/local/mysql/keyring/keyring
a2e6e57f6b3108b7b8405e7c3dbd2658 /usr/local/mysql/keyring/keyring
更新InnoDB表空间加密的主加密密钥:
> ALTER INSTANCE ROTATE INNODB MASTER KEY;
密钥是否更新了呢?可以通过md5验证一下,确实已经更新了:
# md5sum /usr/local/mysql/keyring/keyring
0967ecd35310180bdecc7f38b367b9f5 /usr/local/mysql/keyring/keyring
参考文档
https://dev.mysql.com/doc/refman/5.7/en/sql-data-definition-statements.html