MySQL 数据库小总结

一、MySQL数据库简介

     MySQL是一个关系型数据库管理系统,它的前世是瑞典MySQL旗下的产品。

MySQL是最好的RDBMS(Relational Database Management System)关系型数据库管理系统应用软件之一的开源的数据库软件


二、数据库的列类型

    1、数值

tinyint十分小的数据1个字节
smallint较小的数据2个字节
int标准的整数4个字节
bigint较大的数据8个字节
float浮点数4个字节
double浮点数8个字节
decimal字符串形式的浮点数用于金融计算

    2、字符串

char字符串固定大小的0~255
varchar可变字符串0~6535常用的string
tinytext微型文本2^8-1
test文本传2^16-1保存大的文本


三、数据库字段的属性

    1、Unsigned:

                       无符号的整数,声明该列不能为负数

    2、zerofill:

                     0填充的,不足的位数用0来填充

    3、自增(AUTO_Increment)

                      通常用来设计唯一的主键

    4、非空

                     Null  not   null


四、数据库表的类型

        1、数据库引擎:

         

InnoDB默认使用安全性高,支持事务处理,多表操作
MyISAM早些年使用节约空间,速度快

       2、InnoDB和MyIsAM的区别

         ×:不支持  √ :不支持

MyIsAMInnoDB
事务支持×
数据行锁定×
外键约束×
全文索引×
表空间的大小较小约为MyIsAM的2倍

五、数据库CRUD(增删改查)

       1、增删改查的SQL语句

增加的SQL语句:

insert into 表名(字段名) values(?,?,?)


修改的SQL语句:

update  表名 set  字段名  where  条件


删除的SQL语句:

delete from 表名 where 条件

查询语句

select 字段名 from 表名 where 条件  

六、模糊查询(比较运算符)

    

比较运算符语法描述
is nulla is null如果操作符为null,则结果为真
is not null  a is not null如果不为null,则结果为真
betweena  between  b and  c若在a,b之间,则结果为真
likea like bsql匹配,如果a配置b 则为ture
in a in(a1,a2,a3...)a在a1或a2某个中则为ture

like结合  %代表到0到任意个字符  _(一个字符)

例:

查询某表中姓名开头为A 的信息
select * from 表名 where name like 'A%'

查询某表中姓名开头为A 后面只有一个字符
select * from 表名 where name like 'A_'

查询某表中姓名中间有A的
select * from 表名 where name like '%A%'

in(具体的一个或多个值)

例:

查询地址为,江苏或河南的人
select * from 表名 where address in ('江苏','河南')

七、联表查询

操作

描述

inner  join如果表中至少有 一个匹配,就返回
lift  join 会从左表返回所有值,即使右表中没有匹配
right join会从右表中返回所以值,即使左表中没有匹配

执行SQL语句

例:

比如现在有两个表 一个是学生表(student) 另一个是老师表(teacher)

现在要查询学生的信息和对应老师的信息

select  s.name,s.age,s.t_name,t.age 
from `student` as s
inner join teacher as t
on s.name=t.name
 

as 是给表起别名 用来识别你用的不同表的字段

七、数据库的分页和排序

    1、排序

         升序:ASC     降序: DESC

 要在where后面使用 Order By 字段名  ASC/DESC

例:

比如要查询学生的成绩并把成绩以升序的形式展现出来

select name,report from student
Order By report ASC

  2、排序

    排序一般在sql语句的最后写

    语法为: limit 页数,页面大小

例             limit  0,5  查询第一个页面,页面大小为5,可以查询数据库中前5个数据

                 limit  1,3   查询第二个页面,页面大小为3,可以查询数据库中4~6的数据

select * from student
limit 0,5

   n : 当前页面数

  pagesize : 页面大小

 起始值(数据从第几个开始查询):(n-1)*pagesize

总页数:数据总数/页面大小  如有余数 总页数+1

3、子查询和嵌套式查询

 它的本质是: 在where语句中在嵌套一个子查询语句

where(select * from 表名) 

由里即外:先查询里面的sql,在查询外面的sql

例:

要查询学生表的信息,和老师表的信息
select * from teacher 
where(select * from student)

八、Mysql的函数 

       常用函数:

selectABS(-8)绝对值
selectceiling(9.4)向上取整
selectfloor(9.4)向下取整
selectrand()返回一个0~1之间的随机整数
selectsign(10)判断一个数的符号

     字符串函数:

selectChar_length()字符串长度
selectConcat拼接字符串
selectlower(``)小写字母
selectupper(``)大写字母

       聚合函数:

函数名称描述
count()

计数

sum()求和
avg()平均值
max()最大值
min()最小值

九、数据库级别的MD5加密(扩展)

        什么是MD5呢?

  1991年,Rivest开发出技术上更为趋近成熟的MD5算法。它在MD4的基础上增加了"安全带"(safety-belts)的概念。虽然MD5比MD4复杂度大一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。

  主要增强算法复杂度,和不可逆性,MD5不可逆,具体的值md5是一样的

    SQL语句

insert into md5(`id`,name.pwd)
values(1,"1","123456")

加密:
update md5 set pwd=md5(pwd) 
where id = 1

全部密码加密
update md5 set pwd=MD5(pwd)


插入的时候加密
insert into md5 values(4,"1",MD5('123456'))

十、select语法总结

            注: 注意前后顺序,不能颠倒

select 去重(distinct) 字段名 from 表名 (表名和字段名可以用as取别名 as也可省略不写)
XXX join 表名 
on 等值判断
where(具体的值,子查询语句)
Group By 字段名(通过某个字段来分组)
Having (过滤分组后的信息,条件和where一样,只是位置不同)
Order By 字段名(ASC 升序,DESC 降序)
limit 当前页,页面大小



十一、数据库的事务

           1、什么是事务呢?

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

总结成一句话:要么都执行,要么都不执行。

           2、事务有哪些呢?

           ACID

        A、原子性(Atomicity)

         原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。失败回滚的操作事务,将不能对事物有任何影响。

        C、一致性(Consistency)

           一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

        I、隔离性(Isolation)

              隔离性是指当多个用户并发访问数据库时,比如同时访问一张表,数据库每一个用户开启的事务,不能被其他事务所做的操作干扰,多个并发事务之间,应当相互隔离。

       D、持久性(Durability)

          持久性是指事务的操作,一旦提交,对于数据库中数据的改变是永久性的,即使数据库发生故障也不能丢失已提交事务所完成的改变。


十二、隔离所导致的问题

   1、脏读

       读未提交是最低的隔离等级,一个事务能够读到其他事务尚未提交的修改,存在脏读问题。

   2、不可重复读

     比读未提交高一个等级。一个事务未提交或者回滚时,对这个事务涉及的数据加上了读锁和写锁。写锁在这个事务结束时才释放;读锁在这个事务完成SELECT操作之后立即释放。由于释放读锁时,这个事务还未提交,此时如果其他事务来读取这个值,会导致不可重复读问题和幻读问题。

在“读已提交”隔离等级下,能够确保读到的数据,都是经过提交(COMMITTED)的数据,不可能是某种临时性的数据,所以避免了脏读问题。但不能够保证当重复读取这个数据时,这个数据不变,即不可重复读。

   3、幻读

      当一个事务对所有涉及的数据加上了读锁和写锁之后,如果另一个事务此时插入了一条数据也满足第一个事务的筛选条件,这样就会导致最后结果不满足第一个事务,而是两个事务的混合结果,即幻读问题。

   4、串行化

       这是最高的隔离等级。在事务完成之前,对这个事务涉及的数据加上读锁和写锁,而且加上了范围锁(range-locks),使得当这个事务未提交时,其他事务无法插入满足这个事务筛选条件的新数据。这样避免了幻读问题。

    5、数据库的隔离等级

级别脏读不可重复读 幻读中文名称
READ_UNCOMMITTED允许允许允许读未提交
READ_COMMITTED阻止允许允许读已提交
REPETABLE_READ阻止阻止允许可重复读
SERIALIZABLE阻止阻止阻止序列化

   可重复读是mysql默认的数据库隔离等级


十三、数据库的索引

1、什么是索引

     索引(index)是帮助mysql数据库高效读取数据的数据结构。

2、什么是数据结构

    是以某种特地的布局方式存储数据的容器

3、主键索引

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

4、唯一索引

    避免重复的列出现,唯一索引不可重复,列都可以设置

5、常规索引

   默认的

6、全文索引

     在特定的数据库引擎才有,MyISAM

FullText  index(索引名) 列名。

7、索引原则

  1、索引不是越多越好

  2、不要对进程变动的数据库加索引

  3、小数据量的表不需要索引

  4、索引一般加在常用字段


十四、数据库三大范式

1、为什么需要数据规范化

    信息重复 、更新异常 、 插入异常 、 删除异常

2、第一范式

    原子性:保证每一列都不可再分

3、第二范式

    前提:满足第一范式

    每张表只描述一件事情

4、第三范式

    前提:满足第二范式

    需要确保数据库表中的每一列数据都和主键直接相关而不是间接相关

5、规范性和性能问题

1、关联查询的表不能超过三张

2、规范性越好,会影响性能

3、故意结表增加冗余字段,计算列

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值