sql數據定義語句簡單示例(一)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章