1. 启动和停止

  1. # Linux启动mysql服务端程序
  2. mysqld
  3. # 停止mysql服务端程序
  4. # 客户端连接MySQL服务端
  5. mysql -h主机名 -u用户名 -p密码 -P端口
  6. # 退出MySQL客户端和服务端连接
  7. quit 或者 exit 或者 \q

2. 存储引擎

  1. -- 查看服务器程序支持的存储引擎
  2. show engines;
  3. -- 创建表时指定存储引擎
  4. create table 表名 (
  5. 建表语句;
  6. ) engine = 存储引擎名称;
  7. -- 修改表的存储引擎
  8. alter table 表名 engine = 引擎名称;
  9. -- 查看表结构
  10. show create table 表名;

3. 配置文件

  • 服务端允许同时连入的客户端默认数量是 151
  • 默认存储引擎``InnoDB
  • 在程序启动时指定的设置项也称之为启动选项(startup options)。
  • 启动参数可以放在命令行中指定,也可以把它们放在配置文件中指定。

3.1 命令行中指定启动选项

在命令行中指定启动选项时需要在选项名前加上--前缀。另外,如果选项名是由多个单词构成的,它们之间可以由短划线-连接起来,也可以使用下划线_连接起来。

# 在启动服务器程序的命令行后指定多个参数格式如下,=左右两边不可以有空格。
--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]

# 禁止客户端和服务端使用TCP/IP进行通讯。
mysqld --skip-networking

# 修改表的默认存储引擎为MyISAM
mysqld --default-storage-engine=MyISAM
  • 查看程序支持的启动选项
    mysql --help
    mysqld_safe --help
    mysqld --verbose --help
    

3.2 配置文件指定启动选项

  • 配置文件中的启动选项被划分为若干组,每个组有一个组名,用[]括起来。
  • 配置文件中**只能使用长形式**的选项。
  • 在配置文件中指定的启动选项不允许加**--**前缀。
  • 每行只指定一个选项。
  • 而且**=**周围可以有空白字符(命令行中选项名、=、选项值之间不允许有空白字符)。
  • **#**出现直到行尾的内容都属于注释内容。
  • **[server]**组下边的启动选项将作用于所有的服务器程序
  • **[client]**组下边的启动选项将作用于所有的客户端程序
  • 不同配置文件中同名配置,最后出现的为准
  • 同一配置文件中不同组的同名配置,最后出现的为准
  • 同名选项出现在配置文件和命令行中,以命令行中为准。 :::info [server]
    option1 #这是option1,该选项不需要选项值
    option2 = value2 #这是option2,该选项需要选项值

[mysqld]
(具体的启动选项…)

[mysqld_safe]
(具体的启动选项…)

[client]
(具体的启动选项…)

[mysql]
(具体的启动选项…)

[mysqladmin]
(具体的启动选项…) :::

:::warning mysqld --defaults-file=/tmp/myconfig.txt
mysqld --defaults-extra-file=/tmp/myconfig.txt
二者区别:
注意defaults-extra-filedefaults-file的区别,使用defaults-extra-file可以指定额外的配置文件搜索路径(也就是说那些固定的配置文件路径也会被搜索)。defaults-file则只搜索该路径下配置文件,找不到报错。 :::

4. 系统变量

  • 系统变量的默认值可以在启动选项和配置文件中更改。大多数的也都可以在运行时修改,无需停止并重启。
  • 启动选项的名字可以用**_****-**连接,但是其对应的系统变量只能用**_**连接。 ```shell

    允许同时连入的客户端数量

    max_connections

表的默认存储

default_storage_engine

查询缓存的大小

query_cache_size

<a name="guoxF"></a>
## 4.1 相关SQL语句
```plsql
-- 查看系统变量(默认是查看SESSION级别的系统变量)
SHOW VARIABLES [LIKE 匹配的模式];

4.2 系统变量作用范围

  • **GLOBAL**:全局变量,影响服务器的整体操作。
  • **SESSION**:会话变量,影响某个客户端连接的操作。(别名叫**LOCAL**

    4.3 运行期间设置环境变量

    ```plsql SET [GLOBAL|SESSION] 系统变量名 = 值; — 或者 SET [@@(GLOBAL|SESSION).]var_name = XXX;

— 例如修改全局 语句一:SET GLOBAL default_storage_engine = MyISAM; 语句二:SET @@GLOBAL.default_storage_engine = MyISAM; — 例如修改当前客户端 语句一:SET SESSION default_storage_engine = MyISAM; 语句二:SET @@SESSION.default_storage_engine = MyISAM; 语句三:SET default_storage_engine = MyISAM;

:::info
小贴士: 如果某个客户端改变了某个系统变量在`GLOBAL`作用范围的值,并不会影响该系统变量在当前已经连接的客户端作用范围为`SESSION`的值,只会影响后续连入的客户端在作用范围为`SESSION`的值。
:::
:::warning

- 有一些系统变量只具有GLOBAL作用范围,比方说`max_connections`。
- 有一些系统变量只具有SESSION作用范围,比如`insert_id`,表示在对某个包含`AUTO_INCREMENT`列的表进行插入时,该列初始的值。
- 有些两者都有。
- 有些系统变量是只读的,例如`version`。
- 有些系统变量不能当作启动选项设置。比如`auto_increment_offset`等。
- 有些启动选项不是系统变量,比如`defaults-file`。
:::

<a name="xz6Qi"></a>
# 5. 状态变量

- 关于程序运行状态的变量,它们被称为状态变量。
- 只能由服务器设置。
- 也有两个范围:GLOBAL和SESSION。
```shell
# 当前有多少客户端和服务器建立了连接
Threads_connected
# 已经更新了多少行记录
Handler_update

# 查看状态变量的sql(默认是session)
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];

6. 字符集

字符集名称 收录字符数 字节数编码 别名 备注
**ASCII** 128个 1个字节
**ISO 8859-1** 256个 1个字节 **latin1**
**GB2312** ASCII1字节,否则2字节 兼容**ASCII****变长编码方式**
**GBK** **GB2312**扩充,兼容**GB2312**
**utf8** 1~4个字节 兼容**ASCII****变长编码 **

6.1 MySQL中的utf8和utf8mb4

  • **utf8mb3**:阉割过的**utf8**字符集,只使用1~3个字节表示字符。在MySQL中就是utf8编码。
  • **utf8mb4**:正宗的**utf8**字符集,使用1~4个字节表示字符。存储emoji表情用这个。

    6.2 SQL语句

    ```sql — 查看字符集,CHARACTER SET和CHARSET是同义词 SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];

— 查看比较规则 SHOW COLLATION [LIKE 匹配的模式];

— 数据库级别的新增和修改 CREATE DATABASE 数据库名 [[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] COLLATE 比较规则名称];

ALTER DATABASE 数据库名 [[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] COLLATE 比较规则名称];

— 表级别的新增和修改 CREATE TABLE 表名 (列的信息) [[DEFAULT] CHARACTER SET 字符集名称] [COLLATE 比较规则名称]]

ALTER TABLE 表名 [[DEFAULT] CHARACTER SET 字符集名称] [COLLATE 比较规则名称]

— 列级别的新增和修改 CREATE TABLE 表名( 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称], 其他列… );

ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];

— 设置三种字符集转换 SET NAMES 字符集名; — 或者分开使用 SET character_set_client = 字符集名; SET character_set_connection = 字符集名; SET character_set_results = 字符集名; — 或者在配置文件中 [client] default-character-set=utf8 ```

6.3 字符比较规则

  • **utf8_general_ci**是一种通用的比较规则。
  • 后缀意义如下: | 后缀 | 英文释义 | 描述 | | —- | —- | —- | | _ai | accent insensitive | 不区分重音 | | _as | accent sensitive | 区分重音 | | _ci | case insensitive | 不区分大小写 | | _cs | case sensitive | 区分大小写 | | _bin | binary | 以二进制方式比较 |

6.4 字符集和比较规则的级别

  • 服务器级别(有默认值)
  • 数据库级别(向上继承默认值)
  • 表级别(向上继承默认值)
  • 列级别(向上继承默认值) | 系统变量 | 描述 | | —- | —- | | character_set_server | 服务器级别的字符集 | | collation_server | 服务器级别的比较规则 | | character_set_database | 当前数据库的字符集(只读) | | collation_database | 当前数据库的比较规则(只读) |

6.5 字符集转换

系统变量 描述
**character_set_client** 服务器解码请求时使用的字符集
**character_set_connection** 服务器处理请求时会把请求字符串从**character_set_client**转为**character_set_connection**
**character_set_results** 服务器向客户端返回数据时使用的字符集