复习{
1.mysql定义: RDBMS
用来管理数据库
2.mysql公司,安装mysql ,卸载 ,在操作系统中属于服务器Server
我们必须通过客户端来远程连接服务器;
3.对于服务的管理, 我们可以关闭, 重启 mysql服务器,
我的客户端才能连接上msyql服务器 ,手动 ,自动开启 doc, navicat SQLyog
4.登录mysql服务器:
1.简单登录 mysql -uroot -p
2.远程登录 mysql -h 远程ip -P 3306 -uroot -p
使用命令登录的前提是 windows 操作系统上 配置mysql环境变量
5.命令:
show databases;
use 数据库名;
show tables;
select * from person;
desc person;
6. SQL 结构化查询语言
|-- DDL: 数据库定义语言
create database 数据库名;
drop database 数据库名;
create table person(字段列表);
drop table person;
alter table person modify column 字段名 数据类型;
alter table person change column 老字段名 新字段名;
alter table person add column 字段名 数据类型:
alter table person drop column 字段名;
向定义好的数据库表添加约束
alter table person add primary key(字段);
添加外键:
alter table person add column 外键字段名 数据类型;
alter table person add foreign key(字段) references 主表(字段);
|-- DML: 数据库操纵语言
insert into person(字段列表) values(值列表);
insert into person(字段列表) values(),(),();
insert into person(uid,uname) values(null,值);
insert into person(uname) values(值);
物理删除:
delete from person where id = ?
逻辑删除:
update person set 字段名= 新值, 字段名 = 新值
where 主键 = ?;
数据库约束:
1.主键约束: priamry key
create table person(
uid int priamry key auto_increment,
)
create table person(
uid int ,
primary key(uid)
)
复合主键:
什么是复合主键: 有多个字段组合的主键,还是用来标识唯一记录
两个字段的值 都相等,他就认为是一条记录
2.外键约束: jdbc
foreign key(当前表的字段) reference 主表(主键字段);
create table product(
pid int ,
productName,
brand_bid int,
foreign key(brand_bid) reference brand(bid));
什么时候能用上外键约束?
查询的数据 要从多个表中的获取 组合成结果集
表 和 表之间的关系:
1.一对一
外键字段放在哪个表都行,看需求
2.一对多:
外键在从表中, 持久外加的表是 从表 ,多方
3.多对多:
是双向的一对多 , 必须创建中间表;
中间表 持有的是两个主表的 外键字段
3.非空约束: not null
4.唯一约束: unique
5.检查约束: check mysql 不支持
6.默认约束: default 值
|-- DQL:
select [字段列表] from person
[where 过滤条件 , > ,< ,!= , = ,<>, betweent and ,is null , is not null , and , or , like , not like ,in() , not in()]
[group by 分组字段 一般结合分组函数 count(), sum(), avg() , max() , min()]
[having 过滤条件 ]
[order by 排序字段 asc 升序 | desc 降序 ]
[limit 开始行,页大小]
startRow = (pageNo-1)*pageSize;
-- 获取 第二名 和 第三名 2
表关联查询: 多表查询 级联查询 java
sql92:
sql99:
内连接: 查询的是两个表的 交集部分, 配的数据
等值连接: a inner join b on =
不等值连接: a inner join b on 没有相等条件
自连接: la inner join a 将当前表 当两个表使用
外连接: 查询的是 结果是 内连接 + 主表有从表没有的数据
应用场景: 主表有 从表没有的数据时;
外连接 = 内连接 + 主表有 从表没有的数据时
从表中有 就匹配值
从表中没有 就 补null
左连接: left join on
右连接: right join on
join on
join on
允许 主表和 从表 交换位置
mysql中 不支持 全连接
full join on
msyql中 交叉连接 就是为了的到笛卡尔积现象
cross join on 结果是内连接
sql92版本和sql99版本区别:
1.功能对比: sql99 功能多, sql92少
2.可读性: sql99可读性好, sql92可读性不好
事务:
什么是事务?
事务是 一件 或 多件 时间的集合,这些事儿 要么全做
要么全不做;
事务是 一条 或 多条sql 语句, 这些sql 语句 要么都执行
要么都不执行; 事务是最小的执行单位,不可在分
事务的特性: ACID
原子性 Atomicity, 一致性 Consistency,隔离性 Isolation ,持久性Durability(ACID)
什么是原子性?
事务是一个整体,不可再分,
什么是一致性:
数据库表中的数据的状态要保持一致,
什么是持久性:
数据一旦提交 就永久有效,不可回滚
什么是隔离性:
多个事务 在并发执行时 ,相互不干扰,自己执行自己的,
具有互斥性
解决办法就是隔离级别:
1.读未提交数据 read uncommitted: 会出现,脏读,不可重复读,幻读
Oracle 2.读已提交数据 read committed : 会解决 脏读,会出现不可重复读, 或幻读
mysql默认 3.可重复读 repeatable read: 解决 脏读, 不可重复读, 会出现幻读
4.串行化: Serializtion 事务 一个接着一个的执行,效率低
事务的并发问题如何解决:
1.隔离级别,
2.悲观锁: select * from person for update 表锁
3.乐观锁: 设置 版本号, 时间戳
1.如何查看隔离级别:
select @@tx_isolation;
2.如何查看事务状态:
show variables like 'autocommit'; ON
3.如何修改事务状态:
set autocommit = 0; 设置手动提交
4.如何修改隔离级别:
set session transaction isolation level read uncommitted
5.查看mysql数据库管理系统的 引擎;
show engines;
myISAM 不支持事务 , InnoDB 支持事务
经典案例 转账业务:
1.开启事务 start TRANSACTION; BEGIN;
2.设置手动提交 set autocommit = 0;
3.保存点 savepoint 名;
4.执行sql语句 n条
5.如果失败 就执行 rollback to 保存点
如果有个保存点, 直接过滚到最初,子保存点就消失了
6.如果没有错误就 执行 commit; 不可回滚 永久有效;
truncate 是删除操作,与delete 功能一样
truncate 和 delete区别:
truncate 删除表数据 不可回滚,释放空间
delete 删除表数据, 可回滚, 不释放空间
drop 删除表 结构, 不可回滚,释放空间
union 和 union all 区别: 联合查询, 集合计算
查询两个表的数据,临时存储到一个结果集中,前提表结构,字段个数,顺序,类型完全一致
union去重, union all 不去重
|-- DCL :
添加: grant 权限 on 数据库表 to user1,user2;
删除权限: revoke 权限 on 数据库表 to user1,user2;
---------------------------------------------------------------------------
视图: view
是一个 临时的虚拟表;
视图的应用是 为了封装sql语句,保证了 sql语句的安全性; 复用性
1.创建一个视图
create view 视图名 as select * from ....
2.删除一个视图
drop view 视图名;
3.修改视图:
update my_view2 set boyName = '张三' where id = 4;
}
数据库高级特性:
索引 index , 存储过程 ,数据库范式(三范式);
PowerDesigner: 数据库建模工具 画图的; 应用
是常用的数据库建模工具。
使用它可以分别从概念数据模型(Conceptual Data Model)和
物理数据模型(Physical Data Model)两个层次对数据库进行设计。
在这里,概念数据模型描述的是独立于数据库管理系统(DBMS)的实体定义和实体关系定义;
物理数据模型是在概念数据模型的基础上针对目标数据库管理系统的具体化
最终我们可以根据 概念图 生成具体的 物理图 Table
我们还可以根据物理图 生成真实 数据库表
1.E-R Entity实体 Relationship 实体关系图
2.物理图: 针对数据库的表和表之间的关系 图
能生成 sql脚本, 在使用数据库导入sql脚本,就出现表了
1.必须学会创建E-R 视图关系图 是抽象的
2.学会如何将 E-R 编程 物理图
3.学会如果将 物理图 -----> sql脚本
4.如何在没有Navicat 客户端的情况下 ,导入sql脚本
source C:\Users\GaoYuanze\Desktop\crebas.sql
在定义名字的时候, 别使用关键字, 别重名;
使用doc窗口导入sql脚本: