您的位置:首页 > 数据库 > MySQL

mysql 笔记 六 存储引擎 事务 索引 存储过程

2012-10-06 14:34 766 查看
存储引擎

一部电影 mp4 wma avi flv 各种格式

数据也有多种管理方式,那么这些不同的管理方式 就是存储引擎的概念

Create table aaa (

)

Engine myisam 设置引擎

Charset utf8 设置编码

常用的引擎

Myisam 批量插入速度快 不支持事务 锁表 支持全文索引

innoDB 批量插入速度慢 支持事务 锁行 5.5支持全文索引

事务

通俗的讲 就是一组操作要么都成功 要么都失败 -- 原子性

在所有操作都没执行完毕之前 其他的都看不到中间改变的问题 -- 隔离性

事务发生前发生后 总额的正确性 -- 一致性

事务产生的影响 是不能撤销的 只能在开另一个事务 --- 持久性

也有人叫 acid 特性

开启事务

Start transaction

写 sql语句。。。。。。。。

成功执行后

Commit 执行 事务内的sql语句

失败

rollback 回滚

下次执行的时候 还要再次开启

有些语句 会隐式提交事务 比如重复输入 start transation

用了事务之后 一些sql语句 会被记录到 mysql 事务日志里面了 用了commit之后 就集中的提交了 如果用了 rollback 就不提交

《数据库概念》

备份与恢复

系统运行中

增量备份 每天备份每天增加的

整体备份 每周整体备份一次

如果周五除了问题 可以用 周日的整体备份 + 1234的增量备份 恢复

备份的工具 有第三方的收费备份工具

也有系统自带的简单的备份工具

在 mysql 安装目录的

Mysql/bin/mysqldump.exe

用mysqldump 导出 一个表

在cmd 下面 用

mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 地址 .sql

也可以不写表名 导出整个库

Mysqldump -uroot -paaaaaa aaaa account > d:\\account.sql

但是不能同时导入多个数据库 但是可以加个 -B(database)这样就是以库为单位 mysql 就不会误会了

如果你真的很懒 想要导出全部的库 这样就能导出所有的数据库了

Mysqldump -uroot -paaaaaa -A(all) >d:\\all.sql

恢复

只要把刚才的好多sql语句 一下子执行一次就好了

以库为单位

Source d:\\aa.sql; 这一条语句就好了

以表位单位

只要

Mysql > use 库名

Mysql > source 备份文件就好了

如果不登陆到 mysql 那么怎么恢复库呢

Mysql -uroot -paaaaaa < D:\\\aa.sql

不登陆 针对表级的文件 怎么恢复呢

Mysql -uroot -paaaaaa aaaa(库名) <d:\\aa.sql

索引

设置有N条记录 不用索引 要找 n/2 次

如果有了索引 也许只要找1次

Tree 二叉树 索引 log2/n

Hash 索引 1次

二叉树

4

2 6

1 3 5 7

如果找3 先从4开始找 然后找到2 2 比3小 3在2的右边 找到了!

一万的数据 有可能减少到 14次以下就找到了

索引 不光要把数据插入数据库 而且还要修改索引

索引加快了查询的速度

减慢了 删改查的速度

索引文件 也是文件 也会有大小 有时候 索引文件 有的比数据文件还大

如果有表 带索引 那么应该如何导入呢

可以先修改表 去掉索引 然后导入 然后统一加索引

不要过度索引

索引尽量增加到 查询很频繁的列 比如 id 用户名

尽量索引散列值 过于集中的索引不要 越不重复越好

Frm 是表结构的意思

Myd(data) 就是数据的意思 存储数据

Myi (index) 就是数据库的索引文件

索引分类

普通索引 (index) 仅仅是加快查询速度

主键索引 primary key 主键不能重复 主键索引必须是唯一的 一张表只有一个主键

唯一索引 unique index 行上的值不能重复 唯一索引不一定是主键 但是可以有多个唯一索引

全文索引 fulltext index

查看一张表上的索引

Show index from 表名 \G 是以列来显示

建立索引

Alter table 表名 add [ index / unique index / fulltext / primary key / ] 【索引名(可选)】 (列名)

Alter table member add index tel (tel); 普通索引

Alter table member add unique (email) 唯一索引

Alter table member add fulltext (intro) 全文索引

主键 索引

Alter table member add primary key (列名) 不用写索引名 因为索引就这一个

Alter table member add primary key (id) 主键

删除索引

Alter table 表名 drop index 索引名 最后是写索引名

Alter table member drop index intro 删除索引

但是怎么删除主键索引呢 主键索引 没有索引名 直接写primary key 就好了

Alter table member drop primary key

大数据导入导出的时候 就先删除 表的索引 然后在集中建立索引

索引创建原则

不要过度索引

索引尽量散列值

在where条件最频繁的值上加索引

全文索引

在mysql 默认设定中 对中文意义不大

如果是大文章的话 没有用全文索引 找一个词 要用 like 那是一行一行的找 效率 很低很低的

全文索引查找方式

Select * from member where match(列名) against('查询内容');

Select * from member where match(initr) against('databases');

一般很多词 都是停止词 所以索引不出来

可以查看某个单词的匹配度

Select match('intro') against('data') from member;

全文索引在默认情况下 对中文的意义不大 全文索引是针对文章中每一个词 做索引的 但是 中文 都是一句话 一句话的 所以 分词技术 很难 国内也就几家公司能做 比如百度 就像163都做不起来 最多也就有个很大的词库 来分析词

存储过程

存储过程 类似于一个函数 就是把一段sql 语句 封装成一个整体 当要使用的时候 可以调用这个存储过程来实现

在封装的语句体里面 可以用 if else case while 等控制结构

列也可以当成变量来看 所以 存储过程 可以当成一个程序来看 可以进行 sql编程

查看现有的存储过程

Show procedure status;

删除存储过程

Drop procedure 存储过程名称;

写一个存储过程

Create procedure p1()

Begin

Select * from g;

End$

调用存储过程

Call p1();

存储过程和函数的区别 一个名字不同 一个 没有return 其他都一样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: