MySQL--03

1、常用函数

时间和日期函数:

select CURRENT_DATE();//获取当前日期

select CURDATE();//获取当前日期  与上同

select NOW();//获取当前时间     (日期+时间)

select YEAR(date);//返回年

select MONTH(date);//返回月

select DAY(date);//返回天

select HOUR(date)   select MINUTE(date)   select SECOND(date)

系统:

select SYSTEM_USER();  select USER();//返回用户名

select VERSION();//版本号

2、聚合函数(常用)

能够统计表中数据count(),想查询一个表中有多少条记录就可以使用这个count()

count()  计数    select count(`id`) from student   count(字段)会忽略所有的null值

          select count(*) from student  count(*) 不会忽略null值,本质就是计算行数
          select count(1) from student      count(1) 不会忽略null值,本质也是计算行数

sum()  求和    select sum(score) from result;  计算出学生成绩的综合

avg()平均值      select avg(score) from result;  计算出学生成绩的平均值

MAX()  最大值  select MAX(score) from result;  计算出学生成绩的最大值

MIN()  最小值  select MIN(score) from result;  计算出学生成绩的最小值

 3、分组和过滤

group by... 列名

having 过滤条件

4、数据库级别的MD5加密

什么是MD5 :主要是增强算法复杂度和不可逆性

MD5不可逆,具体的值的MD5是一样的

MD5破解网站的原理,就是他们有一个字典,对应的是MD5加密前的值  --   MD5加密后的值

但只有一些比较常见的比如123456   稍微复杂一点都不可以

 由于小马哥在设置密码的时候直接MD5加密掉了所以他的密码就是加密格式的

现在把剩下的两位小哥也加密一下

 后台是怎么实现对用户密码的校验呢?   ------>    后台对用户输入的密码进行MD5加密后和库中的MD5密码相比较,相同则输入正确

5、select小结

 6、事务  

要么都成功,要么都失败

事务原则:  ACID  大神讲解:[https://blog.csdn.net/dengjili/article/details/82468576]

 原子性:针对同一个事务

  两个步骤一起成功或者一起失败,不能只发生其中一个动作

  比如转账:A向B转账500块,那A转账成功B账户就必须多出500块,A账户必须少500块

 一致性:针对一个事务操作前与操作后的状态一致

  还是说转账的问题,比如AB账户一共有1000块,那么无论他们两个怎么转,转多少次,他们两个账户的总钱数都是1000块

 持久性:表示事务结束后的数据不随着外界原因导致数据丢失

  持久性就只有两种可能,一种是事务没有提交,恢复到原状,另一种是事务已经提交,持久化到数据库,打死都不会改变

  即事务一旦提交就不可逆

 隔离性:针对多个用户同时操作,主要是排除其他事务对本次事务的影响

  举个例子,A向B转账  B在向C转账,同时进行操作,但是他们是隔离起来的 不会互相影响

 【秦老师理解】:

原子性:要么都成功要么都失败

一致性:事务前后的数据完整性要保证一致

持久性(事务提交):事务一旦提交就不可逆转,被持久化到数据库中

隔离性:互不干扰 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

隔离所导致的一些问题:

脏读:指一个事务读取了另外一个事务未提交的数据。

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

幻读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。(一般是行影响,多了一行)

7、事务流程:

在这里看着并不是很明显,因为这是手动的一步步点执行

正常放在业务中是Java代码

可以把它看成是一个方法

放在trycatch中的代码

method(){
  try{
   "正常的业务代码“
   "正常执行完之后"
    
     commit();//提交    
  } catch(){
     //"出现错误之后在这里"
     rollback():
  }
}

 8、索引

索引是帮助MySQL高效获取数据的数据结构

在一个表中,主键索引只能有一个,唯一索引可以有多个

·主键索引 PRIMARY KEY

  唯一的标识,主键不可重复,只能有一个列作为主键。

·唯一索引 UNIQUE KEY

  避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引

·常规索引 KEY/INDEX

  默认的索引   index key关键字来设置

·全文索引  FullText

  在特定的数据库引擎下才有   MyISAM  用于快速定位数据

 9、索引的使用:

  1、在创建表的时候给字段增加索引

  2、创建完毕后,增加索引   alter add

显示所有的索引信息:show  index  from  表名

增加一个全文索引:  索引名和列名一致就好了

  alter table 表明.列名 add FULLTEXT INDEX 索引名(列名)

EXPLAIN 分析sql执行的状况

10、给某个表中的某个字段创建索引:

  create index id_表名_字段名  on 表 (字段)

添加索引就是在内存中又新建了一颗树

怎么说呢
给表的某个列创建完索引之后,它本身是一行行的数据,但创建完索引之后,可以看上图就是在数据行的前面创建了一个树,给每个数据都增加了一个唯一的索引,让查找更加方便,在没有索引的时候,想要查询一个具体的数据那就要从这些数据中查找,在数据量比较大的时候可能会查询个几十万条数据才能找到,但你加上索引之后,他每个数据就相当于都有一个key:value相对应,我想找这个值value,只需要找到对应的key,就只需要查找一条数据就可以找到。

【索引在小数据量的时候,用处不大。但在大数据大的时候,区别十分明显】

11、索引原则

·索引不是越多越好

·不要对经常变动的数据加索引

·小数据量的表不需要加索引

·索引一般加在常用来查询的字段上

12、用户权限

--创建用户    create user 用户名 indetified by '密码'
create user JzSpace identified by 'space1111'

--修改密码(修改当前用户密码)
set password = PASSWORD('space1111')
--修改指定用户密码 set password for username = password('space1111')

--重命名 rename user 原来名字 to 新的名字
rename user space1 to space2

--用户授权 ALL PRIVILEGES 全部的权限 *.*指所有库所有表
--create ALL PRIVILEGES ON 库.表 TO 用户

--查询权限
show grants for 用户 查询指定用户的权限
show grants for root@localhost

--root权限:GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION

--撤销权限 REMOVE 哪些权限 在哪个库撤销 给谁撤销
REMOVE ALL PRIVILEGES ON *.* FROM 用户

13、MySQL备份

为什么要备份:1、保证重要的数据不丢失  2、数据转移

MySQL数据库备份的方式

1、直接拷贝物理文件   data文件夹  2、在可视化工具中手动导出  右键库或者表 转储

3、使用命令行  mysqldump -h主机  -u用户名 -p密码  数据库  表  > 物理磁盘位置/文件名    D:/   【> .... 到哪里】

导出一张表:mysqldump -hlocalhost -uroot -pspace999 jzspace student >D:/a.sql
导出多张表:mysqldump -hlocalhost -uroot -pspace999 jzspace student result subjecct >D:/b.sql
//表和表之间加空格 不加, 命令行里没有, 空格代表
导出数据库:mysqldump -hlocalhost -uroot -pspace999 jzspace >D:/b.sql
#sql文件导入数据库
#先登录数据库   mysql -uroot -pspace999
#导入表的话就切换到指定的数据库  use database     然后source D:/a.sql
#如果是导入数据库就没必要选择数据库了  登录进来后直接source
@@推荐使用上面这种方式导入表或数据库,不容易将别人的表覆盖

另一种方法和上面的类似:
mysql -uroot -pspace999 < D:/a.sql
#就是一个符号的差别 <导入 >导出
原文地址:https://www.cnblogs.com/jzspace/p/13044894.html