39.MySQL数据库总结

千言万语,只要能对您学习提供一丝的帮助都是我的荣幸,有不足的地方,希望您能提出宝贵的意见。

一、数据库的认知
1.数据库的概念:数据库是用来存储数据的一种工具,它是数据的仓库,专门存储数据的工具
2.数据库分为关系型数据库和非关型数据库
关型数据库(RDBM):实体库中的实体是有关系的,通过外键来进行联系,还有事务。
主流的关系型数据库有:MySQL, Oracle , SQL Sever PostgreSQL
MariaDB…。。
关系型数据库使用时安全稳定,但是效率比较慢,多个数据库有一定关系,
3.非关系型数据库(NoSQL):数据库中存储的实体相互之间没有关系,或者几乎没有关系,各自独立存储。非关系型数据库使用时不安全,但是访问效率高,
4.在使用中我们一般都是采用关系型数据库和非关系型数据库结合起来做数据库的存储和使用
二、数据库的安装和介绍
1.MySql数据库是一种免费的开源的,目前最流行的一种数据库,它是由瑞典一家公司开发,苟凯由sun公司收购,后来由Oracle公司收购
MySQL分为企业版和社区版
社区版免费,企业版收费
端口号是;3306
直接将其写入到path环境变量
设置的时候看自己的是否允许远程连接,如果是允许,就开启root的远程连接,如果不允许,就不必要开启远程连接了

三、MySQL的常用的数据库操作命令
1.MySQL数据库服务器的基本单位:数据库:–>数据表—>存储的一条条数据/实体数据
2.连接数据库服务器:mysql -h主机地址 -u用户名 -p密码
3.查看所有的数据库:show databases;
MySQL默认带了三个系统的数据库,其中mysql数据库存储了用户等相关的信息
4.切换数据库:use 数据库名;
5.查看所有的数据表; show tables;

四、SQL的分类
MySQL:(结构化查询语言)
DDL(数据定义语言):create . drop , alter table
DML:(数库操作语言):inset。 update 、delete
DQL(数据查询语言):select
DCL(数据控制语言):grant、rollback、commit

1.DDL(数据定义语言)的基本使用——数据库
创建数据库;create databases 数据库名;
删除数据库:drop databases 数据库名;
2.DDL(数据定义语言)的基本使用——数据表

创建数据表:create table   数据表名(
字段名1  数据类型(长度 ) 属性  约束,
字段名2  数据类型(长度 ) 属性  约束...
)
删除数据表;drop  table  数据表名;

修改表
--修改表名
alter table 数据表名  rename 新表名;

--修改字段信息
#change不仅修改字段的属性,还修改了字段的值
alter  table 数据表名  change  旧字段名   新字段名  数据类型(长度)  约束等
#modify
alter  table  数据表名  modify  字段名  数库类型(长度)约束等

--添加字段
alter  table  数据表名   add  字段名  数据类型(长度) 约束等

--删除字段
drop  table  数据表名  drop  字段名;

--添加主键约束
alter  table  数据表名  add  constraint    主键名  primary  key   表名(主键字段名);

--添加外键约束
alter  table  数据表名  add  constraint  外键名  foreign  key  该表的外键字段   reference   关联表名(关联字段)

五、MySQL的常用的数据类型
1.数值类型
bit/tinyint int bigint double
2.字符类型;
char carchar text
char 和varchar 的区别:
char 是固定长度的字符, varvhar是可变长度的字符
char:当长度是某个值时,如果存储的数据长度不够 的话,那么也会以定义长度来存储字符串
varchar:当长度是某个定义的值的时候,如果长度不够数据长度,那么会以数据的长度来储存
3.时间类型:
datetime timestamp

六、MySQL的常用字段的属性 约束
primary key 主键 非空 唯一
unique key 唯一键 唯一
not null 非空
default 默认
comment 注释
auto_increment 主键自增
unsigned 无负号的
zerofill 不足长度以零填充

外键和主键
外键分为逻辑外键和物理外键
他是表和表之前进行关联的字段,我们通常使用它来保持数据的一致性
主键是表中一条记录的唯一标识

七、使用DML操作语言
1.insert into 表名 [(字段列表)] values(值列表);
2.当你不希望给某些值进行赋值的时候,必须要添加字段列表项,(必须保证不希望赋值的字段是允许非空、有默认值的)
3.如果你希望将表中的所有的字段赋值,可以省略字段列表项,但是一定要注意必须有顺序和表中的字段的位置保持一致
4.插入多条;
insert into 表名[(字段列表)] values(值列表1),(值列表2)…

--可以结合查询来实现多条数据的插入
#语法
insert   into    test  (id,name)
	select  gradeId  ,gradeIdName   from  grade;

#例子
insert  into  test    (id,name)
	select   1,'小班',unique
	select   2,'大班';

update
update 表名 set 要修改的字段名 = 要修改的值 ,…[where 条件语句 ,如果没有条件则成为了全表修改]

where条件:用来筛选行,记录

<  >   <=   >=    <>/!=   (=表示赋值也可以表示相等)
and   or(in查询) not (例如:查询null值和非null值   is not null       is null    

delect
delect from 表名[where条件]

truncate和delete的区别:
都可以做全表删除,但是truncate会清空自增序列,而delete会保留
truncate不能做条件限制,而delete可以做条件限制
truncate会影响事务,而delete不会影响事务

八、使用DQL查询数据
基本语法

select [all(默认) |   distinct(去重)]
*  |  表名.*   |    要查询的字段  [as   别名].....--限制查询的列
from
	数据表 [as   别名]
[left  |  inner   |   right   join  关联表  [as  别名]    on   关联字段的联系]
[where条件]
[group  by  分组字段]
[having   分组的筛选条件]
[order   by  排序字段]
[limit   起始索引  ,  显示的条数]

1.模糊查询like in
%可以匹配0个或是任意多个字符
可以匹配单个任意字符
姓李的俩个字的;like '李

姓名中包含小的:like ‘%小%’

查询学生id是3,4,5,的学生信息
id=3 or id=4 or id =5
in (3,4,5)

2.连接查询(多表查询)
一些数据要通过多张表才能得到,所以要借助外键(关联字)来进行查询
连接查询分为;内连结、外链接、自连接(别样的内连结)

--使用内连结查询学生姓名和年级{显示内连结}
select 
	stu.studentName, g.gradeName
from
	studennt  stu
inner  join  grade  g
on    stu.grandeId = g.gradeId;


--隐式内连结
select
	stu.studentNme,g.gradeName
from 
	student   stu, grande g
where
	stu.gradeId = g.gradeId;

--左外连接
select
	stu.studentName,g.gradeName
from
	student   stu
left  join   grade  g
on   stu.gradeId = g.gradeId;

--右连接
select
	stu.studentName,g.gradeName
from 
	student  stu
right  join   grade    g
	on  stu.gradeId = g.gradeIda

	
--自连接查询
select 
	e1.categoryName   '游戏名字',e2.categoryName '游戏分类'
from
	category  e1,  category  e2
where
	e1.pid = e2.id 

3.排序
order by 排序阶段[asc升序/desc降序]、

4.分页查询
①数据索引从0开始
②起始索引计算的公式:(查看页码-1)*每页显示的条数
③查询第一页的10条数据
④查询第二页的10条数据
5.子查询
连接查询的基本语法

--使用隐式内连接查询学生姓名和班级
select
	stu.studentName,g.gradeName
from
	student   stu,   grade  g
where
	stu.gradeId = g.gradeId;



使用子查询来进行查询上述的条件
select 
	stu.studentName,(select  g.gradeName   from grade   g  where   g.gradeId = stu.gradeId)   as   gradeName
from
	student   stu
	

--还有一种嵌套查询就像嵌套循环条件的一样,后期使用到再进行详细的解读

九、MySQL的常用函数
1.数学函数
rand()生成随机数
round()四舍五入
ceil()向上取整
floor() 向下取整
2.字符串函数
concat() 拼接字符串
replace()替换字符串
substring() 截取字符串
Itrim()去除左边的空格
rtrim() 去除右边的空格
UPPER() 所有字母大写
lower() 所有的字母小写
3.时间函数‘
now() 获取当前系统的时间
year() 获取当前的年份
month()获取当前的月份
hour()获取当前的小时
mintues() 获取当前的分钟数
second() 获取当前的秒数
dayOfWeek()一周当中的第几天
dayOfMonth() 一个月中的第几天
4.聚合函数
max()求最大值
min()求最小值
sum()求和
avg()求平均数
count() 求个数
5.分组
group by 分组字段
having 是给group进行筛选的
6.where 和having 的区别
where 是给from做条件的,where是在from后面的
having是给group做条件的,having是放在group后面的

十、掌握事务、视图、索引的使用,掌握数据库的恢复和备份
1.事务:一系列的操作作为一个整体的单元,要么全部执行成功,要么全部执行失败
2.
开始事务:begin
提交事务:commit
回滚事务:rollback
我们的MySQL是默认开启自动提交事务的,可以通过set autocommit = 0 ;关闭自动提交
3.事务的特性:

A原子性:事务是不可分割的
	C  一致性:事务执行之前和事务执行之后的总量是一致的
	I 隔离性:事务之间是不能产生影响的
			①事务之间的影响:
			脏读:一个事务读取到了另一个事务未提交的信息(绝对不允许)
			不可重复读:一个事务执行期间的俩次查询得到了不一样的结果,它是针对的是其他事务的修改
			幻读(虚读):一个事务执行期间对某块数据进行了修改操作,结果却发现了数据并没有完全更新完毕,针对的是其他的事务的inset
		②MySQL之间提供了解决方案
		隔离级别的的设置:是通过添加锁  或者是阻塞来实现隔离的
			串行化:可以避免所有的情况
			可重复读:(可以避免脏读,不可重复读) MySQL中是默认的
			读已提交; (可以避免脏读)  Oracle数据库  它只有串行化和读已提交   默认是读已提交
			读未提交:(不允许出现)
	D持久性  事务执行完以后最终一定是会持久化在数据库中的
	

4.视图
①视图是基于一张表或者是多张表的查询产生的虚拟表,它的好处是方便查询
②视图的创建:create 视图命名 as 查询语句
③删除视图:drop view 视图名
④查看某个表中的所有的视图:show viiew from 表名;
5.索引
① 索引的作用是用来提升查询性能的
②索引的分类:主键索引,唯一索引,普通索引,符合索引,全文索引,空间索引
③索引的创建:create [修饰 ] index 索引名 on 表名(字段名)
④删除索引;drop index 索引名 on 表名;

5.数据库的备份
mysqldump [参数选项] -u用户名 -p密码 -h主机地址 要备份的数据库名 要备份的数据库表> ‘要导出的文件的位置’
参数选项
-t只要导出的数据,不要表结构
-d只要导出的数据表结构,不要数据
-c 导出数据时,在inset语句中添加字段列名
6.数据库的恢复
mysql -h -u -p 要恢复的数据库名< ‘要恢复的数据库文件位置’

7.数据库的导入和导出
导出:
查询语句:into outfile ‘导出位置’
导入:
load data infile ‘数据文件的位置’ into 表名;

猜你喜欢

转载自blog.csdn.net/weixin_44614066/article/details/88938241