目录
一.数据库基础
1.1什么是数据库
1.2基本使用
1.2.1连接服务器
1.2.2服务器,数据库,表关系
1.2.3使用案例
1.2.4数据存储结构
编辑
1.3MySQL架构
1.4SQL分类
1.5存储引擎
1.5.1什么是存储引擎
1.5.2查看存储引擎
编辑
1.5.3存储引擎对比
编辑 二.库的操作
2.1创建和删除数据库
2.2创建数据库案例
2.3字符集和校验规则
2.3.1查看系统默认的字符集和校验规则
编辑
2.3.2查看数据库支持的字符集
2.3.3查看数据库支持的字符集校验规则
2.3.4校验规则对数据库的影响
2.4操纵数据库
2.4.1数据库删除
2.4.2数据库查看
编辑
2.4.3数据库的修改
2.4.4备份和恢复
2.4.4.1备份
2.4.4.2恢复
2.4.4.3注意
2.4.5查看连接情况
三.表的操作
3.1创建表
3.2查看表结构
3.3修改表
3.3.1修改表名:
3.3.2插入数据:
3.3.3修改表里数据
3.4删除表
一.数据库基础
1.1什么是数据库
数据库是一个用于存储和管理数据的系统。它可以帮助用户组织、检索、更新和管理大量数据。
mysql是数据库服务的客户端,mysqld是数据库服务的服务端,它的本质就是基于CS模式的网络服务。
文件保存数据有以下几个缺点:
文件的安全性问题
文件不利于数据查询和管理
文件不利于存储海量数据
文件在程序中控制不方便
比如我们在一个普通文件里写入大量的数据(十万行十亿行),那么多的数据在普通文件里,我们如果想要管理起来这是非常麻烦的一件事,比如我要修改十亿行数据里的第一百万行,怎么搞?
所以数据库本质就是:对数据库内容存储的一套解决方案。
1.2基本使用
1.2.1连接服务器
输入:mysql -h 127.0.0.1 -P 3306 -u root -p
或者:mysql -uroot -p
注意:
如果没有写 -h 127.0.0.1 默认是连接本地
如果没有写 -P 3306 默认是连接3306端口号
端口号我们自己也可以去改。打开/etc/my.cnf文件修改。
1.2.2服务器,数据库,表关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多 个数据库,一般开发人员会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
1.2.3使用案例
我创建一个helloworld:
使用数据库:
创建数据库表:
此时在/var/lib/mysql/helloworld下会多出两个student:
在表中插入和查询数据:
我们不会主动的去修改磁盘中的数据库文件,这些工作都是mysql帮我们去做的。
1.2.4数据存储结构
1.3MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
1.4SQL分类
DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create, drop, alter
DML【data manipulation language】 数据操纵语言,用来对数据进行操作 代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select
DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务 代表指令: grant,revoke,commit
1.5存储引擎
1.5.1什么是存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。 MySQL的核心就是插件式存储引擎,支持多种存储引擎。
1.5.2查看存储引擎
1.5.3存储引擎对比
二.库的操作
2.1创建和删除数据库
drop datebase (名字):
删除之后:
本质就是在/var/lib/mysql创建和删除一个目录(文件系统层面)。
所以说反过来在/var/lib/mysql目录下使用mkdir创建一个目录,也可以在数据库中使用show databases看到。(注意理解一下就行了,不要这么干)
在创建数据库层面我们还可以:
有了就不会再创建了,这是为了安全起见。
2.2创建数据库案例
那么我们在创建数据库的时候当然可以使用默认的,我们还可以进行指定:
这三种方式都可以使用默认的字符集utf8:
创建一个使用utf字符集,并带校对规则的 db3 数据库。
第四种:既指明字符集又指明检验规则:
当然上面都是针对默认的字符集和校验规则,我们也可以换其他的字符集和校验规则:
换一下这种:
这里就可以看到:
2.3字符集和校验规则
2.3.1查看系统默认的字符集和校验规则
字符集使用的是utf8
校验规则utf8_ general_ ci :
2.3.2查看数据库支持的字符集
上面写建的数据库我们都没有写明要使用哪一个字符集,所以系统就使用了默认的字符集,除了系统默认的utf8,还有以下的:
2.3.3查看数据库支持的字符集校验规则
2.3.4校验规则对数据库的影响
一个实验:使用utf8的字符集创建,但是使用不同的校验规则
不区分大小写 使用utf8_general_ci
create database test1 collate utf8_general_ci;
create之后,用use使用test1:
desc查看表结构:
然后往表里插入(utf8):
select查看表里有什么:
这里的校验规则是不区分大小写(utf8_general_ci):
区分大小写 使用utf8_bin
这里的步骤跟上面的差不多,先使用use,再创建creat table
之后还是insert into person
这里使用select去查找就只有小写的a:
上面也就只是简单的区分了一下不同的校验规则查找的差别。
2.4操纵数据库
增删查改
增:create database +(名字) charset (字符集) collate(校验规则)
适当的取用字符集和校验规则
2.4.1数据库删除
删:DROP DATABASE [IF EXISTS] db_ name;
执行删除之后的结果:
数据库内部看不到对应的数据库
对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
注意:不要随意删除数据库
2.4.2数据库查看
查:show databases;
有时候会频繁的使用use,需要确认自己在哪一个数据库里
2.4.3数据库的修改
对数据库的修改主要指的是修改数据库的字符集,校验规则
假如我们现在需要把它的字符集和校验规则改为gbk格式的:
2.4.4备份和恢复
2.4.4.1备份
语法:
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
# mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql
我想把test1数据库里的内容进行备份:
此时再开一个终端:
在test1.sql里就是下面的内容,里面存储的就是数据库里的所有的数据(和操作),我们当然也可以直接对数据库进行复制,但是这种做法的话是不建议的。我们还是要使用mysqldump:
2.4.4.2恢复
mysql> source D:/mysql-5.7.22/mytest.sql;
我们先把之前的数据库里的test1给删掉:
使用source 加上刚才在另一个终端上备份的地址:
source /root/MySQL/test1.sql
此时:
还原成功:
2.4.4.3注意
如果备份的不是整个数据库,而是其中的一张表,怎么做?
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
同时备份多个数据库
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据 库,再使用source来还原。
2.4.5查看连接情况
show processlist
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
三.表的操作
3.1创建表
CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明:
field 表示列名
datatype 表示列的类型
character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
案例:
此时的另一台终端上的mysql目录下的user_db里就会有:
不同的存储引擎,创建表的文件不一样。
users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:
users.frm:表结构
users.MYD:表数据
users.MYI:表索引
这里换一种engine:
在另一个终端上只会多出来这两种:
当我们不添加engine 的时候,会默认使用innodb:
因为在/etc/my.cnt里:
3.2查看表结构
desc 表名;
这个可以显示更详细的表信息:
show create table+表名
这样看不太方便的话可以加上\G来清除不想要的信息:
3.3修改表
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
3.3.1修改表名:
alter table user1 rename to user;
to:可以省掉
3.3.2插入数据:
3.3.3修改表里数据
添加新字段:
alter table user add image_path varchar(128) comment '用户的头像路径' after birthday;
after指明是在表的哪个位置:
修改name(修改大小):
原本的name大小是20,现在我想改为60:
alter table user modify name varchar(60);
注意:这里的修改是覆盖的修改,我们之前在写name这个字段的时候有对字段的描述commend。但是在我们修改之后,commend就会不见了。
删除password列:
alter table user drop password;
修改列名称
把name改为xingming:
注意必须把属性带上。
3.4删除表
drop table t1;