1. 启动和停止
# Linux启动mysql服务端程序
mysqld
# 停止mysql服务端程序
# 客户端连接MySQL服务端
mysql -h主机名 -u用户名 -p密码 -P端口
# 退出MySQL客户端和服务端连接
quit 或者 exit 或者 \q
2. 存储引擎
-- 查看服务器程序支持的存储引擎
show engines;
-- 创建表时指定存储引擎
create table 表名 (
建表语句;
) engine = 存储引擎名称;
-- 修改表的存储引擎
alter table 表名 engine = 引擎名称;
-- 查看表结构
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-file
和defaults-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** |
服务器向客户端返回数据时使用的字符集 |