Mysql 数据库优化

1、mysql基础操作

2、常用的sql技巧

3、sql语句优化

4、mysql数据库优化

5、myisam表锁

6、mysql服务器优化

 

一、mysql基础操作

1.1 mysql 表复制

复制表结构+复制表数据

mysql > create table t3 like t1;
mysql > insert into t3 select * from t1;

1.2 mysql 索引

1、alter table 用来创建普通索引,unique索引或者parimary key索引

alter table tab_name add index index_name(column_list) //普通索引
alter table tab_name add unique(column_list) //唯一索引
alter table tab_name add primary key(column_list) //主键索引

2、create index 

create index index_name on table_name
create unique index index_name on table_name

3、drop index

drop index index_name on table_name;

4、alter table table_name drop 

alter table table_name drop index index_name;
alter table table_name drop primary key;

 

1.3 mysql 视图

创建视图

mysql > create view view_name as select * from table_name;

//view 视图的帮助信息
mysql > ? view 
alter view 
create view
drop view

//查看视图
msql > show tables;

//删除视图
mysq > drop view view_name;

  

1.4 mysql 内置函数

字符串函数

concat(string1,string2) //连接字符串 select concat('hello','world') as myname; 

LCASE(string1) // 转换成小写 select lcase('mysq') as myname

UCASE(string1) //转换成大写  

Length(string1) //string1 长度

ltrim(string1) //去除左边空格

rtirm(string1) //去除右边空格

repeat(string1,count) //把string1 重复 count 次数

replace(string,search_str,replace_str) // 在str中用relace_str替换search_str

substing(string,pos,length) // 从str的pos开始取出length个字符

space(count) //生成count个空格

数学函数

BIN(decimal_number) //十进制转二进制

ceilling(number) //向上取整

floor(number) //向下取整

max(column) //取最大值 ,聚合使用

min(column) // 取最小值 ,聚合使用

sqrt(number) // 开方

rand() //返回0-1的随机数   随机排列 select * from t1 order by rand();

 

日期函数

curdate() //返回当前日期

curtime() //返回当前时间

now() //返回当前日期时间

unix_timestamp(date) //返回时间戳

from_unixtime() //返回时间戳中的日期值

week(date) //返回日期date一年中的第几周

year(date) //返回日期date中的年份

datediff(d1,d2) //计算日期d1与d2之间相隔的天数

1.5 mysq预处理语句

设置smtm1预处理,传递一个数据作为where判断的条件:

mysql>prepare smtm1 from 'select * from table_name where id >@i';

//设置一个变量:

mysql > set @i = 1;

//执行stm1 预处理

mysql > execute smtm1 using @i;

//设置@i = 5

mysql > set @i = 5;

//再次执行smtm1 预处理

mysql > execute smtm1 using @1;

//如何删除预处理

mysql > drop prepare smtm1;

1.6 mysql 事务处理

// 关闭自动提交功能

mysql > set autocommit;

//从表t1中删除一条记录

mysql > delete from t1 where id =1;

//此时做一个p1还原点

mysql > savepoint p1;

//再次从t1中删除一条记录

mysql > delete from t1 where id =2;

//再做一个p2还原点

mysql > savepoint p2;

//此时恢复到p1还原点

mysql > rollback p1;

//退回到最原始的还原点

mysql > rollback;

  

1.7 mysql存储过程

创建一个存储p2();

mysql> \d //; 改变界定符
mysql> create procedure p2()
-> begin
-> set @i = 1;
-> while @i<100 do 
-> insert into t2(name) values(concat('user',@i));
-> @i = @i +1;
-> end while ;
-> end //

//执行储存 p2();
mysql > \d ;
mysql > call p2;
//查看procedure p2的status 信息
mysql > show procedure status \G
//查看procedure 的具体信息
mysql > show create procedure p2 \G

  

1.8 mysql触发器 (trriger)

//修改delimiter 为  //
mysql > \d //;
//创建一个名字为tg1的触发器,当向表t1插入一行数据的时候也向t2插入一条相同的数据
mysql > create trigger tg1 before insert on t1 for each row 
->begin
->insert into t2(name) values (new.name);
->end //

//查看创建好的trigger
mysql->show triggers;

//向t1表中插入多条数据
mysql->insert into t1(name) values ('user1'),('user2') .... ;

//如何制作删除表t1后t2表中的数据也跟着删除
mysql > \d //
mysql > create trigger tg2 before delete on t2 for each row
->begin
->delete from t2 where id = old.id;
->end //
mysql>\d ;

//如何制作更改表t1后t2表中的记录跟着改变呢?
mysql > \d //;
mysql > create trigger tg3 before update t1 for each row
->begin
->update t2 set id = new.id where id = old.id
->end //

1.9 重排auto_increment

Mysql 数据库自动增长的Id如何恢复

清空表的时候,不能用

delete from table_name;

而是要用:

truncate table table_name;

这样auto_increment 就恢复成1了;

或者清空内容后直接用alter命令修改表:

alter table table_name auto_increment =1 ;  

  

posted @ 2013-07-16 12:25  hoho,SalesForce  阅读(405)  评论(0编辑  收藏  举报