文章目录
- 1.Mysql
- 1.1 为什么学习数据库
- 1.2 什么是数据库
- 1.3 数据库分类
- 1.4 Mysql简介
- 1.5 安装Mysql
- 1.6 安装Sqlyog
- 1.7 连接数据库
- 2.操作数据库
- 2.1 操作数据库
- 2.2 数据库的列类型
- 2.3 数据库字段属性(重点)
- 2.4 创建数据库表(重点)
- 2.5 数据表的类型
- 2.6 修改删除表
- 3.Mysql数据管理
- 3.1 外键(了解)
- 3.2 DML语言(记住)
- 3.3 添加
- 3.4 修改
- 3.5 删除
- 4. DQL查询数据(重点)
- 4.1 DQL
- 4.2 指定查询字段
- 4.3 where 条件子句
- 4.4 联表查询
- 4.5 排序和分页
- 4.6 子查询
- 4.7 分组和过滤
- 5.Mysql函数
- 5.1 常用函数
- 5.2 聚合函数(重要)
- 5.3 数据库级别的MD5加密
- 6.事务
- 7.索引
- 7.1 索引的分类
- 7.2 测试索引
- 7.3 索引原则
- 8.权限管理和数据库备份
- 8.1 用户管理
- 8.2 Mysql备份
- 9.规范数据库设计
- 9.1 为什么设计?
- 9.2 三大范式
- 10.JDBC(重点)
- 10.1 数据库驱动
- 10.2 JDBC
- 10.3 JDBC程序
1.Mysql
1.1 为什么学习数据库
- 岗位需求
- 大数据时代
- 被迫需求:存数据
- 数据库是所有软件体系中最核心的存在
1.2 什么是数据库
数据库(DB,DataBase)
概念:数据仓库,软件,安装在操作系统上,SQL可以存储大量的数据
作用:存储数据,管理数据
1.3 数据库分类
关系型数据库L(SQL)
- Mysql,Oracle,Sql Server,DB2,SQLlite
- 通过表和表之间,行和列之间的关系进行数据的存储,学员信息表等
非关系型数据库(NoSQL) - Redis,MongDB
- 非关系型数据库,对象存储,通过对象的自身属性来决定
DBMS(数据库管理系统)
- 数据库的管理软件,科学有效的管理我们的数据,维护和管理数据
- Mysql,数据库管理系统
1.4 Mysql简介
Mysql是一个关系型数据库管理系统
前属于MysqlAB公司,现属于Oracle旗下产品
Mysql是最好的RDBMS应用软件之一,开源的数据库软件
体积小、速度快、成本低
1.5 安装Mysql
1.6 安装Sqlyog
1.7 连接数据库
2.操作数据库
操作数据库----操作数据库中的表-----操作数据库中表的数据
mysql关键字不区分大小写
2.1 操作数据库
1.创建数据库
Create Database [if not exists] student
2.删除数据库
drop database [if exists] student
3.使用数据库
use student
4.查看数据库
show databases
2.2 数据库的列类型
数值:
- tinyint 1个字节
- smallint 2个字节
- mediumint 3个字节
- int 4个字节
- bigint 8个字节
- float 4个字节
- double 8个字节
- decimal
字符串:
- char 字符串0-255
- varchar 可变字符串 0-65535
- tinytext
- text
时间日期:
- date YYYY-MM-DD,日期格式
- time HH:mm:ss 时间格式
- datetime YYYY-MM-DD HH:mm:ss 最常用
- timestamp 时间戳,1970.1.1到现在的毫秒数,也较为常用
- year 年份表示
null:
- 没有值
- 不要使用
2.3 数据库字段属性(重点)
Unsigned:
- 无符号的整数
- 声明了该列不能为负数
zerofill:
- 0填充
- 不足的位数,使用0来填充
自增:
- 通常理解为自增,自动在上一条记录的基础上+1
- 通常用来设计唯一的主键 index ,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空:NULL not null
- 假设设置为not null,如果不给他赋值,就会报错
- 如果不填写,默认就是null
默认:
- 设置默认的值
- sex,默认为男 如果不指定,就会有默认
2.4 创建数据库表(重点)
-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 使用SQL创建
-- 学号int 登陆密码varchar(20) 姓名、性别varchar(2),出生日期(datatime),家庭住址,email-- 注意点,使用英文(),表的名称和字段尽量使用·· 括起来
-- AUTO_INCREMENT 自增
-- 字符串使用,单引号括起来
-- 所有的语句后面加,
-- PRIMARY KEY主键,一般一个表只有一个唯一的主键!
CREATE TABLE IF NOT EXISTS `student`(`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
格式:
Create table [if not exists] `表名`(`字段名` 列类型 [属性] [索引] [注释],)[表类型][字符集设置][注释]
常用命令:
show create database school --查看创建数据库的语句
show create table student -- 查看student数据表的定义语句
desc student --显示表的结构
2.5 数据表的类型
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规操作:
- MYISAM 节约空间,速度较块
- INNODB 安全性高,事物的处理,多表多用户操作
2.6 修改删除表
修改:
-- 修改表名 alter table 旧表名 rename as 新表名
alter table teacher rename as teacher1
-- 增加表的字段 alter table 表名 add 字段名 列属性
alter table teacher1 add age int(11)
-- 修改表的字段(重命名,修改约束)
-- alter table 表名 modify 字段名 列属性[]
alter table teacher1 modify age varchar (11) --修改约束
-- alter table 表名 change 旧名字 新名字 列属性[]
alter table teacher1 change age age1 int(1) --字段约束名
-- 删除表的字段
-- alter table 表名 drop 字段名
alter table teacher1 drop age1
删除:
-- 删除表(如果表存在再删除)
drop table if exists teacher1
注意点:
- ``字段名用这个
- 注释–
- sql对关键字大小写不敏感
- 所有符号全部用英文
3.Mysql数据管理
3.1 外键(了解)
3.2 DML语言(记住)
数据库意义:数据存储,数据管理
DML语言:数据操作语言
- Insert
- update
- delete
3.3 添加
insert:
insert into 表名([字段1,字段2,字段3]) values('值1'),('值2'),('值3')
注意:
- 字段和字段之间使用英文逗号隔开
- 字段可以省略,但是后面的值要一一对应,不能少
- 可以同时插入多个数据,values后面的值需要使用,隔开即可
3.4 修改
update:
update 表名 set colnum = value where [条件]
条件:where 子句,运算符 id等于某个值或在某个区间
注意:
- colnum是数据库的列
- 条件,筛选的条件,如果没有指定,则会修改所有的列
- value,是一个具体的值,也可以是一个变量
- 多个设置的属性之间,使用英文逗号隔开
3.5 删除
delete:
delete from 表名 [where 条件]
4. DQL查询数据(重点)
4.1 DQL
(Data Query Language:数据库查询语言)
- 所有的查询操作都用 select
- 简单复杂查询都用
- 数据库中最核心的语言,最重要的语句
- 使用频率最高
4.2 指定查询字段
-- 查询全部的学生
SELECT * FROM student
-- 查询指定字段
SELECT `studentno`,`studentname` FROM student
-- 别名 as
SELECT `studentno` AS 学号,`studentname` AS 姓名 FROM student
-- 函数 Concat(a,b)
SELECT CONCAT('姓名:',studentname) AS 新名字 FROM student
语法:
Select 字段 from 表
去重:distinct
去除select查询结果重复的数据
-- 查询全部考试成绩
select * from result
-- 查询那些同学参加
select `studentno` from result
-- 去重
select distinct `studentno` from result
4.3 where 条件子句
作用:检索数据中符合条件的值
搜索的条件由一个或多个表达式组成,结果 布尔值
逻辑运算符
模糊查询:比较运算符
4.4 联表查询
4.5 排序和分页
排序:asc(升),desc(降)
分页: limit(查询起始下标,pageSize)
4.6 子查询
嵌套使用
4.7 分组和过滤
主要就是Having
5.Mysql函数
5.1 常用函数
5.2 聚合函数(重要)
5.3 数据库级别的MD5加密
MD5:主要增强算法复杂性和不可逆性
MD5不可逆,具体的值和MD5是一样的
MD5破解网站的原理,背后有一个字典,MD5加密后的值
6.事务
事务原则:ACID 原子性,一致性,隔离性,持久性
原子性(Atomicity)
要么成功要么失败
一致性(Consistency)
事务前后的数据完整性要保证一致
**持久性(Durability)**事务提交
事务一旦提交则不可逆,被持久化到数据库中
隔离性(Isolation)
事物的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间相互隔离
隔离导致:
脏读:指一个事务读取了另外一个事务未提交的数据
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同
虚读(幻读):旨在一个事务中读取到了别的事务插入的数据,导致前后读取结果不一致
-- mysql是默认开启事务自动提交的
SET autocommit = 0 -- 关闭
SET autocommit = 1 -- 开启(默认)
-- 手动处理事务
SET autocommit = 0 -- 关闭自动提交
-- 事务开启
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务中INSERT xx
INSERT xx
-- 提交:持久化(成功)
COMMIT
-- 回滚:回到原来的样子(失败)
ROLLBACK-- 事务结束
SET autocommit = 1 -- 开启自动提交
7.索引
Mysql官方定义:索引是帮助Mysql高校获取数据的数据结构
7.1 索引的分类
在一个表中,逐渐索引只能有一个,唯一索引可以有多个
- 主键索引(Primary key)
- 唯一的标识,逐渐不可重复,只能由一个列作为主键 - 唯一索引(Unique key)
- 避免重复的列出现,唯一索引可以重复,多个列都可以标识 唯一索引 - 常规索引(key/index)
- 默认的,index,key关键字来设置 - 全文索引(fulltext)
- 在特定的数据库引擎下才有
- 快速定位数据
7.2 测试索引
索引在小数据量的情况下作用不大,但在数据量的时候很有用
7.3 索引原则
- 索引不是越多越好
- 不要对进程变动数据加索引
- 小数据量的表不需要加索引
- 索引一般加在常用来查询的字段上
索引的数据结构
Hash类型的索引
Btree:InnoDB的默认数据结构
8.权限管理和数据库备份
8.1 用户管理
SQL yog可视化管理
SQL命令操作
用户表:mysql.user
本质:读这张表进行增删改查
8.2 Mysql备份
为什么备份?
- 保证重要数据不丢失
- 数据迁移
Mysql数据库备份的方式 - 直接拷贝物理文件
- 在可视化工具中手动导出
- 使用命令行mysqldump命令导出
mysqldump -h 主机 -u 用户名 -p 密码 数据库 表名 物理位置
9.规范数据库设计
9.1 为什么设计?
糟糕的数据库设计:
- 数据冗余,浪费空间
- 数据库插入和删除都会麻烦、异常
- 程序的性能差
良好的数据库设计: - 节省内存空间
- 保证数据库的完整性
- 方便开发系统
软件开发中关于数据库的设计
- 分析需求:分析业务和需要处理的数据库的需求
- 概要设计:设计关系图E-R图
9.2 三大范式
为什么要数据规范化?
- 信息重复
- 更新异常
- 插入异常
- 无法正常显示信息 - 删除异常
- 丢失有效的信息
三大范式
第一范式(1NF)
原子性:保证每一列不可再分
第二范式(2NF)
前提:满足第一范式,每张表只描述一件事情
第三范式(3NF)
前提:满足第一范式和第二范式
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能直接相关
关联查询的表不能超过三张表
10.JDBC(重点)
10.1 数据库驱动
驱动:声卡、显卡、数据库
10.2 JDBC
SUN公司为了简化开发人员对数据库的操作,提供了一个Java操作数据库的规范,称为JDBC
java.sql
javax.sql
mysql-connector-java.jar包
10.3 JDBC程序
- 加载驱动
- 用户信息和url
- 连接成功,数据库对象 Connection代表数据库
- 执行SQL对象 Statement 执行sql的对象
- 执行SQL的对象去执行SQL 查看返回结果
- 释放连接