数据库搏击

目录

  • 1. Mysql入门
    • 1.1 Mysql5.7 安装配置
    • 1.2 命令行连接到Mysql
    • 1.3 图形化软件
      • 1.3.1 Navicat
    • 1.4 数据库三层结构
  • 2. Java操作数据库、表
    • 2.1 创建数据库
    • 2.2 查询数据库
    • 2.3 备份恢复数据库
    • 2.4 创建表
    • 2.5 修改表
  • 3 CRUD
    • 3.1 insert插入
    • 3.2 update修改
    • 3.3 delete修改
    • 3.4 select查询
      • 3.4.1 分页查询
    • 3.5 mysql多表查询
      • 3.5.1 多表查询
      • 3.5.2 自连接
      • 3.5.3 多行子查询
      • 3.5.4 查询临时表
      • 3.5.5 all any操作符
      • 3.5.6 多列子查询
      • 3.5.7 表复制 && 去重
      • 3.5.8 合并查询
    • 3.6 mysql外连接
    • 3.7 主键
    • 3.8 unique
    • 3.9 外键
    • 3.91 check
    • 3.92 自增长
    • 3.3错题集
  • 3. Mysql常用数据类型
    • 3.1 数值型(整数)的基本使用
    • 3.2 数值型(bit)的基本使用
    • 3.3 数值型(小数)的基本使用
    • 3.4 字符串的基本使用
      • 3.4.1 文本类型使用细节
    • 3.5 日期类型的基本使用
  • 4. 函数
    • 4.1 统计函数 count
    • 4.2 合计函数 sum
    • 4.3 合计函数 avg
    • 4.4 合计函数 max/min
    • 4.5 分组函数 group by
    • 4.6 字符串相关函数
    • 4.7 数学函数
    • 4.8 日期函数
    • 4.9 加密函数
    • 4.12 流程控制语句
  • 5. 索引
    • 5.1 索引类型
    • 5.2 增删改
  • 6. 事务
    • 6.1 隔离级别
    • 6.2 事务的acid特性
  • 7. 存储引擎
  • 8. 视图
  • 9. mysql用户
    • 9.1 Mysql权限管理

1. Mysql入门

1.1 Mysql5.7 安装配置

数据库搏击_第1张图片
数据库搏击_第2张图片
数据库搏击_第3张图片
数据库搏击_第4张图片

1.2 命令行连接到Mysql

数据库搏击_第5张图片

1.3 图形化软件

1.3.1 Navicat

数据库搏击_第6张图片
数据库搏击_第7张图片
数据库搏击_第8张图片

  • SQLyog
    数据库搏击_第9张图片
    数据库搏击_第10张图片
    数据库搏击_第11张图片
    数据库搏击_第12张图片
    数据库搏击_第13张图片
    数据库搏击_第14张图片
    数据库搏击_第15张图片
    在这里插入图片描述
    数据库搏击_第16张图片

1.4 数据库三层结构

  1. 所有安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system)
  2. 一个数据库中可以创建多个表,以保存数据(信息)。
  3. 数据库管理系统(DBMS)、数据库、表三者之间的关系,如图:
    数据库搏击_第17张图片

2. Java操作数据库、表

2.1 创建数据库

  1. CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认utf8;
  2. COLLATE:指定数据库字符集的校对规则(常用的 utf8_bin[区分大小写]、utf8_general_ci[不区分大小写],注意默认是 utf_general_ci)

创建zzw_db02数据库,采用utf8_general_ci校验规则
创建zzw_db03数据库,采用utf8_bin校验规则
数据库搏击_第18张图片
数据库搏击_第19张图片

2.2 查询数据库

数据库搏击_第20张图片

2.3 备份恢复数据库

  • 备份数据库(注意:在DOS执行)命令行

mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
在这里插入图片描述

  • 恢复数据库(注意:进入mysql命令行再执行)
    在这里插入图片描述
    数据库搏击_第21张图片
  • 备份数据库的表

mysqldump -u 用户名 -p密码 数据库 表1 表2 表n > F:/table.sql

在这里插入图片描述

2.4 创建表

数据库搏击_第22张图片
数据库搏击_第23张图片

2.5 修改表

数据库搏击_第24张图片

3 CRUD

3.1 insert插入

数据库搏击_第25张图片

3.2 update修改

  • 使用细节
    1. UPDATE语法可以用新值更新原有表中的各列;
    2. SET子句指示要修改哪些列和要给予哪些值;
    3. WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有行;
    4. 如果需要修改多个字段,可以通过 SET 字段1=值1,字段2=值2…

数据库搏击_第26张图片

3.3 delete修改

使用细节
1. 如果不使用where语句,将删除表中所有数据。
2. delete语句不能删除某一列的值(可使用update 设为 null 或者 ’ ’ )
3. 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。(即:drop table 表名;)
数据库搏击_第27张图片

3.4 select查询

数据库搏击_第28张图片

  • select语句1
    数据库搏击_第29张图片
  • select语句2
    数据库搏击_第30张图片
  • select语句3
    数据库搏击_第31张图片
    数据库搏击_第32张图片
  • order by排序
    数据库搏击_第33张图片
    – 查询加强
    数据库搏击_第34张图片
    数据库搏击_第35张图片

3.4.1 分页查询

数据库搏击_第36张图片
数据库搏击_第37张图片
数据库搏击_第38张图片

  • group by, having, order by, limit 前后顺序数据库搏击_第39张图片

3.5 mysql多表查询

3.5.1 多表查询

数据库搏击_第40张图片
数据库搏击_第41张图片
数据库搏击_第42张图片
数据库搏击_第43张图片

3.5.2 自连接

数据库搏击_第44张图片

3.5.3 多行子查询

数据库搏击_第45张图片
数据库搏击_第46张图片

3.5.4 查询临时表

数据库搏击_第47张图片
数据库搏击_第48张图片

3.5.5 all any操作符

数据库搏击_第49张图片
数据库搏击_第50张图片

3.5.6 多列子查询

数据库搏击_第51张图片

3.5.7 表复制 && 去重

数据库搏击_第52张图片
数据库搏击_第53张图片
数据库搏击_第54张图片

3.5.8 合并查询

数据库搏击_第55张图片

3.6 mysql外连接

数据库搏击_第56张图片
数据库搏击_第57张图片

3.7 主键

实际开发中,每个表一般都有一个主键
数据库搏击_第58张图片
数据库搏击_第59张图片

3.8 unique

数据库搏击_第60张图片
数据库搏击_第61张图片

3.9 外键

数据库搏击_第62张图片
数据库搏击_第63张图片

  1. 外键指向的表的字段必须是主键或者是unique;
  2. 表的类型是innodb,这样的表才支持外键;
  3. 外键字段的类型要和主键类型一致(长度可以不一致);
  4. 外键字段的值必须在主键中出现过,或者为NULL;(前提是外键字段允许为NULL);
  5. 主外键关系一旦形成,数据不能随便删除了;
    数据库搏击_第64张图片
    数据库搏击_第65张图片

3.91 check

数据库搏击_第66张图片 在这里插入图片描述

3.92 自增长

数据库搏击_第67张图片
数据库搏击_第68张图片

  1. 一般来说自增长是和primary key配合使用的;
  2. 自增长也可以单独使用(需要配合一个unique);
  3. 自增长修饰的字段是整数型的(浮点型也可以,但是使用非常非常少);
  4. 自增长默认从1开始,但也可以通过以下命令修改;
    ALTER TABLE t25 AUTO_INCREMENT = 777;
  5. 如果添加数据时指定增长字段的值,则以指定的值为准,同时下次自增长的会从这个值开始;

3.3错题集

数据库搏击_第69张图片
数据库搏击_第70张图片

3. Mysql常用数据类型

3.1 数值型(整数)的基本使用

使用规范:在能够满足要求的情况下,尽量选择占用空间小的类型
数据库搏击_第71张图片

3.2 数值型(bit)的基本使用

bit字段显示时,按照位的方式显示;
查询的时候仍然可以使用添加的数值;
如果一个值只有0,1 可以考虑使用bit(1),可以节约空间;
位类型,M指定位数,默认值1,范围1~64;
数据库搏击_第72张图片

3.3 数值型(小数)的基本使用

  1. FLOAT/DOUBLE [UNSIGNED]
    Float 单精度,Double 双精度
  2. DECIMAL[M,D] [UNSIGNED]
  • 可以支持更加精确的小数位,M是小数位数(小数点前面)的总数,D是小数点后面的位数;
  • 如果D是0,则值没有小数点。M最大是65,D最大是30.如果D被省略,默认是0;如果M被省略,默认是10;
    建议:如果希望小数的精度高,推荐使用decimal。
    数据库搏击_第73张图片
    数据库搏击_第74张图片

3.4 字符串的基本使用

CHAR(size):固定长度字符串 最大255字符
VARCHAR(size):0~65535字节 可变长度字符串,最大65532字节,1-3个字节用于记录大小【utf8编码size最大21844字符,gbk编码最大32766字符 】
数据库搏击_第75张图片

  • 字符串使用细节1
    char(4):这个4表示字符数(最大255),不是字节数,不管中文还是字母都是放4个,按字符计算;
    varchar(4):这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据(gbk、utf8、big5);
  • 字符串使用细节2
    char(4)是定长(固定的大小),就是说,即使你插入’aa’,也会占用分配的4个字符的空间;
    varchar(4)是变长(变化的大小),就是说,如果你插入了’aa’,实际占用空间大小并不是4个字符,而是按照实际占用空间来分配;(varchar本身还需要占用1-3个字节来记录存放的内容长度):L(实际数据大小) + (1-3)字节
  • 细节3
    什么时候使用char,什么时候使用varchar
    如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号等;
    如果一个字段的长度不确定,我们使用varchar,比如留言,文章;
    查询速度:char > varchar

3.4.1 文本类型使用细节

存放文本时,也可以使用Text数据类型,可以将TEXT列视为VARCHAR列,注意Text不能有默认值,大小0-2^16字节;
如果希望存放更多字符,可以选择MEDIUMTEXT 0-2^24 或 LONGTEXT 0-2^32
数据库搏击_第76张图片

3.5 日期类型的基本使用

数据库搏击_第77张图片

  • 习题
    数据库搏击_第78张图片

4. 函数

4.1 统计函数 count

数据库搏击_第79张图片

4.2 合计函数 sum

数据库搏击_第80张图片

4.3 合计函数 avg

数据库搏击_第81张图片

4.4 合计函数 max/min

max/min函数返回满足where条件的一列的最大/最小值
数据库搏击_第82张图片

4.5 分组函数 group by

  • 使用group by 子句对列进行分组
  • 使用having 子句对分组后的结果进行过滤
    数据库搏击_第83张图片

4.6 字符串相关函数

数据库搏击_第84张图片
数据库搏击_第85张图片

4.7 数学函数

数据库搏击_第86张图片
数据库搏击_第87张图片

4.8 日期函数

数据库搏击_第88张图片
数据库搏击_第89张图片
数据库搏击_第90张图片

4.9 加密函数

数据库搏击_第91张图片
数据库搏击_第92张图片

4.12 流程控制语句

数据库搏击_第93张图片
数据库搏击_第94张图片

5. 索引

数据库搏击_第95张图片
数据库搏击_第96张图片
数据库搏击_第97张图片

5.1 索引类型

  1. 主键索引:主键自动地为主索引(类型:Primary key);
  2. 唯一索引:(unique)
  3. 普通索引:(index)
  4. 全文索引:(fulltext)[适用于MylSAM]
    一般开发中,不适用mesql自带的全文索引;而是使用:全文搜索Solr和ElasticSearch(ES)

5.2 增删改

数据库搏击_第98张图片
数据库搏击_第99张图片

  • 哪些列适合使用索引
    1. 较频繁的作为查询条件的字段应该创建索引;
      比如:select * from emp where empno = 1;
    2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;
      比如:select * from emp where sex = ‘男’;
    3. 更新非常频繁的字段不适合创建索引
      比如:select * from emp where logincount = 1;
    4. 不会出现在WHERE子句中的字段不该创建索引;

6. 事务

  • 当执行事务操作时(dml语句),mysql会在表上加锁,防止其他用户更改表的数据
    数据库搏击_第100张图片
    数据库搏击_第101张图片
  • 如果直接回退到a点,那么中间的保存点都会被删掉,那就不能再回退到b点
    数据库搏击_第102张图片
    在这里插入图片描述

6.1 隔离级别

多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据是的准确性;

脏读: 当一个事务读取到另一个事务尚未提交的改变(update、insert、delete)时,产生脏读;
不可重复读: 同一查询在同一事务中多次进行,由于其它提交事务所做的修改和删除,每次返回不同的结果集,则发生不可重复读;
幻读: 同一查询在同一个事务中多次执行,由于其它提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读;

事务隔离级别定义了事务与事务之间的隔离程度【✔ 可能出现;❌ 不会出现】

Mysql隔离级别 脏读 不可重复读 幻读 加锁读
读未提交(Read uncommitted) 不加锁
读已提交(Read committed) 不加锁
可重复读(Repeatable read) 不加锁
可串行化(Serializable) 加锁

数据库搏击_第103张图片

6.2 事务的acid特性

  1. 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;
  2. 一致性(Consisrtency)
    事务必须使数据库从一个一致性状态变换到另一个一致性状态;
  3. 隔离性(Isolation)
    事务的隔离是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其它事务的操作数据所干扰,多个并发事务之间要相互隔离;
  4. 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对数据有任何影响;

7. 存储引擎

  1. MySQL表的类型有存储引擎(Storage Engines)决定,主要包括MylSAM、innoDB、Memory等;
  2. MySQL数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE、MRG MYISAM、MYISAM、InnoDB;
  3. 这六种又分为两类,一类是“事务安全型(transaction-safe)”,比如InnoDB;其余都属于第二类,称为“非事务安全型(non-transaction-safe)”;
    数据库搏击_第104张图片
  4. MylSAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求;
  5. InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MylSAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引;
  6. MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件,MEMORY类型的表访问非常快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉,表的结构还在。
  • 如何选择存储引擎?
  1. 如果你的应用不需要事务,处理的只是基本的增删改查,那么MyISAM是不二选择;
  2. 如果需要支持事务,则选择InnoDB
  3. Memory存储引擎将数据存储在内存中,由于没有磁盘/IO等待,速度极快。但由于内存存储引擎,所做的任何修改在服务器重启后都将消失;
    数据库搏击_第105张图片
    数据库搏击_第106张图片
    数据库搏击_第107张图片

8. 视图

视图是一个虚拟表,其内容由查询定义。同真是的表一样,视图包含列,其数据来自对应的真实表(基表)

数据库搏击_第108张图片

  • 视图的基本使用
    数据库搏击_第109张图片
  • 视图细节
    在这里插入图片描述
    安全:有些字段是保密的,不能让用户直接看到;
    性能:关系型数据库往往会分表存储,建立视图可以避免使用join连接;
    灵活:淘汰旧表;

9. mysql用户

mysql中的用户,都存储在数据库mysql的user表中
SELECT host, user, authentication_string FROM mysql.user;
在这里插入图片描述
其中user表的重要字段说明:
1. host:允许登陆的“位置”,localhost表示该用户只允许本机登录,也可以指定ip地址,比如:192.168.1.1
2. user:用户名
3. authentication_string:密码,是通过mysql的password()函数加密之后的密码

  • 创建用户
    create user ‘用户名’@‘允许登陆的位置’ identified by ‘密码’
  • 删除用户
    drop user ‘用户名’@‘登陆的位置’
    数据库搏击_第110张图片

9.1 Mysql权限管理

数据库搏击_第111张图片
数据库搏击_第112张图片
数据库搏击_第113张图片
用户root
数据库搏击_第114张图片
用户zzw
数据库搏击_第115张图片

  • 细节
    数据库搏击_第116张图片

你可能感兴趣的:(笔记,数据库,mysql,服务器)