目录
1.MySQL数据库中的用户管理与登录
1.1用户管理
root用户
其他用户
1.2MySQL数据库的登录
2.使用MySQL的前置知识
2.1SQL语言
SQL语言简介
SQL语句的分类
2.2编码集的认识
字符集
校验集
字符集和校验集的关系
如何查看和修改字符集与校验集
3.MySQL数据库的操作
3.1库的操作
创建数据库
查看数据库
修改数据库
删除数据库
数据库的备份与恢复
备份
恢复
恢复数据库的原理
查看数据库连接情况
3.2表的操作
创建表
查看表
修改表
添加记录
添加一列
修改某一列的属性
删除某一列
修改表名
修改列名
删除表
1.MySQL数据库中的用户管理与登录
MySQL数据库需要保证用户数据的安全性,所以MySQL数据库具有用户管理功能;正是因为有了数据库管理功能,所以我们在数据数据库的时候 就需要进行登录验证,只有登录成功才能使用MySQL数据库的服务。
1.1用户管理
MySQL数据库中的用户分为root用户和其他用户。
root用户
当我们在安装好MySQL数据库之后,MySQL通常会为我们创建一个默认用户 —— root 。root用户是MySQL数据库中的超级管理员用户,这一点和Linux操作系统是一样的;root用户具有数据库的所有操作权限,是MySQL数据库中最重要且权限最高的用户;root用户在初始状态下没有密码,所以我们需要给 root 用户设置密码,如果你想将root用户的密码设置为new_password,可以使用如下命令
为没有密码的root用户设置密码:
mysqladmin -u root password 'new_password'
其他用户
在MySQL中,其他的用户需要我们来创建,如果你想创建一个名为newuser的用户,可以使用如下命令
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
其中,newuser是用户名,password是密码,localhost指的是MySQL服务器所在的地址。
我们还可以使用如下命令查看MySQL中有哪些用户
SELECT User, Host FROM mysql.user;
好了,设置好用户和密码之后,就可以登录MySQL数据库了。
1.2MySQL数据库的登录
我们可以使用以下命令来登录MySQL数据库
mysql -h 'host' -P 3306 -u 'username' -p
其中,-h用来指明要登录的部署了MySQL服务的主机,-P 表明我们要访问的端口号,-u指明登录用户,-p指明需要输入密码。
注意:我们输入密码的时候,是不会回显的。
说明
主机名:如果不使用-h选项指明需要需要登录的主机名,默认情况下,登录MySQL时连接到的是本地的MySQL服务器,即 127.0.0.1;
端口号:MySQL服务器的默认端口号是3306。在大多数情况下,不需要在登录命令中显式指定端口号,因为MySQL客户端会尝试连接到默认端口。如果需要连接到非默认端口的MySQL服务器,可以使用-p选项后跟端口号。
2.使用MySQL的前置知识
2.1SQL语言
SQL语言简介
MySQL数据库中维护的是一个个的数据库,数据库中维护的是一张张的表,所以我们对MySQL数据库进行操作无非就是 操作库 和 操作表。
操作数据库,需要我们能够和数据库进行对话。就好比人与人之间的对话依靠自然语言,人和计算机之间进行对话的时候需要依靠编程语言,同理,人和数据库进行对话的时候,就需要数据库语言;于是SQL语言就诞生了,SQL是一种结构化查询语言,用于对数据库进行操作。几乎所有的数据库系统都支持SQL语言。
SQL语句的分类
我们使用SQL语言时,使用的其实是一条条的SQL语句,SQL语句可以被大致分为三类:
1、DDL【data definition language】 数据定义语言,用来维护存储数据的结构,代表指令: create, drop, alter
2、DML【data manipulation language】 数据操纵语言,用来对数据进行操作,代表指令: insert,delete,update
3、DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务,代表指令: grant,revoke,commit
注意:DML中又单独分了一个DQL,数据查询语言,代表指令: select
2.2编码集的认识
创建数据库的时候,有两个编码集,一个是字符集,一个是校验集。我们可以指定字符集和校验集来创建数据库,当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci
字符集
编码集是指用于表示文本字符的编码方案。在MySQL中,每个数据库和数据表都可以指定自己的编码集,这决定了数据库中字符数据的存储方式。常见的MySQL编码集包括:
- UTF-8:一种广泛使用的Unicode编码,可以表示世界上几乎所有的字符,非常适合在多语言环境中使用。
- GBK:一种中文字符集编码,用于表示中文字符和一些特殊字符,广泛用于中文环境。
- Latin1:一种较旧的西欧语言字符集编码,不支持多语言和特殊字符。
校验集
校验集是指字符集中的字符如何进行比较和排序的规则。在MySQL中,每个字符集都可以有多个校验集,这些校验集定义了字符的比较和排序方式。例如,对于UTF-8编码集,就有多种校验集,如utf8_general_ci(不区分大小写)和utf8_bin(区分大小写和二进制比较)。常见的MySQL校验集如下:
- utf8_general_ci:这是UTF-8字符集的一个常用校验集,其中“ci”表示不区分大小写(case-insensitive)。它适用于大多数需要处理多语言文本的场景,并且不区分字符的大小写。
- utf8_bin:与utf8_general_ci相对应,utf8_bin是区分大小写和二进制比较的校验集。它在进行字符比较时会考虑字符的二进制表示,因此更加精确但可能不适用于所有场景。
- latin1_swedish_ci:这是Latin1字符集的一个常用校验集,使用瑞典语规则进行字符比较,同样不区分大小写。Latin1字符集主要用于西欧语言。
- gbk_chinese_ci:这是GBK字符集的一个校验集,适用于中文环境,不区分大小写。GBK字符集是对GB2312的扩展,支持更多的中文字符。
字符集和校验集的关系
- 字符集决定了字符的存储方式:它定义了如何将字符映射到字节序列。
- 校验集决定了字符的比较和排序方式:它定义了字符集内字符之间的比较规则,影响数据库的查询、排序等操作。
如何查看和修改字符集与校验集
-
查看当前数据库的字符集和校验集:
SHOW VARIABLES LIKE 'character_set_database'; -- 查看数据库字符集
SHOW VARIABLES LIKE 'collation_database'; -- 查看数据库校验集
-
修改数据库的字符集和校验集:
ALTER DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_general_ci;
3.MySQL数据库的操作
3.1库的操作
创建数据库
创建数据库语法格式如下:
CREATE DATABASE IF NOT EXISTS database_name [CHARACTER SET charset_name] [COLLATE collation_name];
说明:
大写的表示关键字
[] 是可选项
CHARACTER SET: 指定数据库采用的字符集
COLLATE: 指定数据库字符集的校验规则
使用示例:
查询数据库:
可以看到数据库创建成功。当然,你也可以指定编码集和校验集来创建数据库。
创建数据库的到底是在干什么呢?
我们可以使用 ls -l 命令查看 /var/bin/mysql 目录
可以以看到我们前面创建的test_database居然在这个目录里面,并且最开始的d表明这是一个目录,所以创建数据库的本质就是在 /var/bin/mysql 目录下创建一个目录。
查看数据库
我们可以使用 show database;语句来查看MySQL中有哪些数据库
如果我们忘记了当时是怎么创建数据库的,我们还可以使用 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
使用示例:
我们可以使用 show create database test_database 命令查看是否修改test_database数据库的字符集成功
可以看出修改字符集成功。
删除数据库
删除数据库语法如下:
DROP DATABASE [IF EXISTS] db_ name;
使用示例:
当我们再次使用show database命令查看MySQL中的数据库时,就查不到test_database数据库了
删除数据库,数据库中的文件全部被删除,轻易不要删除数据库。
数据库的备份与恢复
备份
当我们要删除数据库的时候,最好是将数据库进行备份。如何备份数据?我们可以使用mysqldump这个工具,在Linux命令行输入下面的命令
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
通过这条命令就可以将指定的数据库备份到指定的目录下了;
备份示例:新建了一个BackMysql目录,第一次使用ls查看时,该目录中啥也没有,然后使用mysqldump工具,将数据库中的test_db2数据库备份到BackMysql目录中,并指定名称为test_db2.sql,当我们再次查看时,我们发现该目录中多了一个test_db2.sql文件,说明备份成功。
恢复
备份好了之后,我们删除数据库中的test_db2。
删除完之后,我们进行恢复,恢复数据库 的语法格式如下
source 要恢复的文件路径
恢复示例:我们输入 source /home/ubuntu/BackMysql/test_db2.sql 命令
当我们再次查看MySQL中的数据库时,test_db2又存在了。
恢复数据库的原理
我们可以查看一下test_db2.sql中的内容,我们发现,它不仅备份了数据,而且还备份了该数据库的操作。
当我们恢复数据库时,可以看到许多的 Query OK!这说明当我们恢复数据库的时候,MySQL会将备份文件中的所有sql语句执行一遍。这样我们就将删除的数据库恢复出来了。
注意事项:
如果备份的不是整个数据库,而是其中的一张表,可以使用以下语句:
mysqldump -u root -p 数据库名 表名1 表名2 > 指定的路径
同时备份多个数据库,可以使用以下语句:
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
查看数据库连接情况
如果我们在使用数据库的时候,发现数据库比较慢时,我们可以使用以下命令来查看当前有哪些用户连接到我们的MySQL
show processlist
3.2表的操作
创建表
语法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;说明:
field 表示列名
datatype 表示列的类型
character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
示例:
其中comment 是描述字段。
创建表的本质是什么呢?
我们可以使用 ls -l /var/lib/mysql/test_db2/ 命令查看test_db2中的内容
我们可以看到test_db2目录下多了几个文件,所以,创建表的本质就是创建文件;并且我们可以清晰的观察到存储users表时存储了三个文件,这就是MySAM存储引擎下的存储格式。
不同的存储引擎存储表的格式不同,我们可以再创建一张stu表,使用默认的存储引擎,观察stu表的存储格式
查看表
我们创建表之后,可以查看当前数据库中的表、某张表的结构以及表中的内容
查看数据库中的表:
我们可以使用 show tables 查看当前数据库中有哪些表
查看表的结构:
我们可以使用 desc 表名 的方式查看某张表的结构
查看表中的内容:
我们可以使用select * from 表名 的方式查看某张表中的内容
可以看出当前表中什么也没有。
如果你忘记当时是怎么创建这张表的了,还可以使用 show create table 表名 \G 的方式查看创建该表的语句。
修改表
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
添加记录
我们可以使用 insert into 表名 values (个属性字段的值);来向指定的表中添加记录
当我们添加完记录之后,就可以查看到表中的这条记录了。
添加一列
我们可以使用 alter table 表名 add 新添加的列名 after 列名;在指定列的后面添加一列
我们可以查看一下表中的数据,我们发现新添加的属性字段不会影响原来的数据,但是默认是空。
并且我们发现创建表的语句也发生了变化。
修改某一列的属性
我们可以使用 alter table 表名 modify 要修改的列名 新的属性 来修改列的属性
我们可以查看一下创建表的语句,我们发现,创建这个属性的描述字段没有了,说明,修改属性字段的时候,是用新的属性字段覆盖旧的属性字段。
删除某一列
我们可以使用 alter table 表名 drop 要删除的列名;来删除某一列
当我们执行完该语句之后,查看表的结构,我们发现,password 这一列没有了
并且这一列的数据也都删除了
修改表名
我们可以使用 alter table 表名 rename to 新的表名 来修改表名;其中 to 是可以省略的。
我们可以看到表名确实发生了修改。
修改列名
我们可以使用 alter table 表名 change 要修改的属性名 新的属性名 新属性的类型; 来对列名进行修改。
我们可以看到原来的name列被修改成了clients。
删除表
我们可以通过这条语句来删除表:
drop table 表名;
我们将stu表进行删除。
注意:数据库是程序中比较底层的东西,我们轻易不要对表和库做删除、修改操作,一旦修改和删除库或表,上层使用该库或表的东西都要改变。