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

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