適用於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