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_namecreate 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 viewdrop 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 = 5mysql > 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 ////查看创建好的triggermysql->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 ;