三十分钟MySQL快速入门(图解)


当前第2页 返回上一页

1.索引的创建

create table indexTest(
id int not null auto_increment,
memberid int not null,
createtime datetime not null default current_timestamp,
primary key (id)
)
alter table indextest add orderserial varchar(50) not null;
create unique index IX_orderserial on indexTest(orderserial);

insert into indextest (memberid,createtime,orderserial)values(112123,'2016-08-14','sz121213')
说明:上面创建一个表,其中定义orderserial为唯一索引。

语法:create [unique\fulltext\spatial] index index_name on tablename(columname)

2.设计索引的原则

1.最合适的索引列是出现在where子句中列,或连接子句中指定的列,而不是出现在select关键字后面的选择列表的列

2.使用唯一索引,需要考虑列中某个值得分布,如果索引列种的基数越大,则索引的效果越好。举个例子:订单号就可以设置唯一索引,因为订单号的不一样。而对于rowstatus就无须了,因为rowstatus要么是有效要么是无效。这样的筛选出的范围还是很多,没有意义

3.不要过度索引。因为所有也要占用额外的磁盘空间,如果一个索引很少使用,那么会不必要的减缓表的修改速度
显示MySQL的执行计划:explain 后面加mysql语句

八、视图

视图(View)

定义:视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的,视图并不是在数据库中实际存在。

优势:

1.简单,用户完全不需要关心后面对应的表的结构/关联条件和筛选条件。对用户来说已经是过滤好的符合条件的结果集

2.安全,使用视图的用户只能访问他们被允许查询的结果集

3.数据独立,一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响。

语法:

create or replace view index_view as
select * from indextest

1.创建create [or replace] view viewName as select ...

2.查询 select * from 视图名称

3.展示视图 show tables;

4.删除视图 drop view viewname

九、存储过程和函数

一、存储过程(store procedure)和函数

存储过程和函数是事先经过编译并存在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的

语法:

create database finance;//创建finance数据库
use finance;
create table orders(
orderId bigint not null auto_increment,
memberId int not null default 0,
serialNumber varchar(50) not null default '',
amount decimal(18,2) not null default 0,
createTime datetime not null default current_timestamp,
primary key (orderid)
)//创建orders订单表
insert into orders (memberId,serialNumber,amount) values(6561121,'sz12234222',5),(233444,'ys1652233',10)//插入测试数据
delimiter &
create procedure orders_serial(in serial varchar(50))
reads sql data
begin
select * from orders
where serialNumber=serial;
end &

注释:delimiter $$命令就是将语句的结束符从分号;修改成其他符号,这里指的是$$为结尾。这样在number后面的分号就不会认为结束。

1.调用存储过程

call orders_serial('sz12234222')

2.存储过程的好处

逻辑封装在数据库端,调用者不需要了解中间的处理逻辑,一旦调用逻辑发生变化,只需要修改存储过程即可,而对调用者的程序完全没有影响。

3.删除存储过程

drop procedure if exists orders_serial
//if exists可选

4.查看存储过程差状态

show procedure status like 'orders_serial'

5.查询存储过程的定义

show create procedure orders_serial

二、存储过程变量的使用

存储过程可以使用变量,并且在MySQL5.1版本后,不区分大小写

1.变量的定义

变量的作用域只能在begin...end块中,可以嵌套在块中

declare currentTime date;

2.变量的赋值

set currentTime=now();//直接赋值
select XX into currentTime from XX;//也可以通过sql语句进行赋值

3.定义条件和处理

declare handler_type handler for contidtion_value;

handler_type:

1.continue;
2.exit;
3.undo;

condition_value:

1.sqlstate
2.sqlwarning
3.not found
4.sqlexception

eg: declare continue handler for sqlstate '2' set @x=1;

三、光标的使用

在存储过程和函数中,可以使用光标对结果集进行循环处理,光标的使用包含光标的声明: open、fetch、close

定义:

declare cur_id cursor for select * from orders;
open cur_id;
fetch cur_id;
close cur_id;

四、事件调度器

事件调度器是MySQL5.1后面新增的功能,可以将数据库按照自定义时间周期触发某种操作。数据库默认操作是关闭的。需要打开

create event x
on schedule
every 5 second
do
insert into orders (memberId,serialNumber,amount) values(6561121,'222',5)
set global event_scheduler =1//打开调度器
alter event x disable;//禁用事件调度器
drop event x;//删除事件调度器

十、 触发器

触发器

触发器是在5.02版本后支持的,触发器是与表有关的数据库对象,在满足条件时触发,并执行触发器中定义的语句集合。可以协助应用在数据库端确保数据的完整性

drop trigger orderlog
delimiter $
create trigger orderlog 
after insert on orders for each row
begin
insert into orderslog (content) values(new.serialNumber);
end 
insert into orders (memberId,serialNumber,amount) values(6561121,'sz12234222',5)

解释:上面描述的是创建一个触发器,当往订单表中插入数据之后,在订单日志表插入一条记录。使用old和new来引用触发器发生变化的记录内容,目前只支出行级触发,不支持语句级触发

触发器执行的顺序

before insert\before update\after update

十一、 事务控制和锁定语句

MySQL存储引擎的事务说明

1.Lock Table与Unlock Table

语法:

use finance;
lock table orders read;
unlock table;

如果某个进程(session1)lock定了表,那么其他的进程(session2)可以查询,但是不能进行更新操作,直到第一个进程释放了锁

2.事务控制

十二、总结

很高兴您能阅读到这里,可能在三十分钟很难吸收这么多的知识,这篇文章也是我之前学习MySQL笔记整合的。这篇文章也是理论偏多,对于其中比较比较难理解知识点写些Demo,权当个人理解,如有不足的地方,请您指出。如果对您有所帮助,请点个赞!

更多相关Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

mysql的行级锁是什么意思?

mysql查询结果顺序按in()中id的顺序排列的实例分析

mysql居然还能实现分布式锁的方法

mysql索引之底层结构学习

mysql主要用于什么方面

mysql怎么删除数据库中的表

mysql中mydumper 和 mysqldump对比使用详解

mysql启动时innodb引擎被禁用了怎么办

alisql和mysql区别

mysql多字段分区

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...