zoukankan      html  css  js  c++  java
  • 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
    #就是一个符号的差别 <导入 >导出
  • 相关阅读:
    计总与排名SUM和RANK函数
    计算获取最小值和最大值
    列值中获取第一个非空的值
    连续数字使用连接符替换
    展开中断或忽略的序号
    以连接字符截取字符串
    逗号分割字符串经存储过程存入数据表中
    符号分割的字符串转换为XML
    MS SQL Server的STRING_SPLIT和STRING_AGG函数
    MS SQL Server的LTRIM,RTRIM和TRIM函数
  • 原文地址:https://www.cnblogs.com/jzspace/p/13044894.html
Copyright © 2011-2022 走看看