博客主页:花果山~程序猿-CSDN博客
文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客
关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!
嗨!收到一张超美的风景图,愿你每天都能顺心!
版本信息:centos7.6,mysql57
一,为什么会有数据库?
想我们电脑上的普通**文件**保存数据有以下几个**缺点**: 安全性问题 ,不利于数据查询和管理 ,不利于存储海量数据 ,控制不方便,程序员如果想要自己控制文档就需要每个程序员自己进行第二次开发,这无疑是令人恼火的,于是乎数据库工具的诞生就解决了这一个难题。
常见的数据库工具:
SQL Sever,SQLite(嵌入式),H2(java开发的嵌入式类库),Oracle(大型复杂项目), MySql(广泛使用)。
二,服务器,数据库,表的关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库, 一般开发人员会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库中创建多个表(游戏里的设置信息等的),以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
使用案例:
首先我们先在root下进入mysql客户端
mysql -h 127.0.0.1 -P 3306 -u root -p #前面mysql安装设置了免密,直接登
(-h : 主机名,这里是同一台主机当然是本地环回;
-P:端口号
-u: 用户名
-p: 密码,由于咱们已经免密了,可以直接回车进入)
首先我们跟这下面的示例,大致的走一下基本的流程,后面我们再深入学习。
三,Mysql架构
在学习mysql使用前,我们先拉高眼界,以全局视角来看mysql的架构。MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行。
下面是Mysql的基本架构
查看全部引擎:
show engines \G #\G 显示简化
常见的SQL语句命令
- DDL【data definition language】 数据定义语言,用来维护存储数据的结构,代表指令: create, drop, alter(就是对数据库的操作(文件夹的操作))
- DML【data manipulation language】 数据操纵语言,用来对数据进行操作,代表指令: insert,delete,update(对表的操作增删,更新),DML中又单独分了一个DQL,数据查询语言,代表指令: select(对表的查)
- DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务,代表指令: grant,revoke,commit。
四,数据库的操作
首先我们得了解两个编码集概念:
- 编码集:用于数据存储与读取,同一个数据库编码集得统一。
- 校验集:用于数据里面的比较,同时编码集与校验集也要标准对应。
首先,我们先查看数据库支持的编码集(字符集)及校验集:
show charset;
show collation;
查看默认的字符集,校验集:
show variables like 'character_set_database';
show variables like 'collation_database';
我们会发现默认就是utf8,原因是:我们在安装mysql时,对mysqld进行了文件配置。
1.数据库创建
create database [if not exists] data_name [charset=... collate ...]
括号内的表示可选内容:如果存在同名数据库,则不创建;如果不显示表示编码集,校验集,则使用默认集。
例子:
校验规则对数据检索的影响
首先就是是否区分大小写,下面以utf8为例。
数据库删除:
drop database data_name;数据将被完全删除
2.数据库的修改
通过这个方法,可以修改已存在数据库的编码集
alter database data_name [charset=... collate=...]
3.数据库的备份与恢复
备份,虽然本质上是拷贝一份,但我们还是不推荐这样奇怪的操作。
备份操作(退出mysql)
mysqldump -P3306 -u root -p 密码 -B 数据库1 数据库2 > 数据库备份存储的文件路径
其他细节,仅备份表,或多个表:
mysqldump -u root -p 数据库名 表名1 表名2 > 备份路径
恢复操作(进入mysql)
source 备份路径;
本质上就是将曾经数据库的操作都执行一遍。
数据库用户连接情况
show processlist;
五,表的操作
1.创建表
语法:
create table 表名(内容1 comment '描述内容1',内容2 comment '描述内容2')[charset=... collate=... engine=...]
不同的存储引擎的选择影响着在磁盘中文件数量,以InnoDB,MyISAM为例,如下:
删除表
drop table 表名;
2.详细查看表结构
首先是进入一个数据库,语法:
desc 表名;
或者使用更详细查看表信息。
show create table 表名 \G;
(注:\G 用来简化无用信息)
3.修改表结构
修改表名
语法:
alter table 表名 rename 新表名;
增加列
语法:
alter table student add address varchar(100) comment'链接' after age;
修改列
alter table student modify name varchar(20);
可以修改,列的描述信息。
删除列
alter table student drop geader;
这样我们就删除了列‘geader’,表中的geader列全部数据将被删除。
修改列名
alter table student change id id varchar(64) comment'学号';
六,mysql 数据类型
需要注意的是,相比于其他编程语言,超出类型范围,可能会进行数据截断,但mysql中的数据类型,为保证数据正确性,不允许超出类型范围,这样以来插入到数据库中的数据是原始输入。
mysql选取数据类型的思想:由于mysql未来将会用于存储大量信息,数据类型不能太小,也不能太大,选择合适的数据类型大小是值得我们考虑。
下面我就跳几个特殊的类型进行讲解:
1. bit——位类型
语法:
bit(num) num : 比特位数
2. float & decrimal
语法:
float( num1, num2) 或者 decrimal(num1, num2 ) num1 : 全部的位数,num2:小数点后的位数。
事实上float也存在精度丢失的情况,而这时decrimal类型将被我们认识:
3.char & varchar
char语法:
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255个字符。
(注:中文在utf8编码下,一个字符占3字节,在gbk下是 2字节每个字符)
varchar语法:
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节。
在sql语句中,char类型的分配字节是按照,你要多少个字符就给你多少个字符的字节(要多少给多少);varchar类型,则是用多少给多少,L是最大字符数。但varchar也需要付出些代价,一般varchar会花费1~3字节来表示当前行varchar占用量,因此最大字节长度为65532(utf8最大字符数:21844,这里提一句,由于mysql是按行读取,一行的最大字节数也是65535,超过影响varchar创建,也影响后面类型创建)
两者比较:
- char占用字节数固定,效率高。
- varchar占用字节数较少,但维护成本高。
- char更适合长度变化小的数据,比如身份证号,手机号等。
- varchar适合长度变化大的数据,如网络地址。
4. 日期类型
常用的日期有如下三个:
- date :日期 'yyyy-mm-dd' ,占用三字节。
- datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节。date,与datetime就是一个固定时间,程序员不修改则不变化。
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节,但如果当前行的数据被修改,timestamp列数据将自动更新。
5. enum & set
C语言中我们也学过枚举,mysql中的枚举,也是为数据内容进行约束,就像填问卷一样,有**答案限定一样**。
enum语法:
nume_ enum(‘内容一’,‘内容二’, ‘内容三’...)
set语法:
nume_ set('内容一',‘内容二’, ‘内容三’...)
两者的区别,通过实验来展示:
set如果使用数字,是通过位来标记是否数据,如下:
enum & set的索引策略
find_in_set(sub,str_list) , sub: 目标,str_list:目标可能存在的范围。找到则返回下标,反之返回0。
语法使用,我们通过下面情况来举例:
情况一:简单的绝对查找
(注:where我们可以理解为mysql的判断语句,类似于if)
情况二:在范围内查找一个存在
如果我们需要对判断一些数据是否存在,我们就需要了解and,类似于语言中 &&,“与”,如下:
ok,这样子,我们就可以在enom,set中任意的索引我们需要的数据了。
结语
本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获,请动动你发财的小手点个免费的赞,你的点赞和关注永远是博主创作的动力源泉。
版权归原作者 花果山~程序猿 所有, 如有侵权,请联系我们删除。