1、 mysql和oracle的区别
a) Oracle是大型数据库Mysql是小型,oracle市场占有率比mysql高,mysql免费oracle价格高
b) Oracle支持大并发,大访问量
c) Mysql逐渐自增长,oracle没有自增长一般是序列
d) Mysql可以用双引号包起字符,oracle只可以单引号,在插入和修改字符前必须做单引号的替换
e)Mysql分页关键词limit
oracle分页rownum
2、 sql之链接查询
a)左连接:以左表为基准查询匹配右表,如果匹配就显示相应字段,不匹配,用null填充
b) 右链接:以右表为基准查询匹配左表,如果匹配就显示相应字段,不匹配,用null填充
c)全连接:先以左表进行左外链接,然后以右表进行右外链接
d) 内连接:显示表之间有连接匹配的所有行
3、 聚合函数
Count 统计数量、sum求和、avg求平均、max最大值、min最小值
4、 sql注入
selectadminfromuserwhereusername=‘admin’or’a’=‘a’andpasswd=’‘or’a’=‘a’
防止 SQL 注入,使用预编译语句是预防 SQL 注入的最佳方,如selectadminfromuserwhereusername=?Andpassword=? 使用预编译的 SQL 语句语义不会发生改变,在SQL 语句中,变量用问号?表示
注意:使用mybatis时mapper中#方式能够很大程度防止sql注入$方式无法防止sql注入
5、 sqlselect语句完整执行顺序
from------where------group by-----having----计算所有的表达式----order by------select输出
6、 存储引擎
对于 MySQL 5.5 及更高版本,默认的存储引擎是 InnoDB。在 5.5 版本之前,MySQL的默认存储引擎是MyISAM。
1, InnoDB 存储引擎,特点:行锁设计、支持外键、支持非锁定读
2, MyISAM 存储引擎
3, NDB 存储引擎
4, Memory 存储引擎
5, Archive 存储引擎
6, Federated 存储引擎
7, Maria 存储引擎
7、索引
1.什么是索引?
索引是 MySQL 数据库中的重要对象之一,用于快速找出某个列中有某一特定值的行。
2.为什么要使用索引
索引是 MySQL 中一种十分重要的数据库对象
3.索引的分类
B+树索引 hash索引 FULLTEXT索引 R-Tree索引从物理存储角度
1、聚集索引(clustered index)
2、非聚集索引(non-clustered index)
从逻辑角度
1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值
2、普通索引或者单列索引
3、多列索引(复合索引)
4、唯一索引或者非唯一索引
5、全文索引
8、数据库三范式
数据库三范式主要是为了设计出高效率、优雅的数据库,否则可能会设计出错误的数据库
第一范式(1NF),原子性,列或者字段不能再分
第二范式(2NF),唯一性,不存在部分依赖
第三范式(3NF),直接性,不存在传递依赖
9、数据库事务
1、事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向
系统提交,要么都执行、要么都不执行,事务必须具备以下四个属性
2、事务控制语句
BEGIN 或 START TRANSACTION 显式地开启一个事务;
COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。
COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;
ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个
保存点,一个事务中可以有多个 SAVEPOINT;
RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
ROLLBACK TO identifier 把事务回滚到标记点;
SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引 擎 提 供 事 务 的 隔 离 级 别 有 READ UNCOMMITTED 、 READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
3、mysql事务处理两种方法
用 BEGIN,ROLLBACK, COMMIT 来实现
直接用 SET 来改变 MySQL 的自动提交模式:
4、事务的隔离级别
-
Read uncommitted
读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。 -
Read committed
读已提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。 -
Repeatable read
可重复读,就是在开始读取数据(事务开启)时,不再允许修改操作 -
Serializable 序列化
Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。
在 在 MySQL 数 据 库 中 , 支 持 上 面 四 种 隔 离 级 别 , 默 认 的 为Repeatable read
10、存储过程
一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次 编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过 程是数据库中的一个重要对象。
11、触发器
触发器是一段能自动执行的程序,是一种特殊的存储过程,触发器和普通的存储过程的区别是: 触发器是当对某一个表进行操作时触发。