数据库16
数据库约束
约束的作用: 保证数据的完整性. 单表约束: 主键约束: primary key //一般后边还会写上auto_increment 唯一约束: unique 非空约束: not null* 多表约束: * 外键约束: foreign key多表的分析和设计
关系分类:
一对多的关系:
一个部门可以有多个员工, 一个员工只能属于某一个部门.
一个分类下有多个商品, 一个商品只能属于某一个分类.
一个用户产生多个订单, 一个订单只能属于某一个用户.
多对多的关系:
一个学生可以选择多门课程, 一个课程也可以被多个学生选择.
一个订单包含多个商品, 一个商品也可以在多个订单中.
一对一的关系:
一个公司只能对应一个注册地址, 一个注册地址只能对应一个公司.
多表建表原则
- 一对多的建表原则: * 在"多"的一方创建一个字段, 作为外键, 指向"一"的一方的主键.
- 多对多的建表原则: * 需要创建第三张表(中间表), 在中间表中至少需要有两个字段, 分别作为外键指向多对多双方的主键.
- 一对一的建表原则: * 唯一外键对应.
多表查询连接查询 交叉连接: //了解 select * from A,B; //最终结果获取到的是两个表的笛卡尔积, 一般不用这种做法. 内连接:(inner join) 显示内连接: select * from A inner join B on 条件; 隐式内连接: select * from A,B where 条件; 外连接:(outer join) 左外连接: select * from A left outer join B on 条件; 右外连接: select * from A right outer join B on 条件; 内连接和外连接的区别: 内连接: 查到的是 两个表的交集. 左外连接: 左边表的全部 和 两个表的交集. 右外连接: 右边表的全部 和 两个表的交集.子查询 概述: 指的是一条语句的查询条件需要依赖另一条语句的查询结果. in: 只要满足其中一个就行. any: 只要比给定的所有值中的任意一个大(小)就行. all: 必须比给定的所有值都要大(小).
事务
概述:
事务指的是逻辑上的一组操作, 组成这组操作的各个逻辑单元要么全部都成功, 要么全失败.
//MySQL中默认情况下,一条语句是一个事务, 事务会自动提交.
//Oracle中默认事务是不提交的, 需要手动提交事务.
MySQL事务管理的命令:
start transaction; //开启事务
SQL语句1; //要执行的SQL语句
SQL语句2;
commit //提交事务
rollback; //回滚事务
show variables like '%commit%';
事务的特性:
1. 原子性.
强调事务的多个操作不可分割.
2. 一致性.
强调事务执行的前后, 数据完整性保持一致.
3. 隔离性
强调事务执行过程中, 不应该受到其他事务的干扰.
4. 持久性
强调事务一旦结束, 数据就持久到数据库中.
如果不考虑事务的隔离性, 有可能会引发一些安全性的问题.
读的方面:
脏读: 指的是一个事务读到另一个事务未提交的数据.
不可重复读: 指的是一个事务读到了另一个事务已经提交的 update的数据,
导致多次查询结果不一致.
虚读/幻读: 指的是一个事务读到了另一个事务已经提交的 insert的数据,
导致多次查询结果不一致.
写的方面: (了解就行, 不用重点掌握)
丢失更新.
解决事务的读问题:
设置事务的隔离级别:
read uncommitted: //未提交读
脏读, 不可重复读, 虚读都有可能发生.
read committed: //已提交数据库
避免脏读, 但是不可重复读和虚读是有可能发生的.
repeatable read: //可重复读
避免脏读, 不可重复读. 但是虚读是有可能发生的.
serializable: 串行化的
避免脏读, 不可重复读, 虚读
安全性:
read uncommitted < read committed < repeatable read< Serializable
效率:
read uncommitted > read committed > repeatable read > Serializable
一般数据库设置: read committed 和 repeatable read
MySQL默认: repeatable read
Oracle默认: read committed
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android webveiw 出现栈错误解决办法
- Android开发之实现手势滑动的功能
- Android编程实现带有单选按钮和复选按钮的dialog功能示例
- Android中Retrofit 2.0直接使用JSON进行数据交互
- Android自定义Drawable实现圆形和圆角
- Android jni调试打印char阵列的实例详解
- 写JavaScript函数不得不知的高级技巧
- Android编程视频播放API之MediaPlayer用法示例
- Android实现点击缩略图放大效果
- Android 应用签名的两种方法
- Android 关闭多个Activity的实现方法
- 我从Vue源码中学到的一些JS编程技巧
- 组复制升级 | 全方位认识 MySQL 8.0 Group Replication
- 浅谈关于Android WebView上传文件的解决方案
- Android对图片Drawable实现变色示例代码