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

MySQL 优化系列 --1.基础操作

2016-12-25 11:32 591 查看
1.1 表复制
复制表结构 + 表数据
create  table  t2  select  *  from  t1 ;  //表结构完全相同时可用.
推荐使用
-1. 创建表结构
create  table  t2  like  t1;
-2. 复制表数据
insert    into    t2     select   *   from    t1 ;                  //表结构相同
insert    into    t2     (name)    select    name    from    t1;    //取部分列值
1.2 索引
-1. 创建索引
create   index    注意: 不能创建主键索引
create   index   inx_name   on t2(name)       //创建索引
drop     index   inx_name   on   t2           //删除t2表的inx_name索引;
show     index  from   t2                     //显示t2表的索引;
alter    table   t2   ADD    INDEX    inx_name   (name); // 用 alter 命令给 t2 表 name 列添加索引.
注意(非自增主键)可以用 alter 命令添加主键索引.
alter    table   t2   drop   INDEX    inx_name;          //用alter 命令删除 t2 表的 inx_name 索引.
1.3 视图
-1创建视图
视图: 可以看做,通过条件取出数据的中间表 , 可以做频繁查询的中间表,  注意: 如果视图查询依赖的表损坏,视图将发生错误.
create   view   v_t2   as   select   name   from   t2   WHERE   id >2   and   id< 5
show   TABLES             //查看视图
SELECT  *   from  v_t2    //查询视图
drop   view   v_t2;       //删除视图
1.4  字符串函数
SELECT  CONCAT("good"," boy") as  boy;    //连接字符串
SELECT  LCASE("GOOD") AS LOW;             //转成小写
SELECT  UCASE("good") as UPPER;           //转成大写
SELECT  LTRIM("   good") as ltrim;        //good   前端取空格
SELECT  REPEAT("good",3) as good3;        //重复3次good
SELECT  REPLACE("linux is very good","linux","java") as java;     // java is very good   替换字符串
SELECT  SUBSTRING("good",1,2)  as go;                             //输出 go   截取字符串
SELECT  CONCAT("老王","在隔壁")  as wang;                         //输出 老王在隔壁  连接字符串
1.5 数字函数
SELECT CEILING(88.88);               //输出 89  向上取整
SELECT  FLOOR(88.88);                //输出 88   向下取整
SELECT  MAX(id)    from    t2 ;      //输出最大值 ,聚合函数
SELECT  SQRT(4)    as     two;       //开平方
SELECT  *  from   t2   ORDER   BY   RAND();   //随机排序,   rand()返回0-1内的随机值
1.4 日期函数
SELECT    CURDATE()   as   now_date          //输出: 2016-12-25   显示当前日期
SELECT    CURTIME()   as   now_time          //输出:11:14:49          显示当前时间
SELECT    NOW()       as   now               //输出:2016-12-25 11:16:02  显示当前日期时间
SELECT    UNIX_TIMESTAMP( CURDATE() )  as  timestamp;  //输出: 1482595200   显示当前日期的Unix时间戳的日期值.
SELECT    WEEK("2016-12-25");                //输出:52  显示当前date在一年中的第几周.
SELECT    YEAR("2016-12-25")                 //输出:2016  显示当前日期的年份
SELECT    DATEDIFF("2016-12-31",  "2016-12-25")        //输出 6   显示2个日期的相差天数
1.5 预处理函数
-1:首先 :  修改语言定界符: \d //
-2 prepare  st   from   'select * from t2 where  id>?';   //定义预处理语句:  'select   *   from   t2   where    id>?'
-3 set   @i=1;                                            //定义变量i= 1;
-4 execute   st    using@i;                               //执行预处理语句, 使用变量i.  'select   *   from   t2   where    id>1'
-5 //                                                     //因为修改了语言定界符号为"" // "".所以用  //  执行.
-6 drop    prepare  st;                                   //删除预处理语句.
-7 //
1.6 事务函数
-1 set    autocommit=0;                            //表引擎innodb支持事务.  autocommit=0;    设置不自动提交
-2 savepoint    p1;                                //保存还原点, 用于回滚(rollback)
-3 delete   from  t2  where   id = 1;              //删除表t2中ID=1的列;用于测试回滚是否成功.
-6 rollback to p1;
-7 select  * from t2;                              // 测试回滚是否成功.  必然是成功的哟!
1.7 存储函数
-1 \d //
-2 create     procedure p2()                              //创建存储
-3 begin
-4 set   @i=1;                                            //设置变量值
-5 while    @i<5    do                                    //流控制函数  (循环函数)   注意:  主要应用流控制函数. 流控制函数将在下一篇写.
-6 insert    into      t2 (name)  values  (concat("user"),@i));          //插入数据库语句
-7 set @i= @i+1;                                          //设置变量自增
-8 end  while;                                            //结束循环
-9 end //                                                 //结束存储
-1 call   p2();                                           //调用存储,执行循环插入数据库
-2 drop procedure  p2;                                    //删除存储函数
1.8 触发器
truncate   t1 ;                                           //擦除t1表,速度比delete快.尤其大数据量删除效果更显著.
-1 create   trigger   tg_insert  before  insert  on  t1 for  each  row   //当向t1表插入数据时 启动触发器.
-2  begin
-3 insert  into  t2(id)  values  (new.id) ;               //t1表插入的id列的值
-4  end //
-5 select * from t2 //                                    //测试 t2 表 是否执行了  触发器的插入语句.  必然执行了呀.
-1 create   trigger   tg_delete   before  delete  on  t1  for   each  row   //当t1表删除数据时 启动触发器. 同步删除 t2表的对应id 的列
-2 begin
-3 delete   from   t2    where   id =  old.id;
-4 end //
-1 create   trigger   tg_update   before  update  on   t1  for  each  row   //当t1表更新触发t2表的更新
-2 begin
-3 update  t2 set  id =  old.id  where  id =  old.id;
-4 end //
show  triggers     //查看所有触发器.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: