• 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 ;  

      

  • 相关阅读:
    【转载】WinCE编译一二三
    Implement the OEM Power Management on Windows CE
    ubuntu 精简系统
    simple awk tutorial
    debian 安装备份已安装软件包
    awk 简单教程
    Unix Sed Tutorial: Advanced Sed Substitution Examples
    dos修改子文件夹所有文件文件名
    Using Intel MKL with MATLAB Matlab使用多核CPU
    [转]学校的统一订书80%该烧掉——IT推荐书单
  • 原文地址:https://www.cnblogs.com/EasonSun/p/3193094.html
Copyright © 2020-2023  润新知