目录
2.1创建数据库
语法
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create specification]...]
create_specification:
[DEFAULT]CHARACTER SET charset_name
[DEFAULT]COLLATE collation_name
说明:
- 大写的表示关键字(其实大小写是不敏感的,mysql小写也是可以的)
- [ ] 是可选项
- CHARACTER SET : 指定数据库采用的字符集(charset)
- COLLATE : 指定数据库字符集的校验规则 (校验集)
2.2创建数据库案例
- 创建名为db1的数据库
说明:create database db1;
当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ci - 创建一个使用utf8字符集的db2数据库
create database db2 charset=utf8;
- 创建一个使用utf字符集,并带校对规则的db3数据库
create database db3 charset=utf8 collate utf8_general_ci;
对于collate关键字的了解
"collate" 是一个英语单词,用于描述将文本或数据按一定规则排序的过程。
在计算机领域中,"collate" 通常指按照特定字符排序规则将文本或数据进行比较和排列的处理过程。 "collate" 在英语中还有其他含义,比如在打印机中,"collate" 指让打印机按照顺序逐个打印多页文档的各个副本。
在数据库中,"collate" 则指定了针对某个字段的搜索和排序方式。 在计算机编程中,我们通常会使用 "collate" 关键字来指定文本的排序方式。
例如,在 MySQL 数据库中,可以使用 "COLLATE" 关键字来指定某个字段的排序规则,如:
SELECT name FROM users ORDER BY name COLLATE utf8_general_ci;
这条语句将按照 "utf8_general_ci" 的排序规则对 "users" 表中的 "name" 字段进行排序。
总之,"collate" 是一个描述文本或数据排序的英语单词,在计算机领域中常用于描述按照特定字符排序规则将文本或数据进行比较和排列的处理过程。
2.3字符集和校验规则
对于utf8的了解
UTF-8 是一种在计算机系统中用于存储和传输 Unicode 字符集的编码方式。Unicode 是一个国际编码标准,用于表示世界上所有的符号和字符,包括各种文字、标点符号、数学符号、音符等。 UTF-8 采用的是一种变长编码方式,使用 1~4 个字节来表示一个 Unicode 字符,可以表示包含所有 Unicode 字符的字符集。与传统的固定长度编码方式相比,UTF-8 更加节约空间,在存储和传输大量文本数据时使用更加高效,同时也方便了软件开发人员的工作。 UTF-8 在计算机领域中得到了广泛的应用,在互联网上成为事实上的标准编码方式,被多数网站所采用。许多操作系统、应用程序、数据库等也都默认使用 UTF-8 编码方式来存储和处理各种语言和字符集。
总之,UTF-8 是一种用于存储和传输 Unicode 字符集的编码方式,采用变长编码方式,具有节约空间、高效、支持多语言等特点,在计算机系统中得到了广泛应用。
对Unicode的了解
Unicode 是一个国际编码标准,用于表示世界上所有的符号和字符,包括各种文字、标点符号、数学符号、音符等。它旨在为文本处理领域内的所有字符集提供一种统一的编码方式,以解决各种语言和字符集之间的兼容性问题。
Unicode 定义了数千个字符,每个字符都有一个唯一的编号,称为码点(Code Point)。这些码点采用十六进制表示,例如,字母 A 的码点为 U+0041,中文汉字的码点范围则在 U+4E00 ~ U+9FFF。
为了表示这些码点,Unicode 采用了多种编码方式,其中最常用的是 UTF-8、UTF-16 和 UTF-32。这些编码方式在存储和传输时采用不同的位元组序列,以便于计算机程序进行处理和识别。 Unicode 在计算机领域中得到了广泛的应用,特别是在多语言环境下的计算机系统和互联网应用中。许多操作系统、应用程序、数据库等都默认使用
Unicode 编码方式来存储和处理各种语言和字符集。 总之,Unicode 是一个国际编码标准,用于表示世界上所有的符号和字符,采用多种编码方式,其中最常用的是 UTF-8、UTF-16 和 UTF-32,被广泛应用于计算机系统和互联网领域。
对校验规则的理解
校验规则是用于约束表中数据的一种数据库约束。它定义了表中某列数据的取值范围或格式,用于保证表中数据的合法性和一致性。 根据不同的需求和数据类型,可以定义各种不同的校验规则,如:
1. 数据类型校验规则:用于确定某列数据的数据类型,如整数、浮点数、字符等。
2. 非空校验规则:用于规定某列数据不允许为空,确保在插入或更新数据时该列数据不会为空。
3. 唯一性校验规则:用于确保某列数据的取值在表中唯一,避免重复数据的出现。
4. 外键校验规则:用于定义两个表之间的关系,确保表中某列的取值在另一表中存在。
5. 正则表达式校验规则:用于规定某列数据的格式,如邮箱格式、手机号格式等。
校验规则可以通过 SQL 语句在表的创建或修改时进行定义,也可以在已有表中通过 ALTER TABLE 语句进行修改。一旦定义了校验规则,表中数据的插入、更新和删除操作都将受到约束,保证表中数据的合法性和一致性。
总之,校验规则是用于约束表中数据的一种数据库约束,用于保证表中数据的合法性和一致性。根据不同的需求和数据类型,可以定义各种不同的校验规则,如数据类型校验规则、非空校验规则、唯一性校验规则、外键校验规则、正则表达式校验规则等。
MySQL数据库中常用的字符集排序规则
以下是 MySQL 数据库中常用的字符集排序规则:
1. utf8_general_ci:不区分大小写的通用排序规则,适用于多语言环境下的应用。
2. utf8_unicode_ci:基于 Unicode 标准的排序规则,支持各种语言的字符排序,保证排序的精确性和正确性。
3. utf8_bin:区分大小写的二进制排序规则,将字符串视为二进制数据,按每个字节的顺序进行比较和排序。
4. utf8_general_cs:区分大小写的通用排序规则,与 "utf8_general_ci" 排序规则类似,但是大小写被视为不同的字符。
5. utf8_unicode_cs:基于 Unicode 标准的区分大小写排序规则,与 "utf8_unicode_ci" 排序规则类似,但是大小写被视为不同的字符。
6. utf8mb4_general_ci:类似于 "utf8_general_ci" 排序规则,但支持更广泛的字符集,适用于 MySQL 5.5.3 及以上版本。
7. utf8mb4_unicode_ci:类似于 "utf8_unicode_ci" 排序规则,但支持更广泛的字符集,适用于 MySQL 5.5.3 及以上版本。
除了上述常用的字符集排序规则外,MySQL 数据库还提供了许多其他字符集排序规则,如 latin1_swedish_ci、gb2312_chinese_ci、gbk_chinese_ci、big5_chinese_ci 等,具体使用哪种排序规则需要根据应用场景和要求来选择。
1)utf8_general_ci的理解
"utf8_general_ci" 是 MySQL 数据库中的一种字符集排序规则,用于指定在对字符串进行比较和排序时所使用的规则。在这种排序规则下,只要两个字符串的 Unicode 编码在一定范围内相同,就会被认为是相等的。"ci" 表示不区分大小写,即 "A" 和 "a" 被认为是相等的。 "utf8_general_ci" 是较为常用的排序规则之一,特别适合用于多语言环境下的应用,因为它不追求精确的排序和比较,而是着重于处理多语言字符集之间的兼容性,能够支持各种语言的字符排序。
如果应用程序需要更精确的排序和比较,可能需要使用其他排序规则,比如 "utf8_unicode_ci" 或 "utf8_bin"。 总之,"utf8_general_ci" 是 MySQL 数据库中的一种字符集排序规则,用于指定在对字符串进行比较和排序时所使用的规则。它适合用于多语言环境下的应用,能够支持各种语言的字符排序。
2)utf8_unicode_ci的理解
"utf8_unicode_ci" 是 MySQL 数据库中的一种字符集排序规则,用于指定在对字符串进行比较和排序时所使用的规则。相对于 "utf8_general_ci" 排序规则,"utf8_unicode_ci" 更加精确和灵活,能够更好地处理各种国际字符集,包括多语言字符、符号和表情符号等。
"utf8_unicode_ci" 排序规则使用 Unicode 标准定义的排序算法进行排序,这种排序算法能够处理全球范围内的所有字符,能够支持各种语言的字符排序,能够保证排序的精确性和正确性。
"utf8_unicode_ci" 中的 "ci" 表示不区分大小写,即 "A" 和 "a" 被认为是相等的。如果需要区分大小写,可以使用 "utf8_unicode_cs" 排序规则。
总之,"utf8_unicode_ci" 是 MySQL 数据库中的一种字符集排序规则,能够更好地处理各种国际字符集,包括多语言字符、符号和表情符号等。它使用 Unicode 标准定义的排序算法进行排序,支持各种语言的字符排序,能够保证排序的精确性和正确性。
3)utf8_unicode_cs 的理解
"utf8_unicode_cs" 是 MySQL 数据库中的一种字符集排序规则,也是基于 Unicode 标准的排序规则,与 "utf8_unicode_ci" 排序规则类似,但是大小写被视为不同的字符。
在 "utf8_unicode_cs" 排序规则下,字符串的比较和排序将考虑大小写字母的差异,即 "A" 和 "a" 被认为是不同的字符。此外,它还将考虑字符之间的语义或规则,即对于拥有相同 Unicode 码位但不同字符属性的字符,它们将被视为不同的字符。
相比于 "utf8_general_ci" 和 "utf8_unicode_ci" 排序规则,"utf8_unicode_cs" 排序规则的比较和排序更为精确和严格,适用于需要精确比较和排序的场景,如排序中文字符或进行数字大小比较等。
总之,"utf8_unicode_cs" 是 MySQL 数据库中的一种基于 Unicode 标准的排序规则,与 "utf8_unicode_ci" 排序规则类似,但大小写被视为不同的字符,并考虑字符之间的语义或规则。它适用于需要精确比较和排序的场景,如排序中文字符或进行数字大小比较等。
4)utf8_bin的理解
"utf8_bin" 是 MySQL 数据库中的一种字符集排序规则,用于指定对字符串进行比较和排序时所使用的规则。与 "utf8_general_ci" 和 "utf8_unicode_ci" 排序规则不同,"utf8_bin" 是一种区分大小写的排序规则,它将字符串视为二进制数据,按每个字节的顺序进行比较和排序。
在 "utf8_bin" 排序规则下,大小写字母被视为不同的字符,即 "A" 和 "a" 被认为是不同的字符。此外,它不会像 "utf8_general_ci" 和 "utf8_unicode_ci" 排序规则一样考虑字符之间的语义或规则,只是简单地比较字符的字节值。
"utf8_bin" 排序规则适用于需要精确扫描和比较二进制数据的场景,比如对二进制文件和加密数据进行比较和排序,或者在字符串中包含二进制数据时进行比较和排序。
总之,"utf8_bin" 是 MySQL 数据库中的一种字符集排序规则,适用于需要精确扫描和比较二进制数据的场景。它将字符串视为二进制数据,按每个字节的顺序进行比较和排序,不考虑字符之间的语义或规则,并视大小写字母为不同的字符。
为什么要有字符集排序规则
字符集排序规则是为了在处理或比较字符串时,能够按照正确的顺序比较或排序字符,以保证数据的正确性和一致性。在不同的字符集中,不同的字符所对应的编码值是不同的,如果不按照字符集排序规则进行比较或排序,可能会导致以下问题:
1. 不同字符的排序不一定准确:在不同的字符集中,相同的字符可能对应不同的编码值,如果不按照字符集排序规则进行比较或排序,可能导致相同的字符排在不同的位置,破坏数据的正确性和一致性。
2. 不同字符的比较可能不准确:在不同的字符集中,不同的字符可能对应相同的编码值,如果不按照字符集排序规则进行比较或排序,可能会将不同的字符认为是相同的,从而导致数据处理错误。
3. 不同语言字符的处理可能不一致:不同语言使用的字符集可能不同,如果没有相应的字符集排序规则进行处理,可能会导致在处理不同语言的字符时出现错误。
因此,为了保证数据的正确性和一致性,需要根据不同的字符集定义相应的字符集排序规则,用于在处理或比较字符串时按照正确的顺序进行比较或排序字符。在 MySQL 数据库中,提供了多种字符集排序规则供用户选择,以便根据不同的需求和应用场景选择合适的字符集排序规则。
2.3.1查看系统默认字符集以及校验规则
show variables like 'character_set_database';
show variables like 'collation_database';
2.3.2查看数据库支持的字符集
show charset;
字符集主要就是控制用什么语言,比如utf8就可以使用中文
2.3.3查看数据库支持的字符集校验规则
show collation;
2.3.4校验规则对数据库的影响
- 不区分大小写
创建一个数据库,校验规则使用utf8_general_ci(不区分大小写)
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
- 区分大小写
创建一个数据库,校验规则使用utf8_bin(区分大小写)
create database test2 collate utf8_bin;
use test2;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
- 进行查询(select * from person where name='a';)
不区分大小写的查询以及结果
区分大小写的查询以及结果
- 结果排序 ( select *from person order by name;)
不区分大小写的排序以及结果
区分大小写的排序以及结果
2.4操纵数据库
2.4.1查看数据库
show databases;
2.4.2显示创建语句
show create darbase 数据库名;
说明:
- MySQL建议我们关键字用大写,但是不是必须的
- 数据库名字的反引号‘’,是为了防止使用的数据库名刚好是关键字
在 MySQL 中,反引号通常用于引用数据库名、表名、字段名等标识符,以避免与 MySQL 关键字发生冲突。当标识符中包含空格、特殊字符(如 $、@、#、% 等)或 MySQL 关键字时,需要使用反引号将其括起来
- /*!40100 default ...*/这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话
2.4.2修改数据库
语法:
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_specification:
[DEFAULT]CHARACTER SET charset_name
[DEFAULT]COLLATE collation_name
说明:
ALTER 语句是 MySQL 数据库中用于修改表结构的语句,可以用于添加、修改和删除表的列、约束和属性等。
数据库最好不要修改,自己一旦建好数据库,就尽量不要动,可能会导致上层应用从拿数据开始就出问题,提醒自己提前要把所有的需求都搞清楚。
程序员最喜欢改的是业务逻辑,最讨厌改的就是数据库,一旦有什么新的影响,上层的逻辑代码需要推翻重搞,所有要么前期把需求弄清楚,要么要有合理的数据库扩展方案。不要简单认为数据库的内容可以随便改。
从删库到跑路。咳咳
2.4.3 删除数据库
DROP DATABASE [IF EXISTS] db_name;
执行删除之后的结果:
- 数据库内部看不到对应的数据库
- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
级联删除
级联删除(Cascading Delete)是一种数据库约束操作,其作用是在主表和从表之间建立关系后,当在主表中删除一条记录时,从表中相关的记录也会被删除,以维护数据的一致性。 例如,假设我们有一个订单表(Orders)和一个订单详情表(OrderDetails),且订单详情表的每一条记录都与订单表中的某一条订单相关联。如果我们将主键和外键约束应用于这两个表,那么在删除订单表中的某一条记录时,会自动删除订单详情表中与该订单相关的所有记录,以保持数据的完整性。
在 MySQL 中,可以使用 ON DELETE CASCADE 选项来实现级联删除。其语法如下:
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
OrderDate date,
CustomerID int,
...
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON DELETE CASCADE
);
CREATE TABLE OrderDetails (
OrderDetailID int PRIMARY KEY,
OrderID int,
ProductID int,
...
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID) ON DELETE CASCADE
);
```
在上述示例中,我们在 OrderDetails 表的 FOREIGN KEY 约束中使用了 ON DELETE CASCADE 选项,以实现级联删除。
2.4.5备份和恢复
2.4.5.1备份
在 Windows 操作系统中,我们可以使用 MySQL 自带的 mysqldump 工具来备份 MySQL 数据库。其语法如下:
mysqldump -u username -p password --opt database_name > backup_file.sql
其中,参数说明如下:
- username:登录 MySQL 数据库的用户名。
- password:登录 MySQL 数据库的密码。
- database_name:要备份的数据库名称。
- backup_file.sql:备份文件的名称及路径(可自定义)。
例如,我们要备份名为 “testdb”的数据库,用户名为 “root”,密码为 “123456”,备份文件保存到 “D:\backup.sql” 文件中。则备份命令如下:
```
mysqldump -u root -p123456 --opt testdb > D:\backup.sql
```
如果要恢复备份文件,则可以使用以下命令:
```
mysql -u username -p password database_name < backup_file.sql
```
其中,参数说明同上,不再赘述。如果要恢复上述备份文件,则命令如下:
mysql -u root -p123456 testdb < D:\backup.sql
```
需要注意的是,在备份和恢复过程中,MySQL 数据库服务必须处于运行状态。另外,在备份的同时也要注意保密数据,避免泄露。
2.4.5.2还原
在 Windows 操作系统中,我们可以使用 MySQL 自带的 mysql 命令行工具来恢复 MySQL 数据库。其语法如下:
mysql -u username -p password database_name < backup_file.sql
其中,参数说明如下:
- username:登录 MySQL 数据库的用户名。
- password:登录 MySQL 数据库的密码。
- database_name:要恢复的数据库名称。
- backup_file.sql:备份文件的名称及路径。
例如,我们要恢复名为 “testdb”的数据库,用户名为 “root”,密码为 “123456”,备份文件为 “D:\backup.sql”。则恢复命令如下:
```
mysql -u root -p123456 testdb < D:\backup.sql
```
需要注意的是,在恢复数据库之前需要先创建一个同名的空数据库,否则会导致恢复失败。另外,在恢复过程中,MySQL 数据库服务必须处于运行状态。
.sql是什么
.sql是 Structured Query Language (SQL) 的缩写,表示SQL语言的脚本文件。SQL是一种用于管理关系型数据库的语言,可以用于创建、修改和查询数据库中的表格、字段、记录等。一般来说,一个.sql文件包含了一系列的SQL语句,可以通过数据库管理工具或命令行工具来执行这些语句,实现对数据库的操作,比如数据库备份、数据恢复、表结构更新等。
2.4.6查看连接状况
语法:
show processlist;
示例:
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登录的,很有可能你的数据库被人入侵了,以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
总结
真累,太难肝了。