MySQL
JavaEE:企业级java开发 Web
前端(页面:展示,数据!)
后台(连接点:连接数据库JDBC,连接前端(控制,控制视图跳转,和给前端传递数据))
数据库(存数据,TXT,EXCEL,WORD)
只会写代码,学好数据库,基本混饭吃;
操作系统,数据结构与算法!当一个不错的程序猿
离散数学,数字电路,体系结构,编译原理,实战经验。高级程序猿
1.1为什么学数据库
1.岗位需求
2.现在的世界,大数据时代,得数据库者得天下
3.被迫需求:存数据
4.数据库是所有软件体系中最核心的存在
1.2什么是数据库
数据库(DB,database)
概念:数据仓库,软件,安装在操作系统上
作用:存储数据,管理数据
1.3 数据库分类
关系型数据库:(SQL)
- MySQL,Oracle,Sql Server ,DB2,SQLlite
- 通过表和表之间,行和列之间的关系进行数据的存储, 学员信息表,考勤表
非关系型数据库:(NoSQL)
- Redis, MongDB
- 非关系型数据库,对象存储,通过对象的自身属性来决定
DBMS(数据库管理系统)
- 数据库的管理软件
- MySQL,数据库管理系统
1.4MySQL简介
关系型数据库管理系统
前世:MySQL AB公司
今生:属于Oracle旗下产品
体积小、速度快、总体拥有成本低,找人成本低
1.5安装MySQL
1.解压
2.把这个包放到自己的电脑环境目录下
3.配置环境变量
4.新建mysql配置文件ini
5.启动管理员模式下的cmd,运行所有的命令
6.安装mysql服务
7.初始化数据库文件
8.启动mysql,进去修改密码
9.进入mysql通过命令行(-p后面不要加空格),修改密码(sql语句后面一定要加分 )
10.注释ini中的跳过密码
11.重启mysql。连接测试,如果连接成功就OK
1.6安装SQLyog
1.无脑安装
2.注册
3.打开连接
4.新建一个数据库school
每一个sqlyog的执行操作,本质
5.新建一张表student
6.查看表
1.7连接数据库
命令行连接
数据库XXX语言 CRUD增删改查! CV程序猿 API程序猿 CRUD程序猿(业务!)
DDL 定义
DML 操作
DQL 查询
DCL 控制
2.操作数据库
操作数据库>操作数据库中的表>操作数据库的表的数据
mysql的关键字不区分大小写
2.1操作数据库(了解)
1.创建数据库
2.删除数据库
3.使用数据库
4.查看数据库
学习思路:
-
对照SQLyog可视化历史记录查看sql
-
固定的语法或者关键字必须记住
数据库的列类型
数值
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小的数据 3个字节
- int 标准的整数 4个字节 常用
- bigint 较大的数据 8个字节
- float 浮点数 4个字节
- double 浮点数 8个字节(精度问题)
- decimal 字符串形式的浮点数 金融计算的时候,一般使用decimal
字符串
- char 字符串固定大小的 0-255
- varchar 可变字符串 0-65535
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1
时间日期
java.util.Date
- date YYYY-MM-DD 日期格式
- time HH:mm:ss 时间格式
- datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
- timestamp 时间戳 1970.1.1到现在的毫秒数,也较为常用
- year 年份表示
null
- 没有值,未知
- 注意,不要使用NULL进行运算
2.3字符的字段属性(重点)
Unsigned:
- 无符 的整数
- 声明了该列不能声明为负数
zerofill:
- 0填充
- 不足的位数,使用0来填充,int(3), 5——005
自增:
- 通常理解为自增,自动在上一条记录的基础+1
- 通常可用来设计唯一的主键,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空:NULL not null
- 假设设置为not null,如果不给它赋值,就会 错
- NULL,如果不填写值,默认就是null
默认:
- 设置默认值
2.4创建数据库表(重点)
格式
2.5数据表的类型
INNODB 默认使用
MYISAM 早些年使用
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 表锁 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约两倍 |
常规使用操作
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
在物理空间存在的位置
所有的数据库文件都存在data目录下
本质还是文件的存储!
MySQL引擎在物理文件上的区别
- INNODB在数据库表中只有一个*.frm,以及上级目录下的ibdata1文件
- MYISAM对应文件
- *.frm-表结构的定义文件
- *.MYD 数据文件
- *MYI 索引文件
设置数据表的字符集编码
不设置的话,回事Mysql默认的字符集编码(不支持中文)
2.6修改删除表
修改
ALTER
删除
所有的创建和删除操作尽量加上判断,以免 错
注意点:
- “字段名,使用这个包裹
- 注释/**/
- sql关键字大小写不敏感,建议大家写小写
- 所有的符 全部用英文
3.MySQL数据管理
3.1外键(了解)
方式一、在创建表的时候,增加约束(麻烦,比较复杂)
删除有外键关系的表,必须要先阐述引用别人的表,再删除该表
方法二、创建表成功后,添加外键约束
以上操作都是物理外键,数据库级别的外键,我们不建议使用(避免数据库过多造成困扰)
最佳实践
- 数据库就是单纯的表,只用来存数据,只有行和列
- 我们使用多张表的数据,想使用外键(程序去实现)
3.2DML语言(全部记住)
数据库的意义:存储,管理
DML语言:数据库操作语言
- INSERT
- UPDATE
- DELETE
3.3添加
3.4修改
条件:where自居 运算符 id 等于某个值,大于某个值,再某个区间内修改
区间:BETWEEN 2 AND 5
3.5删除
delete
TRUNCATE
作用:完全清空一个数据库表,表的结构和索引约束不会变
delete的区别
- truncate会自增归零
- truncate不会影响事务
4.DQL查询数据(重点)
4.1DQL
(Data Query Language:数据查询语言)
- 所有的查询操作都用它 Select
- 简单的查询,复杂的查询都用它
- 数据库中最核心的语言,最重要的语句
- 使用频率最高的语句
4.2指定查询字段
语法:SELECT 字段 FROM 表
去重 distinct
数据库中的表达式:文本值,列,Null,计算表达式,系统变量
4.3Where条件子句
作用:检索数据中符合条件的值
与或非
BETWEEN AND
模糊查询:比较运算符
运算符 | 语法 | 描述 |
---|---|---|
IS NULL | a is null | 如果是NULL ,结果为真 |
IS NOT NULL | ||
BETWEEN | ||
Like | a like b | 匹配,配合%和_使用 |
In | a in (a1,a2,a3,a4) |
4.4联表查询
JOIN
操作 | 描述 |
---|---|
Inner join | |
left join | |
right join |
自连接
自己的表和自己的表连接,核心:一张表拆成两张表即可
4.5分页和排序
排序:升序,排序
升序ASC,降序DSC
分页
LIMIT 起始值 页面的大小
4.6、子查询
where(这个值是计算出来的)
本质:在where嵌套一个子查询
由里及外
5.MySQL函数
5.1常用函数
(1)ABS(x)
返回x的绝对值
(2)PI()
返回圆周率π,默认显示6位小数
(3)SQRT(x)
返回非负数的x的二次方根
(4)MOD(x,y)
返回x被y除后的余数
(5)CEIL(x)、CEILING(x)
返回不小于x的最小整数
(6)FLOOR(x)
返回不大于x的最大整数
(7)ROUND(x)、ROUND(x,y)
前者返回最接近于x的整数,即对x进行四舍五入;后者返回最接近x的数,其值保留到小数点后面y位,若y为负值,则将保留到x到小数点左边y位
(8)SIGN(x)
返回参数x的符 ,-1表示负数,0表示0,1表示正数
(9)POW(x,y)和、POWER(x,y)
返回x的y次乘方的值
(10)EXP(x)
返回e的x乘方后的值
(11)LOG(x)
返回x的自然对数,x相对于基数e的对数
(12)LOG10(x)
返回x的基数为10的对数
(13)RADIANS(x)
返回x由角度转化为弧度的值
(14)DEGREES(x)
返回x由弧度转化为角度的值
(15)SIN(x)、ASIN(x)
前者返回x的正弦,其中x为给定的弧度值;后者返回x的反正弦值,x为正弦
(16)COS(x)、ACOS(x)
前者返回x的余弦,其中x为给定的弧度值;后者返回x的反余弦值,x为余弦
(17)TAN(x)、ATAN(x)
前者返回x的正切,其中x为给定的弧度值;后者返回x的反正切值,x为正切
(18)COT(x)
返回给定弧度值x的余切
5.2聚合函数
[AVG(distinct] expr) | 求平均值 |
---|---|
[COUNT({*|distinct] } expr) | 统计行的数量 |
[MAX(distinct] expr) | 求最大值 |
[MIN(distinct] expr) | 求最小值 |
[SUM(distinct] expr) | 求累加和 |
5.3数据库级别的MD5加密(拓展)
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数
不可逆
6.事务
6.1什么是事务
要么都成,要么都失败
1.SQL执行 A给B转账
2.SQL执行 B收到A的钱
将一组SQL放在一个批次中去执行
事务原则:ACID原则:原子性,一致性,隔离性,持久性(脏读,幻读)
原子性:
要么都成功,要么都失败
一致性:
事务前后的数据完整性保持一致,两人1000块前后都不变
持久性:
事务一旦提交,不可逆
隔离性:
互不干扰
隔离所导致的问题
脏读:
指一个事务读取了另外一个事务未提交的数据
不可重复读:
在一个事务内读取表中的某一行数据,多次读取结果不同。
虚读(幻读):
指在一个事务内读取到别的事务插入的数据,导致前后不一致
执行事务
7.索引
MySQL官方对索引的定义为:索引是帮助MySQL告诉获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引的数据结构
7.1索引的分类
- 主键索引(PRIMARY KEY)
- 唯一索引,不可重复,只能由一个列作为主键
- 唯一索引(UNIQUE KEY)
- 避免重复的列出现,唯一索引可以重复,比如多个列都可以标识为唯一索引
- 常规索引(KEY)、
- 默认的,index,key关键字设置
- 全文索引(FullText)
- 在特定的数据库引擎才有,MYISAM
- 快速定位数据
7.2测试索引
7.2索引原则
- 索引不是越多越好
- 不要对进程变动数据加索引
- 小数据量的表不要加
- 索引一般加在常用来查询的字段上
索引的数据结构
Hash类型的索引
Btree:INNODB默认的数据结构
阅读:http://blog.codinglabs.org/articles/theory-of-mysql-intex.html
8.权限管理和备份
8.1用户管理
SQLyog可视化管理
SQL命令操作
用户表:mysql.user
本质:读这张表进行增删改查
8.2MySQL备份
为什么要备份:
-
保证重要的数据不丢失
-
数据转移
MYSQL数据库备份的方式:
- 直接拷贝物理文件
- 在可视化工具中手动到出
- 使用命令行到处mysqldum命令行使用
9.规范数据库设计
9.1为什么需要设计
当数据库比较复杂,就需要设计
糟糕的数据库设计:
- 数据冗余,浪费空间
- 数据库插入和删除都会麻烦、异常【屏蔽使用物理外键】
- 程序的性能差
良好的数据库设计:
- 节省内存空间
- 保证数据库的完整性
- 方便我们开发系统
软件开发中,关于数据库的设计
- 分析需求:分析业务和需要处理的数据库的需求
- 概要设计:设计关系图E-R图
设计数据库步骤:(个人博客)
- 收集信息,分析需求
- 用户表(用户登录注销,用户的个人信息,写博客,创建分类)
- 分类表(文章分类,谁创建的)
- 文章表(文章的信息)
- 友链表(友链信息)
- 自定义表(系统信息,某个关键的字,或者一些主字段)
- 标识实体(把需求落地)
- 表示实体之间的关系
- 写博客:user—>blog
- 创建分类:user–>category
- 关注:user–>user
- 友链:links
- 评论:
9.2三大范式
为什么要数据规范化
- 信息重复
- 更新导致异常
- 插入异常
- 无法正常现实
- 删除异常
- 丢失有效信息
三大范式
第一范式(1NF)
原子性:保证每一列不可再分
第二范式(2NF)
前期:满足第一范式
每张表只描述一件事情
第三范式(2NF)
前提:第一范式,第二范式
确保数据表中的每一列数据都和主键直接相关,而不能间接相关
(规范数据库的设计)
规范性和性能的问题
关联查询的表不能超过三张表
- 考虑商业的需求和目标,(成本,用户体验)数据库的性能更加重要
- 在规范性能的问题的是很好,需要适当考虑规范性
- 故意给某些增加一些冗余的字段。(从多表查询变成单表查询)
- 故意增加一些计算列(从大数据量降低为小数据量的查询)
10.JDBC(重点)
10.1数据库驱动
驱动:声卡,显卡,数据库
我们的程序会通过数据库驱动,和数据库打交道
10.2、JDBC
SUN公司为了简化开发人员对数据库的操作,提供了一个JAVA操作数据库的规范,俗称JDBC
这些规范的实体由具体厂商去做
对于我们开发人员来说,我们只需要掌握JDBC接口
需要java.sql javax.sql
还需要导入一个数据库驱动包mysql-connerctor-java-5.1.47.jar
10.3第一个JDBC程序
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!