Mysql基础学习

##union合并查询结果

select ename,job from emp where job = ‘Man’

select ename,job from emp where job=‘Sal’;

union

select ename,job from emp where job in (‘Man’,‘Sal’);

union的效率要高一些,对于表链接来说,没连接一次新表,则匹配的次数满足笛卡尔积,成倍翻,但是union减少匹配的次数,在减少匹配次数还可以完成两个结果集的拼接

union 在使用的时候要求列和列的数据类型得一致

limit

limit 将查询结果一部分查询出来,可以使用分页查询

分页作用是提高用户的体验,可以一页一页的翻着看

select ename from emp order by desc limit 0,5

mysql中limit在order by之后取出

limit (pageNo-1)*pageSize ,pageSize

Dql

select…

form…

where …

group by…

having…

order by…

limit …

执行顺序

from

where

group by

having

select

order by

limit

str_to_date

函数可以把字符串varchar转换为date类型数据

%Y %m %d %h %i %s

truncate语句,直接删除内存空间,不支持回滚,快速,是否真的要删除,并且警告无法修复

constraint约束

创建表,字段加一些约束,保证数据的完整性,有效性

非空 not null

唯一约束 unique

主键约束 primarykey

外键约束 foreignkey

检查约束

source

执行sql文件,

外键foreignkey

foreign key(con) references t_class(classno)

子表的外键引用父表的某个字段,被引用这个字段必须是主键?

不一定是主键,但至少具有unique约束

存储引擎

存储引擎实际上是一个表存储/组织数据的方式

不同的存储引擎,表存储数据的方式不同,在建表的时候可以在最后小括号的右边使用,ENGINE指定存储引擎 默认是InnoDB

CHARSET指定表的字符编码方式

engine =InnoDB default charset=utf-8

怎么查看mysql支持什么引擎

show engines \G

索引相当于一本书的目录,,缩小扫描范围,提高查询效率

InnoDB支持事务,是mysql默认的引擎,支持数据库奔溃后的自动修复机制,非常安全,在表空间中,被用于存储表的内容。

MyISam不持支事务,安全性低


MEMORY存储引擎,数据存储在内存中,(查询快,不能包含text和Blog)

MEMory存储引擎之前被叫heap引擎

查询效率高,不安全,关机后数据消失,因为数据和索引都放在内存中


事务

重点中的重点

什么是事务?

事务其实就是一个完整的业务逻辑。

什么是完整的业务逻辑呢?

转账:A向B转账1000,A账户减少1000,B账户增加1000,这就是一个完整的业务逻辑,是一个最小的工作单元,要么同时成功,要么同时失败,不可再分,事务只根增删改有关,其他语句和事务没什么关系

一个业务逻辑需要执行多条sql语句,如果只有一条DML语句,事务没有必要存在,因此,完成一件事需要多条DML语句共同联合语句搞定

一个事务其实是多条DML语句同时成功,或者同时失败

事务是如何做到同事成功和同时失败呢?

InnoDB存储引擎,提供一组用来记录事务性活动的日志文件

每一条DML的操作都会被记录到“事务性活动的日志文件”

提交事务,清空事务活动的日志文件,并将数据全部持久化到数据库表中,并且是一种完全成功

回滚事务,将之前的DML操作全部撤销,清空日志文件,回滚事务标志着事务的结束,是失败的结束。

提交事务:commit语句

回滚事务:rollback语句

事务英文单吃:transaction

mysql默认情况下是默认是自动提交事务

怎么将mysql的自动提交机制关闭呢.?

先执行:start transaction;

commit提交事务,持久化到数据库

事务的4个特征ACID

A原子性

事务是最小的工作单元,不可再分

C一致性

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

I隔离性

A事务和B事务之间有一定的隔离

教室A和教室B之间有一道墙,这道墙就是隔离性

D持久性

事务始终结束的是一个保障。事务提交,就相当于将没有保存到硬盘上的数据保存到硬盘中!

事务的隔离级别:

4个级别

读未提交 read uncommitted

事务A可以读取到事务B未提交的数据

这种隔离级别存在问题:脏读(Dirty Read),这种隔离级别是理论上的,大多数数据库隔离级别二档起步

读已提交 read committed

事务A只能只读到事务B提交后的数据

解决了脏读的现象,这种隔离级别存在不可重复读取数据

什么是不可重读?

当事务开启的时候,第一次读取数据是3条,当前事务还没有结束,可能第二次读到的数据4条,这种隔离级别是比较真实的数据,每次读到的数据绝对真实。Oracle数据库默认的事务隔离级别就是read committed

可重复读 repeatable read

什么是可重复读?

事务A开启之后,不管多久,每次从事务A中读到的数据都是一致的,即使事务B将数据修改了,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读,解决了不可重复读取数据的问题,可能会出现幻读,不够真实!

序列化/串行化 serializable

这是最高的隔离级别,效率低,解决所有问题

这种隔离级别表示事务队列,不能并发

每一次读到的数据都是最真实的,并且效率是最低的

索引

索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。一个表的一个字段可以添加一个索引,索引相当于一本书的目录,是为了缩小扫描范围而存在的一种机制。缩小扫描范围,避免全表扫描,在mysql中主键,以及unique字段上都会自动添加索引

什么时候才会给字段添加索引?

1.数据庞大,每一个硬件环境都不同

2.该字段经常出现在where后面,一条件形式存在,这个字段总被扫描

3.该字段很少的DML(insert,update,delete)操作,因为DML后的索引需要重新排序

索引如何创建,删除

create index emp_ename_index on emp(ename);

drop index emp_ename_index on emp;

explain select * from emp where ename="**",查看是否使用索引

索引是各种数据库进行优化的重要手段。优化的时候优先考虑的要素就是索引

单一索引,单个字段添加索引

复核索引 多个字段添加索引

主键索引 主键添加索引

唯一性索引 具有unique约束的字段上添加索引

视图

什么是视图;

view:站在不同的角度看待同一份数据

如何创建视图对象

creat view emp_view as select * from emp;

drop view emp_view;

什么是视图?

我们可以面向视图对象进行增删改查,对视图对象的增删改查,会导致原表被炒作(视图特点:通过对视图的操作,会影响到原表数据)

视图是简化sql语句的,即引用

视图对象是一个文件,在数据库中也是以文件的形式存在,视图不是在内存中,是存储在硬盘上的,不会消失,方便,简化开发,利于维护

数据库设计的三范式

什么是数据库设计的范式?

数据库表的设计依据,教你如何进行数据库的设计

数据库设计的范式共有?

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

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

第三范式:建在在第二范式的基础上,要求所有非主键字段都直接依赖于主键,不要产生传递依赖

设计数据库表的时候,按照以上范式进行,可以避免表中数据的冗余,空间的浪费

多对多三张表,关系表,两个外键

一对多,两张表,多的表加外键

数据库设计三范式是理论上的

实践和理论有偏差

最终目的满足客户要求,有的时候会拿冗余换执行速度

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值