(MySQL)库的操作

目录

创建数据库

语法

创建数据库实例

不使用可选项

使用可选项1

字符集和校验规则

校验规则对数据库的影响

不区分大小写

查看配置

添加可选项2

操纵数据库

使用数据库

查看数据库

查看所有数据库

查询当前正在使用的数据库名称

显示创建数据库语句

修改数据库

数据库删除

查看相关线程和数据库连接情况


我们来学习MySQL库的操作

创建数据库

语法

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]

create_specification:

DEFAULT\] CHARACTER SET charset_name \[DEFAULT\] COLLATE collation_name

大写的表示关键字,都可以使用小写,[] 是可选项,CHARACTER SET: 指定数据库采用的字符集,COLLATE: 指定数据库字符集的校验规则,然后[IF NOT EXISTS]是指明数据库不存在才创建

我们不指定MySQL对这个库的编码格式以及校验规则就会使用自己默认的。

创建数据库实例

不使用可选项

可以看到每个MySQL语句就结束都是要加;表示语句结束的。我们确实创建了两个数据库d1和d2。

MySQL这个文件我们安装在了/var/lib/mysql目录下,打开可以看到其子目录确实显示了我们创建的两个数据库,所以数据库可以看成MySQL这个软件的一个一个的子目录。

使用可选项1

使用可选项[IF NOT EXISTS]

可以看到,第一次增加[IF NOT EXISTS]字段确实成功创建了d3数据库,然后第二次创建同名数据库时就无法成功创建了,并且由于[IF NOT EXISTS]字段的添加而产生了一个警告。

当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则 是:utf8_ general_ ci,那字符集和校验规则是什么呢?

字符集和校验规则

字符集定义了MySQL能够存储哪些字符以及如何编码这些字符,字符集叫做charset。

show charset; //用于查看数据库支持的字符集

show variables like 'character_set_database'; //用于查看系统默认字符集
show variables like 'collation_database'; //查看系统默认校验规则

在 MySQL 中,执行 SHOW VARIABLES LIKE 'collation_%'; 可以查看当前与排序规则(Collation)相关的系统变量设置。这个命令会返回所有以 collation_ 开头的系统变量,它们决定了字符串比较和排序的行为。

在 MySQL 的 SHOW VARIABLES LIKE 'collation_%'; 语句中,% 是一个 通配符(wildcard) ,表示匹配任意长度的任意字符(类似于正则表达式中的 .*)。这里的 % 表示匹配 'collation_' 之后的所有字符。也就是%前面一致的都会被匹配上。

show collation; //用于查看数据库支持的字符集

校验规则对数据库的影响

不区分大小写

创建一个数据库,校验规则使用utf8_ general_ ci,这种格式是不区分大小写的,而如果采用校验规则为utf8_ bin就是区分大小写的。这种区别会使得查询/排序某个字段/信息时会有差别。我们在后面的表的插入部分会验证这个差别。

查看配置

在 MySQL 中,db.opt 是一个 数据库配置文件 ,用于存储该数据库的默认字符集(Character Set)和排序规则(Collation)设置。它位于数据库对应的目录下,通常位于 MySQL 的数据目录(如 /var/lib/mysql/数据库名/)。

添加可选项2

添加字符集(编码格式)以及校验规则时是不能随便乱加的,字符集(CHARACTER SET)和排序规则(COLLATE)必须兼容才能一起使用。如下:

cp1251_general_ci 这个排序规则(collation)是专门为 cp1251 字符集准备的,而你创建数据库时使用的是 utf32 字符集,两者 不兼容,所以报错了。

当默认格式可以满足我们的存储需求时,我们一般不进行主动设置。

自定义字符集还可以使用character set 相应的编码格式的形式进行添加。

可以看到charset进行设置时是可以直接尾随相应的编码格式的,不需要显示的添加等号。

操纵数据库

使用数据库

use 数据库库名 //表示使用规定库名的数据库

创建好了数据库,要让其发挥作用肯定首先要使用它。

在 MySQL 中,当你执行 USE d2; 并看到 Database changed 的提示时,它的意思是:"当前会话(连接)的默认数据库已成功切换为 d2",也就是说一个会话只能使用一个数据库。

查看数据库

查看所有数据库

show databases; //查看当前MySQL内部的所有的数据库

我们刚刚创建了很多个数据库,现在可以看下。注意,由于MySQL内部的数据库有很多,所以查看时记得是databases

除了刚刚创建的很多d开头的数据库,其他的都是原MySQL内置的数据库。

查询当前正在使用的数据库名称

select database(); //查询当前正在使用的数据库名称

SELECT database() 是 MySQL 中的一个函数,用于查询当前正在使用的数据库名称。

SELECT ------ 标准的 SQL 查询关键字,用于检索数据,就是查找的意思,真正的函数部分是database(),database() ------ 一个无参数的函数,返回当前会话(连接)所使用的数据库名称。

所以整个语句连起来就是查询当前正在使用的数据库名称。

如果没有事先选择要使用的数据库直接运行这个函数就会显示为空。

显示创建数据库语句

show create database 数据库名; //用于显示常见数据库语句

MySQL 建议我们关键字使用大写,但是不是必须的,数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字,/*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话。

修改数据库

对数据库的修改主要指的是修改数据库的字符集,校验规则。

ALTER DATABASE db_name [alter_spacification [,alter_spacification]...]

alter_spacification:

DEFAULT\] CHARACTER SET charset_name \[DEFAULT\] COLLATE collation_name

使用alter database进行修改对应数据库的字符集以及校验规则,并重新赋值新的校验规则和字符集,也并非一次就连着两个都该,alter database语句允许只修改其一。

不建议随便修改数据库的字符集和校验规则。

数据库删除

drop database [IF EXISTS] db_ name;

就是根据数据库名,删除对应的数据库,如果待删除的数据库存在则执行完后数据库内部看不到对应的数据库,对应的数据库文件夹被删除,级联删除,里面的数据表全部被删,所以可以添加字段约束[IF EXISTS]表示判断是否存在。

注意:不要随意删除数据库

当然数据库作为mysql之下的一个目录,我们还可以使用Linux的rm -rf删除语句进行删除,但是我们极其不推荐这种使用Linux语句直接删除的做法。

rm -rf //删除数据库

查看相关线程和数据库连接情况

show processlist;//查看线程连接数据库情况

show processlist;是 MySQL 中的一个非常实用的命令,用于查看当前连接到数据库服务器的线程(也叫"连接")的状态。执行后会显示一个类似表格的结果,每一行代表一个线程。

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你 的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

相关推荐
GottdesKrieges5 分钟前
OceanBase数据库磁盘空间管理
java·数据库·oceanbase
Themberfue1 小时前
Redis ⑦-set | Zset
java·开发语言·数据库·redis·sql·缓存
iRayCheung3 小时前
Docker安装的mysql限制ip访问
tcp/ip·mysql·docker
八股文领域大手子6 小时前
深入理解缓存淘汰策略:LRU 与 LFU 算法详解及 Java 实现
java·数据库·算法·缓存·mybatis·哈希算法
noravinsc6 小时前
django admin 中更新表数据 之后再将数据返回管理界面
数据库·django·sqlite
Bruce-li__8 小时前
DRF凭什么更高效?Django原生API与DRF框架开发对比解析
数据库·django·sqlite
郭不耐8 小时前
PostgreSQL与MySQL哪个适合做时空数据分析?
mysql·postgresql·数据分析
noravinsc9 小时前
connection.cursor() 与 models.objects.filter
数据库·django·原生查询·orm查询
YH.10 小时前
MySQL 主从复制
mysql