Mysql笔记

SQL语句分类

  • DQL(Select)
  • DML(Insert Delete Update)
  • DDL(Create Drop)
  • TCL(Commit Rollback)
  • DCL(Grant)

Distinct

select distinct job,deptno from emp;  //Distinct只能出现在所有字段的最前方。

笛卡尔积现象

当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象。

三张表,四张表怎么连接?

语法:
		select 
			...
		from
			a
		join
			b
		on
			a和b的连接条件
		join
			c
		on
			a和c的连接条件
		right join
			d
		on
			a和d的连接条件
		
		一条SQL中内连接和外连接可以混合。都可以出现!

子查询

select
    ..(select).
from
    ..(select).
where
    ..(select).

Union合并查询结果集

select ename,job from emp where job = 'MANAGER'
union
select ename,job from emp where job = 'SALESMAN';
#在进行结果集合并的时候,要求两个结果集的列数相同。

Limit

完整用法:limit startIndex, length
          startIndex是起始下标,length是长度。
          起始下标从0开始。

缺省用法:limit 5; 这是取前5。

分页

limit (pageNo-1)*pageSize , pageSize
pageSize:每页显示几条记录
pageNo:limit (pageNo - 1) * pageSize  	

Mysql的日期格式

Date默认:%Y-%m-%d 年月日
DateTime默认:%Y-%m-%d %h:%i:%s  年月日 时分秒
	

快速创建表

create table mytable as select empno,ename from emp where job ='MANAGER';

快速删除表中的数据

truncate table dept_bak;
#这种删除效率比较高,表被一次截断,物理删除。
#这种删除缺点:不支持回滚。
#这种删除优点:快速。

约束

  • 非空约束:not null
  • 唯一性约束: unique
  • 主键约束: primary key
  • 外键约束:foreign key
  • 检查约束:check(mysql不支持,oracle支持)

事务

一个事务其实就是一个完整的业务逻辑。是一个最小的工作单元。不可再分。

start transaction;  //将自动提交机制关闭
提交事务:commit; 语句
回滚事务:rollback; 语句(回滚永远都是只能回滚到上一次的提交点!)
事务特性
A:原子性
    说明事务是最小的工作单元。不可再分。

C:一致性
    所有事务要求,在同一个事务当中,所有操作必须同时成功,或者同时失败,
    以保证数据的一致性。

I:隔离性
    A事务和B事务之间具有一定的隔离。

D:持久性
    事务最终结束的一个保障。事务提交,就相当于将没有保存到硬盘上的数据
    保存到硬盘上!
隔离性
  • read uncommitted
  • read committed
  • repeatable read
  • serializable (序列化/串行化)

索引

索引在mysql当中都是一个树的形式
存在。(自平衡二叉树:B-Tree)
创建索引:create index emp_ename_index on emp(ename);
删除索引:
drop index emp_ename_index on emp;
explain select * from emp where ename = 'KING'; #可检查是否创建索引
索引失效情况
  1. 模糊匹配当中以“%”开头
  2. 使用or的时候会失效,如果使用or那么要求or两边的条件字段都要有。
  3. 使用复合索引的时候,没有使用左侧的列查找,索引失效。
  4. 在where当中索引列参加了运算,索引失效。
  5. 在where当中索引列使用了函数。

视图

创建视图对象:
create view dept2_view as select * from dept2;

删除视图对象:
drop view dept2_view;
面向试图插入:insert into dept2_view(deptno,dname,loc) values(60,'SALES', 'BEIJING');
视图对象在实际开发中到底有什么用?

在需要编写多条SQL语句的位置直接使用视图对象,可以大大简化开发。 并且利于后期的维护,因为修改的时候也只需要修改一个位置就行,只需要 修改视图对象所映射的SQL语句。

三大范式

第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。

第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,
不要产生部分依赖。

第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,
不要产生传递依赖。
数据库设计三范式是理论上的。

实践和理论有的时候有偏差。

最终的目的都是为了满足客户的需求,有的时候会拿冗余换执行速度。

因为在sql当中,表和表之间连接次数越多,效率越低。(笛卡尔积)

有的时候可能会存在冗余,但是为了减少表的连接次数,这样做也是合理的,
并且对于开发人员来说,sql语句的编写难度也会降低。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇