Mysql数据库基础知识

Mysql存储引擎

一,执行sql语句:SHOW ENGINES \G 可查询数据库支持的引擎类型

注意以\G结尾的查询结果将更美观



由图可知Mysql 5.5默认存储引擎为InnoDB,或者可执行sql语句:

SHOW VARIABLES LIKE ‘storsgr_engine%’;直接查询当前默认引擎

二,修改my.inidefault_storage_engine来修改默认使用的存储引擎

三,各种存储引擎的特性及选择

 

MYISAM引擎:不支持事务和外键,访问速度比较快,适合不需要事务的访问为主应用

InnoDB引擎:支持事务和外键,比MYISAM引擎更占用空间,适合增删改操作和并发

MEMORY引擎:使用内存存储数据,适合数据量较小的快速访问

mysql中的基本数据类型

数值类型加上unsigned表示无符号化,只取正值,加上zerofill表示用0填充到指定位数

Float单精度有效数字8位,超出则四舍五入,如Float f =122.213123f;实际上f=122.21312,后面被舍掉。

Double双精度有效精度16位小数点,超出则四舍五入。

Float和Double也可以使用Float(M,D)和Double(M,D)的方法定义宽度,但是只能在8位和16位内保证精确性,其他位置不准确

Decimal定点数比Double的精度还要高,可以指定其精度M和小数点后位数D,如DEC(38,30)为整数8位,小数30位,

存入数据可以完全按照这个精度进行存储。存储货币单位时使用Decimal。

date为年月日 curdate()函数返回当前日期date类型数据,如2018-03-25

datetime为年月日时分秒 now()函数返回当前日期和时间datetime类型数据,如2018-03-25 0:15

timestamp为时间戳

time为时分秒 time(now())函数返回当前时间,如0:15

year为年份 year(now())函数返回当前年份,如2018


binary和blob都可以存储二进制文件(如图片,音乐,视频文件),前者存储较少量的数据,后者存储较大量的数据如电影。

索引

索引用于快速找到某个特定值得行,若没有索引,则从第一行开始读完整个表直到找到相关行。索引的存储类型有btree和hash,myisam和innodb引擎只支持btree索引,memory和heap引擎支持btree和hash两种索引,使用索引可以加快查询速度,但是索引过多也会增加数据空间和维护成本。可使用explain select * from user获得查询语句是否使用到了索引

索引类型:

一,普通索引和唯一索引

二,单列索引和组合索引

组合索引只有在查询时使用了最左侧字段才会生效

三,全文索引

可以在char,varchar,text字段上添加,只有myisam引擎支持该索引

四,空间索引

可在空间数据类型的字段上添加

索引设计原则:

一,避免添加过多索引,会影响select,update,delete性能

二,避免对经常更新的字段添加索引

三,数据量小的表不要索引,反而会降低查询速度

四,频繁分组group或排序order的字段添加索引

五,尽量使用短索引,指定前缀长度,如key 'name_index'(username(20)),表示对username字段前20个字符做索引,

短索引可提高查询速度和节省空间

存储过程和函数

存储过程相当于多条sql语句集,存储函数为自定义mysql函数

一,创建存储过程方法:

create procedure  proc()

begin

select * from user;

end;

二,调用存储过程方法:

call proc();

三,创建存储函数方法:

create function fucexample()

returns char(50)

return(select * from user where id=0);

四,调用存储函数方法:

select funcexample();

五,查看存储过程和函数方法:

show procedure status like '%c';

show function status like '%e;

触发器trigger

触发器和存储过程类似,都是多个sql语句集,但是触发器是被update,delete,insert等事件被动触发,存储过程是主动调用

一,创建触发器方法:

create trigger my_trigger before insert on user for each row XXX执行体XXX:

该触发器在insert执行前先触发执行体内容

二,查看触发器方法:

show triggers;

备份和恢复

一,备份方法:

使用mysqldump命令可将数据库备份为sql文件

备份单个数据库所有表 mysqldump -u user -p password mydatabase;

备份单个数据库单个表 mysqldump -u user -p password mydatabase mytable;

备份多个数据库 mysqldump -u user -p password --databases mydatabase1 mydatabase2;

备份所有数据库 mysqldump -u user -p password --all-databases;

二,恢复方法:

导入备份的sql文件

mysql -u user -p password mybackupfilename;

性能优化 

查看慢查询次数 show status like 'slow_queries';

一,优化查询

使用 explain select XX查询体XX; 来查看查询语句执行情况

若possible_keys和key为null,说明索引未生效,原因一般为:

1,模糊查询时第一个字符为%,只有%在最后才会生效

如select * from user where name like 'xxx%'

2,使用联合索引时,索引字段必须位于第一位才生效

3,使用or关键字查询时,or前后字段必须都是索引字段才会生效

子查询效率往往比较低,因为系统会为子查询建立临时表,从而影响效率,可把子查询用join替换,提高效率

SELECT a.idcardNo, a.name, a.nickname, (SELECT b.nickname FROM cadre b WHERE b.name=a.name) AS nickname_b FROM student a;

可替换为SELECT a.idCardNo, a.name, a.nickname, b.nickname FROM student a LEFT JOIN cadre b ON a.name=b.name;

二,优化数据库结构

1,将字段很多的表拆分为多个表,不常用字段设新表

如用户信息可以拆分为member和member_info两个表,memb_info存储不常用的address,phone和desc字段

2,增加中间表

3,增加冗余字段

猜你喜欢

转载自blog.csdn.net/xuanwugang/article/details/79683071