总言
主要内容:学习一些数据库和表的增加、修改、删除、查询操作(主要是数据定义语言),理解校验集和编码集。
文章目录
- 总言
- 1、库的操作
-
- 1.1、创建/删除/查询数据库
-
- 1.1.1、基本使用(查看、删除、创建)
-
- [1.1.1.1、查看数据库(show databases、show create database XXX)](#1.1.1.1、查看数据库(show databases、show create database XXX))
- [1.1.1.2、删除某个数据库(drop database XXX)](#1.1.1.2、删除某个数据库(drop database XXX))
- [1.1.1.3、创建数据库(create database XXX、show create databases XXX)](#1.1.1.3、创建数据库(create database XXX、show create databases XXX))
- 1.1.2、数据库的编码集和校验集
-
- 1.1.2.1、是什么和为什么
- [1.1.2.2、查看系统默认字符集以及校验规则(show variables like 'XXX')](#1.1.2.2、查看系统默认字符集以及校验规则(show variables like 'XXX'))
- [1.1.2.3、查看数据库支持的字符集校验规则(show charset、show collation)](#1.1.2.3、查看数据库支持的字符集校验规则(show charset、show collation))
- 1.1.3、创建数据库时的编码集和校验规则
- 1.1.4、校验规则对数据库的影响
- [1.2、修改数据库(alter database)](#1.2、修改数据库(alter database))
- 1.3、备份和恢复
- [1.4、查看连接情况(show processlist)](#1.4、查看连接情况(show processlist))
- 2、表的操作
1、库的操作
主要内容:学习数据库增加、修改、删除、查询(DDL,数据定义语言)。
1.1、创建/删除/查询数据库
1.1.1、基本使用(查看、删除、创建)
该小节所涉及的相关语句如下:
1.1.1.1、查看数据库(show databases、show create database XXX)
1)、查看所有数据库
可以使用以下SQL查询语句来显示MySQL数据库中的所有数据库:
sql
SHOW DATABASES;
演示结果如下:
2)、查看指定数据库
如果想查看特定数据库的创建语句,可以使用以下命令:
sql
SHOW CREATE DATABASE database_name;
说明:
1、database_name
为需要查看的数据库名称。其会返回一个结果集,其中包含该数据库的创建语句。
2、为了执行此命令,需要具有足够的权限来查看数据库的创建语句。
演示结果如下:
①关于大小写:MySQL大小写不敏感,一般推荐大写,但小写便于观察使用。
②关于反引号:类似于C语言中的转义字符的使用方法。建库和建表建议将名称带上反引号,避免与MySQL中某些关键字冲突。(在不确定的情况下,加上反引号比较好。)
③关于版本号:/*!40100 DEFAULT CHARACTER SET utf8 */
。此句话并非注释不是注释,表示当前MySQL版本如果大于4.10,则执行后面的SQL语句。
1.1.1.2、删除某个数据库(drop database XXX)
1)、基础说明
相关语句如下:
sql
DROP DATABASE [IF EXISTS] database_name;
说明:
1、database_name
是要删除的数据库的名称。
2、 一旦执行此命令,该数据库及其所有表、索引、触发器、存储过程等都将被永久删除,且无法恢复。(级联删除 )
3、慎重使用该指令! 这是一个不可逆的操作,在执行之前最好确保已备份所有重要的数据,并且确实想要删除该数据库。
演示结果如下:
2)、注意事项
如果手动创建了一个目录(例如,使用mkdir),则服务器会认为这是一个数据库目录,并在SHOW DATABASES的输出中显示出来。但是删除时会报错 。(所以,使用语句时规范使用! 不要使用 mkdir 创建的目录通过 drop databases 来删除,因为它们服务于完全不同的目的和上下文。)
1.1.1.3、创建数据库(create database XXX、show create databases XXX)
1)、基础说明
MySQL中,创建新数据库的SQL语句如下:
sql
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification]...
create_specification: #[] 是可选项
[IF NOT EXISTS] #如果数据库存在则不做任何改变,否则创建数据库
[DEFAULT] CHARACTER SET charset_name # 指定数据库采用的字符集
[DEFAULT] COLLATE collation_name # 指定数据库字符集的校验规则
说明:
1、创建数据库是指在数据库系统中划分一块空间,用来存储相应的数据,这是进行表操作的基础,也是进行数据库管理的基础。
2、MySQL 的数据存储区以目录方式表示 MySQL 数据库,包含与数据库表相对应的文件的目录。因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。
3、注意:在 MySQL 中不区分大小写。
相关演示如下:
1.1.2、数据库的编码集和校验集
该小节所涉及的相关语句如下:
1.1.2.1、是什么和为什么
字符集和校验集是什么?
字符集(character set): 定义了数据库中存储和处理数据的字符及其编码格式。MySQL支持多种字符集,包括ASCII、Latin1、GBK、GB2312、Big5等。不同的字符集支持不同的字符范围和编码规则。
校验规则(collation): 定义了字符的比较规则,也可以称为排序规则、字符序。校验集通常与特定的字符集相关联,并定义了如何比较和排序该字符集中的字符。MySQL提供了一系列的校验集,每个校验集都有自己的排序规则和选项。
数据库为什么需要编码集和校验集?
1、数据存储和检索: 数据库的主要操作是存取数据。①编码集 用于确定如何将字符数据存储在数据库中 。不同的字符集支持不同的字符范围,因此选择正确的字符集对于确保数据的完整性和准确性至关重要。②校验集 用于验证数据的完整性 ,确保数据在传输或存储过程中没有被篡改或损坏,此外还影响到字符串的比较和排序 ,进而影响到查询和索引的性能。
2、兼容性和互操作性: 正确的编码集和校验集可以确保数据库与其他系统和工具的兼容性和互操作性。例如,许多应用程序和系统期望使用特定的字符集和校验集来处理数据。
3、维护和管理: 编码集和校验集的标准化可以简化数据库的维护和管理过程。这有助于减少错误和提高工作效率。
总结: 数据库需要编码集和校验集以确保数据的完整性、准确性和安全性,以及优化性能、兼容性和可维护性。
1.1.2.2、查看系统默认字符集以及校验规则(show variables like 'XXX')
显示当前数据库的字符集和校验集设置:
sql
SHOW VARIABLES LIKE 'character_set_database'; # 编码集
SHOW VARIABLES LIKE 'collation_database'; #校验集
说明:
1、SHOW VARIABLES
可显示MySQL服务器运行时的系统变量。
2、LIKE 'character_set_database'
、LIKE 'collation_database'
是过滤条件,加上后只会显示指定名称的系统变量。
3、使用%
可以模糊匹配。
sql
show variables like 'character_set_%';
show variables like 'collation_%';
相关演示如下: 这里的显示结果和配置文件有关。
1.1.2.3、查看数据库支持的字符集校验规则(show charset、show collation)
相关语句如下:
sql
SHOW CHARSET; #用于查询 MySQL数据库中所有可用的字符集。
SHOW COLLATION; #用于查询 MySQL数据库中所有可用的校对规则。
演示结果如下: 需要注意,这里的字符集和校验规则是匹配的。
1、执行show charset;
将返回一个结果集,其中包含多个行,每一行显示一个字符集的名称、字符集的简要描述、校对规则和默认排序规则。
sql
mysql> show charset;
+----------+---------------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.00 sec)
mysql>
2、执行show collation;
将返回一个结果集,其中包含多行数据,每一行对应一个校对规则。每一行数据通常包括校对规则的名称、字符集、ID和描述等。
powershell
mysql> show collation;
+--------------------------+----------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+--------------------------+----------+-----+---------+----------+---------+
| big5_chinese_ci | big5 | 1 | Yes | Yes | 1 |
| big5_bin | big5 | 84 | | Yes | 1 |
| dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 |
| dec8_bin | dec8 | 69 | | Yes | 1 |
| cp850_general_ci | cp850 | 4 | Yes | Yes | 1 |
| cp850_bin | cp850 | 80 | | Yes | 1 |
| hp8_english_ci | hp8 | 6 | Yes | Yes | 1 |
| hp8_bin | hp8 | 72 | | Yes | 1 |
| koi8r_general_ci | koi8r | 7 | Yes | Yes | 1 |
| koi8r_bin | koi8r | 74 | | Yes | 1 |
| latin1_german1_ci | latin1 | 5 | | Yes | 1 |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
| latin1_danish_ci | latin1 | 15 | | Yes | 1 |
| latin1_german2_ci | latin1 | 31 | | Yes | 2 |
| latin1_bin | latin1 | 47 | | Yes | 1 |
| latin1_general_ci | latin1 | 48 | | Yes | 1 |
| latin1_general_cs | latin1 | 49 | | Yes | 1 |
| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |
| latin2_czech_cs | latin2 | 2 | | Yes | 4 |
| latin2_general_ci | latin2 | 9 | Yes | Yes | 1 |
| latin2_hungarian_ci | latin2 | 21 | | Yes | 1 |
| latin2_croatian_ci | latin2 | 27 | | Yes | 1 |
| latin2_bin | latin2 | 77 | | Yes | 1 |
| swe7_swedish_ci | swe7 | 10 | Yes | Yes | 1 |
| swe7_bin | swe7 | 82 | | Yes | 1 |
| ascii_general_ci | ascii | 11 | Yes | Yes | 1 |
| ascii_bin | ascii | 65 | | Yes | 1 |
| ujis_japanese_ci | ujis | 12 | Yes | Yes | 1 |
| ujis_bin | ujis | 91 | | Yes | 1 |
| sjis_japanese_ci | sjis | 13 | Yes | Yes | 1 |
| sjis_bin | sjis | 88 | | Yes | 1 |
| hebrew_general_ci | hebrew | 16 | Yes | Yes | 1 |
| hebrew_bin | hebrew | 71 | | Yes | 1 |
| tis620_thai_ci | tis620 | 18 | Yes | Yes | 4 |
| tis620_bin | tis620 | 89 | | Yes | 1 |
| euckr_korean_ci | euckr | 19 | Yes | Yes | 1 |
| euckr_bin | euckr | 85 | | Yes | 1 |
| koi8u_general_ci | koi8u | 22 | Yes | Yes | 1 |
| koi8u_bin | koi8u | 75 | | Yes | 1 |
| gb2312_chinese_ci | gb2312 | 24 | Yes | Yes | 1 |
| gb2312_bin | gb2312 | 86 | | Yes | 1 |
| greek_general_ci | greek | 25 | Yes | Yes | 1 |
| greek_bin | greek | 70 | | Yes | 1 |
| cp1250_general_ci | cp1250 | 26 | Yes | Yes | 1 |
| cp1250_czech_cs | cp1250 | 34 | | Yes | 2 |
| cp1250_croatian_ci | cp1250 | 44 | | Yes | 1 |
| cp1250_bin | cp1250 | 66 | | Yes | 1 |
| cp1250_polish_ci | cp1250 | 99 | | Yes | 1 |
| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 |
| gbk_bin | gbk | 87 | | Yes | 1 |
| latin5_turkish_ci | latin5 | 30 | Yes | Yes | 1 |
| latin5_bin | latin5 | 78 | | Yes | 1 |
| armscii8_general_ci | armscii8 | 32 | Yes | Yes | 1 |
| armscii8_bin | armscii8 | 64 | | Yes | 1 |
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
| utf8_german2_ci | utf8 | 212 | | Yes | 8 |
| utf8_croatian_ci | utf8 | 213 | | Yes | 8 |
| utf8_unicode_520_ci | utf8 | 214 | | Yes | 8 |
| utf8_vietnamese_ci | utf8 | 215 | | Yes | 8 |
| utf8_general_mysql500_ci | utf8 | 223 | | Yes | 1 |
| ucs2_general_ci | ucs2 | 35 | Yes | Yes | 1 |
| ucs2_bin | ucs2 | 90 | | Yes | 1 |
| ucs2_unicode_ci | ucs2 | 128 | | Yes | 8 |
| ucs2_icelandic_ci | ucs2 | 129 | | Yes | 8 |
| ucs2_latvian_ci | ucs2 | 130 | | Yes | 8 |
| ucs2_romanian_ci | ucs2 | 131 | | Yes | 8 |
| ucs2_slovenian_ci | ucs2 | 132 | | Yes | 8 |
| ucs2_polish_ci | ucs2 | 133 | | Yes | 8 |
| ucs2_estonian_ci | ucs2 | 134 | | Yes | 8 |
| ucs2_spanish_ci | ucs2 | 135 | | Yes | 8 |
| ucs2_swedish_ci | ucs2 | 136 | | Yes | 8 |
| ucs2_turkish_ci | ucs2 | 137 | | Yes | 8 |
| ucs2_czech_ci | ucs2 | 138 | | Yes | 8 |
| ucs2_danish_ci | ucs2 | 139 | | Yes | 8 |
| ucs2_lithuanian_ci | ucs2 | 140 | | Yes | 8 |
| ucs2_slovak_ci | ucs2 | 141 | | Yes | 8 |
| ucs2_spanish2_ci | ucs2 | 142 | | Yes | 8 |
| ucs2_roman_ci | ucs2 | 143 | | Yes | 8 |
| ucs2_persian_ci | ucs2 | 144 | | Yes | 8 |
| ucs2_esperanto_ci | ucs2 | 145 | | Yes | 8 |
| ucs2_hungarian_ci | ucs2 | 146 | | Yes | 8 |
| ucs2_sinhala_ci | ucs2 | 147 | | Yes | 8 |
| ucs2_german2_ci | ucs2 | 148 | | Yes | 8 |
| ucs2_croatian_ci | ucs2 | 149 | | Yes | 8 |
| ucs2_unicode_520_ci | ucs2 | 150 | | Yes | 8 |
| ucs2_vietnamese_ci | ucs2 | 151 | | Yes | 8 |
| ucs2_general_mysql500_ci | ucs2 | 159 | | Yes | 1 |
| cp866_general_ci | cp866 | 36 | Yes | Yes | 1 |
| cp866_bin | cp866 | 68 | | Yes | 1 |
| keybcs2_general_ci | keybcs2 | 37 | Yes | Yes | 1 |
| keybcs2_bin | keybcs2 | 73 | | Yes | 1 |
| macce_general_ci | macce | 38 | Yes | Yes | 1 |
| macce_bin | macce | 43 | | Yes | 1 |
| macroman_general_ci | macroman | 39 | Yes | Yes | 1 |
| macroman_bin | macroman | 53 | | Yes | 1 |
| cp852_general_ci | cp852 | 40 | Yes | Yes | 1 |
| cp852_bin | cp852 | 81 | | Yes | 1 |
| latin7_estonian_cs | latin7 | 20 | | Yes | 1 |
| latin7_general_ci | latin7 | 41 | Yes | Yes | 1 |
| latin7_general_cs | latin7 | 42 | | Yes | 1 |
| latin7_bin | latin7 | 79 | | Yes | 1 |
| utf8mb4_general_ci | utf8mb4 | 45 | Yes | Yes | 1 |
| utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 |
| utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 8 |
| utf8mb4_icelandic_ci | utf8mb4 | 225 | | Yes | 8 |
| utf8mb4_latvian_ci | utf8mb4 | 226 | | Yes | 8 |
| utf8mb4_romanian_ci | utf8mb4 | 227 | | Yes | 8 |
| utf8mb4_slovenian_ci | utf8mb4 | 228 | | Yes | 8 |
| utf8mb4_polish_ci | utf8mb4 | 229 | | Yes | 8 |
| utf8mb4_estonian_ci | utf8mb4 | 230 | | Yes | 8 |
| utf8mb4_spanish_ci | utf8mb4 | 231 | | Yes | 8 |
| utf8mb4_swedish_ci | utf8mb4 | 232 | | Yes | 8 |
| utf8mb4_turkish_ci | utf8mb4 | 233 | | Yes | 8 |
| utf8mb4_czech_ci | utf8mb4 | 234 | | Yes | 8 |
| utf8mb4_danish_ci | utf8mb4 | 235 | | Yes | 8 |
| utf8mb4_lithuanian_ci | utf8mb4 | 236 | | Yes | 8 |
| utf8mb4_slovak_ci | utf8mb4 | 237 | | Yes | 8 |
| utf8mb4_spanish2_ci | utf8mb4 | 238 | | Yes | 8 |
| utf8mb4_roman_ci | utf8mb4 | 239 | | Yes | 8 |
| utf8mb4_persian_ci | utf8mb4 | 240 | | Yes | 8 |
| utf8mb4_esperanto_ci | utf8mb4 | 241 | | Yes | 8 |
| utf8mb4_hungarian_ci | utf8mb4 | 242 | | Yes | 8 |
| utf8mb4_sinhala_ci | utf8mb4 | 243 | | Yes | 8 |
| utf8mb4_german2_ci | utf8mb4 | 244 | | Yes | 8 |
| utf8mb4_croatian_ci | utf8mb4 | 245 | | Yes | 8 |
| utf8mb4_unicode_520_ci | utf8mb4 | 246 | | Yes | 8 |
| utf8mb4_vietnamese_ci | utf8mb4 | 247 | | Yes | 8 |
| cp1251_bulgarian_ci | cp1251 | 14 | | Yes | 1 |
| cp1251_ukrainian_ci | cp1251 | 23 | | Yes | 1 |
| cp1251_bin | cp1251 | 50 | | Yes | 1 |
| cp1251_general_ci | cp1251 | 51 | Yes | Yes | 1 |
| cp1251_general_cs | cp1251 | 52 | | Yes | 1 |
| utf16_general_ci | utf16 | 54 | Yes | Yes | 1 |
| utf16_bin | utf16 | 55 | | Yes | 1 |
| utf16_unicode_ci | utf16 | 101 | | Yes | 8 |
| utf16_icelandic_ci | utf16 | 102 | | Yes | 8 |
| utf16_latvian_ci | utf16 | 103 | | Yes | 8 |
| utf16_romanian_ci | utf16 | 104 | | Yes | 8 |
| utf16_slovenian_ci | utf16 | 105 | | Yes | 8 |
| utf16_polish_ci | utf16 | 106 | | Yes | 8 |
| utf16_estonian_ci | utf16 | 107 | | Yes | 8 |
| utf16_spanish_ci | utf16 | 108 | | Yes | 8 |
| utf16_swedish_ci | utf16 | 109 | | Yes | 8 |
| utf16_turkish_ci | utf16 | 110 | | Yes | 8 |
| utf16_czech_ci | utf16 | 111 | | Yes | 8 |
| utf16_danish_ci | utf16 | 112 | | Yes | 8 |
| utf16_lithuanian_ci | utf16 | 113 | | Yes | 8 |
| utf16_slovak_ci | utf16 | 114 | | Yes | 8 |
| utf16_spanish2_ci | utf16 | 115 | | Yes | 8 |
| utf16_roman_ci | utf16 | 116 | | Yes | 8 |
| utf16_persian_ci | utf16 | 117 | | Yes | 8 |
| utf16_esperanto_ci | utf16 | 118 | | Yes | 8 |
| utf16_hungarian_ci | utf16 | 119 | | Yes | 8 |
| utf16_sinhala_ci | utf16 | 120 | | Yes | 8 |
| utf16_german2_ci | utf16 | 121 | | Yes | 8 |
| utf16_croatian_ci | utf16 | 122 | | Yes | 8 |
| utf16_unicode_520_ci | utf16 | 123 | | Yes | 8 |
| utf16_vietnamese_ci | utf16 | 124 | | Yes | 8 |
| utf16le_general_ci | utf16le | 56 | Yes | Yes | 1 |
| utf16le_bin | utf16le | 62 | | Yes | 1 |
| cp1256_general_ci | cp1256 | 57 | Yes | Yes | 1 |
| cp1256_bin | cp1256 | 67 | | Yes | 1 |
| cp1257_lithuanian_ci | cp1257 | 29 | | Yes | 1 |
| cp1257_bin | cp1257 | 58 | | Yes | 1 |
| cp1257_general_ci | cp1257 | 59 | Yes | Yes | 1 |
| utf32_general_ci | utf32 | 60 | Yes | Yes | 1 |
| utf32_bin | utf32 | 61 | | Yes | 1 |
| utf32_unicode_ci | utf32 | 160 | | Yes | 8 |
| utf32_icelandic_ci | utf32 | 161 | | Yes | 8 |
| utf32_latvian_ci | utf32 | 162 | | Yes | 8 |
| utf32_romanian_ci | utf32 | 163 | | Yes | 8 |
| utf32_slovenian_ci | utf32 | 164 | | Yes | 8 |
| utf32_polish_ci | utf32 | 165 | | Yes | 8 |
| utf32_estonian_ci | utf32 | 166 | | Yes | 8 |
| utf32_spanish_ci | utf32 | 167 | | Yes | 8 |
| utf32_swedish_ci | utf32 | 168 | | Yes | 8 |
| utf32_turkish_ci | utf32 | 169 | | Yes | 8 |
| utf32_czech_ci | utf32 | 170 | | Yes | 8 |
| utf32_danish_ci | utf32 | 171 | | Yes | 8 |
| utf32_lithuanian_ci | utf32 | 172 | | Yes | 8 |
| utf32_slovak_ci | utf32 | 173 | | Yes | 8 |
| utf32_spanish2_ci | utf32 | 174 | | Yes | 8 |
| utf32_roman_ci | utf32 | 175 | | Yes | 8 |
| utf32_persian_ci | utf32 | 176 | | Yes | 8 |
| utf32_esperanto_ci | utf32 | 177 | | Yes | 8 |
| utf32_hungarian_ci | utf32 | 178 | | Yes | 8 |
| utf32_sinhala_ci | utf32 | 179 | | Yes | 8 |
| utf32_german2_ci | utf32 | 180 | | Yes | 8 |
| utf32_croatian_ci | utf32 | 181 | | Yes | 8 |
| utf32_unicode_520_ci | utf32 | 182 | | Yes | 8 |
| utf32_vietnamese_ci | utf32 | 183 | | Yes | 8 |
| binary | binary | 63 | Yes | Yes | 1 |
| geostd8_general_ci | geostd8 | 92 | Yes | Yes | 1 |
| geostd8_bin | geostd8 | 93 | | Yes | 1 |
| cp932_japanese_ci | cp932 | 95 | Yes | Yes | 1 |
| cp932_bin | cp932 | 96 | | Yes | 1 |
| eucjpms_japanese_ci | eucjpms | 97 | Yes | Yes | 1 |
| eucjpms_bin | eucjpms | 98 | | Yes | 1 |
| gb18030_chinese_ci | gb18030 | 248 | Yes | Yes | 2 |
| gb18030_bin | gb18030 | 249 | | Yes | 1 |
| gb18030_unicode_520_ci | gb18030 | 250 | | Yes | 8 |
+--------------------------+----------+-----+---------+----------+---------+
222 rows in set (0.00 sec)
mysql>
1.1.3、创建数据库时的编码集和校验规则
该小节所涉及的相关内容:
1)、基本介绍
1、若在创建数据库时不指明任何编码和校验规则,MySQL将使用当前默认配置的字符集和校验集 。例如,对于utf8mb4
字符集,如果没有指定校验集,则默认为utf8mb4_unicode_ci
。这也是创建数据库的主流用法,在配置文件中填入所需要的编码和校验规则,后续使用时可不必重复设置。
2、当然,也可以在创建数据库时自定义编码和校验规则。使用的语句如下:
sql
CREATE DATABASE dbname [IF NOT EXISTS] [default character set] [collate];
这里会产生一个问题。我们设置了默认的字符集和校验集,又在创建数据库时自定义了新的字符集和校验集。那么,最终该听谁的呢?
实际上,mysql对于这类情况通常采用就近原则,对于一些可选可不选的选项,若不填则采用默认的行为操作,若填写则采用当前填写的行为操作。
sql
create database dbname character set charset_name; #(跟字符集名称)
create database dbname charset=charset_name; #(跟字符集名称)
create database dbname collate collation_name; #(跟校验集名称)
2)、相关演示
演示一:创建数据库时,单独设置字符集。
演示二:创建数据库时,单独设置校验集。
演示三:创建数据库时,同时设置字符集和校验集。
1.1.4、校验规则对数据库的影响
1)、一个问题
设置数据库的编码和校验规则,本质会影响谁?
回答:其实是影响对应的数据库内部的表,所对应的编码和校验规则。
2)、举例验证
1、分别使用utf8_general_ci
和utf8_ bin
创建两个数据库(二者字符集一样,校验集不同。其中一个区别在于:①utf8_ general_ ci不区分大小写;②utf8_ bin区分大小写)
2、分别在两个数据库中建表,并在表中插入相同类型的数据。
3、操作一:查询某个元素,查看结果。
4、操作二:对表进行排序,查看结果。
1.2、修改数据库(alter database)
1)、基本语法说明
sql
ALTER DATABASE db_name [ [DEFAULT] CHARACTER SET charset_name] [ [DEFAULT] COLLATE collation_name]
db_name:数据库名
charset_name:字符集名
collation_name:校对规则名
说明:
1、对数据库的修改主要指的是修改数据库的字符集,校验规则 。
2、目前不支持对库名称的修改。 mv指令虽然可以修改目录名称,但不建议越过MySQL相关语法直接使用指令操作(属于违规行为)。
2)、使用演示
同之前创建数据时设置校验集和字符集一样,这里除了可以使用charset=XXX
,也可以使用character set XXX
。(对校验集:collate XXX
)。
1.3、备份和恢复
1.3.1、对数据库进行备份(使用mysqldump命令行工具)
MySQL有多种备份策略和备份方式:相关扩展。
1)、基本使用语法
mysqldump是MySQL提供的一个非常有用的命令行工具,它允许导出数据库的结构和数据到一个SQL文件,这个文件可以被用于在另一个MySQL实例上恢复数据,或者作为数据的备份。
shell
mysqldump -u [username] -p[password] [database_name] > backup.sql
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
注意: -p
和password
之间没有空格。这个命令会导出指定的数据库到一个SQL文件中。
说明:
1、要正确使用mysqldump
备份MySQL数据 ,用户必须具备读、写等mysqldump权限,以便能够生成有效的备份文件。因此,用户在控制MYSQL备份权限时,必须授予适当的mysqldump权限,以确保备份操作正常进行。
2、在使用上述指令是,若不输出重定向 > XXX/XXXX
,则直接显示于显示器屏幕上。
3、数据库备份,有①对数据做备份;②对操作语句做备份。(对于后者,是把整个创建数据库,建表,导入数据的语句都装载这个文件中)
4、如果备份一个数据库时,没有带上-B
参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source
来还原。
2)、基础使用演示
如下图:mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中(会在语法层面做优化和补全)。
当然,mysqldump
的备份使用不止以上基础操作,可扩展学习。
1.3.2、恢复备份的数据库(source)
相关指令如下:
sql
source /path/to/your/backup.sql;
说明: 将/path/to/your/backup.sql
替换为备份文件的实际路径。在执行source命令之前,需要确保备份文件存在,并且有足够的权限访问它。若恢复大量数据可能需要一些时间,具体取决于备份文件的大小和服务器性能。
演示: 需要注意,这里mysqldump的指令是在shell命令行中执行的,而source的恢复语句是在mysql中执行的。
1.4、查看连接情况(show processlist)
用于显示用户正在运行的线程,可以告诉我们当前有哪些用户连接到我们的MySQL上。执行这个命令后,可以看到一个列表,其中包含每个连接的ID、用户、主机、数据库、命令和时间等详细信息。
sql
show processlist
说明:
1、除了root用户能看到所有正在运行的线程 外,其他用户都只能看到自己正在运行的线程 ,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS权限。
2、show processlist
只显示前100条线程信息,可以通过show full processlist
显示全部。
关于参数: (对该指令的扩展学习:show processlist 参数分析。)
Id
:用户登录mysql时,系统分配的"connection_id",可以使用函数connection_id()查看。
User
:显示启动这个线程的用户。如果不是root,这个命令就只显示用户权限范围的sql语句。
Host
:记录了发送请求的客户端的IP和端口号。可以用来跟踪出现问题语句的用户。
db
:显示当前执行的命令是在哪一个数据库上。如果没有指定数据库,则该值为 NULL 。
Command
:显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect)等。(其它取值可自行查询)
Time
:显示该线程处于当前状态的时间,单位是秒。
State
:显示使用当前连接的sql语句的状态。state描述的只是语句执行中的某一状态。一个sql语句可能需要多个状态才能完成。(如查询query,需要经过copying to tmp table、sorting result、sending data等状态)。
Info
:记录的是线程执行的语句。默认只显示前100个字符(存在截断情况,可使用 show full processlist显示全信息)。
应用举例: 若发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。( 通过top检查发现mysqlCPU或者iowait过高,那么可通过show processlist查询当前mysql有些线程正在运行,然后分析其中的参数,找出那些有问题的线程,该kill的kill,该优化的优化。)
2、表的操作
主要内容:学习表的创建、查看、修改、删除操作(DDL,数据定义语言)。
2.1、创建表
1)、基础语法说明
在数据库中创建一个新的表(表由行和列组成,每个表都必须有个表名):
sql
CREATE TABLE table_name (
column_name1 data_type ( size ) constraint_name ,
column_name2 data_type ( size ) constraint_name ,
column_name3 data_type ( size ) constraint_name ,
....
)character set 字符集 collate 校验规则 engine 存储引擎;
table_name 表名
column_name 表中列的名称
data_type 设定列的数据类型 (例如 varchar、integer、decimal、date 等等)
size 规定表中列的最大长度
constraint_name 数据约束,用于设置列的数据规则
说明:
1、上述语法中,注意这里是列名在前,列类型在后,最后一列没有逗号 。
2、character set 字符集 collate 校验规则 engine 存储引擎
,可在创建表时一并设置。若不指明字符集、校验规则、存储引擎,则默认使用数据库所配置的 。(由于表是创建在数据库中,通常情况下,其字符集、校验集、存储引擎等都与数据库保持一致。假若每次建表都特意指明与数据库不同的属性类型,那为何不在创建数据库时一次性统一设置好,免得多此一举。)
2)、使用演示
2.2、查看表
2.2.1、基本使用
1)、基础语法说明
1、查看数据库中的所有表: 执行该命令时,数据库管理系统将返回一个列表,其中包含当前数据库中的所有表名。
sql
SHOW TABLES;
2、查看指定的某一个表(属性): "DESC" 是 "DESCRIBE" 的缩写。该指令用于获取指定表(table_name)的详细信息,通常用于查看数据库中表的结构,包括列名、数据类型、是否允许为空等属性。
sql
DESC table_name;
3、查看某一个表(创建属性): 用于显示指定表的建表语句,可查看表的完整定义。该指令在需要复制或重新创建表很有用。
sql
show create table table_name;
show create table table_name \G;#按照当前计算机格式显示
2)、使用演示
对show tablese;
、desc XXX
:在MySQL中,NULL 是一个特殊的值,表示缺失或未知的数据。与空字符串(""
)或零
不同,NULL 表示缺少值,而不是一个特定的值。(类似于R语言中的NA)。
对show create table XXX
:
2.2.2、关于存储引擎对表的影响
2.3、修改表(新增add,修改modify,删除drop)
说明: 这里仍旧是DDL,修改的是表的属性。修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。又如,添加字段,删除字段等等。
sql
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename MODIFY (column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename DROP (column);
2.3.1、演示一:新增一列
添加新列:
sql
ALTER TABLE table_name ADD column_name datatype;
2.3.2、演示二:修改某一列
修改列数据类型:
sql
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;
2.3.3、演示三:删除某一列
删除列:
sql
ALTER TABLE table_name DROP COLUMN column_name;
说明:此操作慎重。通常都到了产品落地的环节,数据库业务逻辑早就设置好了。若此时还删库属于不明智行为,(为什么不在开发测试阶段调整处理好?总之要删除则要想清是否能承担出错后果)
删除单列:
删除多列:
2.3.4、演示四:修改表中某一列(属性)的名称&&修改表的名称
重命名列:
sql
ALTER TABLE table_name CHANGE old_column_name new_column_name column_type;
alter table XXX(指明表名称) change oldname(旧名字) newname(新名字) type(覆盖式修改,需要的属性在新名称后面加上);
在某些数据库系统中,可以使用以下命令更改表名:
sql
RENAME TABLE old_table_name RENAME TO new_table_name;
alter table XXX(原先表名称) rename to YYY(新的表名称); #加to不加to都可以
修改列名称:
修改表名称:
2.4、删除表
sql
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
tbl_name [, tbl_name] ...:这是要删除的表的名称。可以指定一个或多个表名,用逗号分隔。
演示如下: