MySQL 快速入门学习教程(4)

char与varchar 在Innodb存储引擎中,建议使用varchar类型。对于Innodb数据表,内部的行存储格式没有区分固定长度和可变长度列,因此固定长度列的性能不一定比不可变长度的性能好。

Text与blob 一般在保存少量字符串的时候,我们会选择char或者varchar,而在保存较大文本的时候,通常会选择使用text或者blob。两者的区别:text只能保存字符数据,比如日志。blob能保存二进制数据,比如照片。

浮点数与定点数 在MySQL中,decimal或者(numberic)用来表示定点数

日期类型的选择

date/time/datetime/timestamp

七、索引的设计和使用

索引概述 索引是数据库中用来提高性能的最常用工具。在MySQL中,MyISAM与Innodb存储引擎的表默认创建的都是Btree索引。

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;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a171b0777b4d9d211a84b7b6daa89dab.html