mysql的学习总结

##2015-07-25 找出最后一次插入记录的id

   insert into …… //
    //紧跟insert 语句之后
    select last_insert_id();

##2015-07-15  

  //转换为日期
    FROM_UNIXTIME( addtime, ‘%Y-%m-%d %h:%m:%s‘ )

    group_concat
    //去重复字段
    SELECT id,uid,content,GROUP_CONCAT(DISTINCT uid) FROM `wp_magicwall` GROUP BY uid ORDER BY addtime

##2015-07-14

    find_in_set()
    //假如字符串str在由N子链组成的字符串strlist,则返回值范围在1-N之间,str不在strlist,则返回值为0
    fing_in_set(str,strlist)
    //可返回多条记录

##函数

##coalesce()
    colesce() // 返回传入的参数中的一个非null的值

##case when
    //case when 用于计算条件列表并返回多个可能结果表达式之一
    case
    when boolean_express then result_express
    ……
    else else_result_express
    end

    //
    case input_express
     when when_express then result_express
     ……
     else else_result_express
    end
###例子
    select ‘price‘ =
        case
            when price is null then ‘have no price‘
            when price < 10 then ‘cheap‘
            when price >= 10 then ‘middle‘
            else ‘expensive‘
        end,
        case (title as varchar(20)) as ‘short title‘
    from titles
    order by price

###例子2
    select
    case
            when price is null then ‘have no price‘
            when price < 10 then ‘cheap‘
            when price >= 10 then ‘middle‘
            else ‘expensive‘
        end,
        case (title as varchar(20)) as ‘short title‘
    from titles
    group by
        case
            when price is null then ‘unpriced‘
            when price < 10 then ‘bargain‘
            when price between 10 and 20 then ‘average‘
            else ‘gift to impress relatives‘
        end,
        title
    order by
        case
            when price is null then ‘unpriced‘
            when price < 10 then ‘bargain‘
            when price between 10 and 20 then ‘average‘
            else ‘gift to impress relatives‘
        end,
        title

  


#2015-06-29
    

 //更改数据库编码
    alter database `newbwifi` default character set utf8 collate utf8_bin;
    //查看数据库编码
    show variables like ‘character%‘;

    //
    SET character_set_database = utf8

  


#2015-05-18

NOW() 2015-05-18 15:41:12
    CURDATE() 2015-05-18
    CURTIME() 15:41:12

    create table shop (
    id int not null,
    name varchar(50) not null,
    addDate datetime not null default CURDATE(),
    primary key (id)
    )

    //DATE_ADD()函数向日期添加指定的时间间隔
    DATE_ADD(date,INTERVAL     expr type)
    //date 是合法日期表达式,expr 是添加的时间间隔
    //type MICROSECOND,SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,YEAR

    select id, DATE_ADD(addDate,INTERVAL 2 DAY) as showDate from shop

    CONCATE(str1,str2,……)
    //返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null

  


#2015-05-14

##导出sql  

     mysqldump -u root -p > route_online.sql; 

DATE_ADD()函数向日期添加指定的时间间隔    

    DATE_ADD();
    DARE_ADD(date,INTERVAL expr type);
#2015-05-13
清空表 

    truncate table tablename;
    source dir/weixin.sql;

# 2015-04-27
去重  

    select distinct pid from wifi_shop ORDER BY pid

  

# 2015-04-03

##mysql-导出文件
    select * from routemap where (last_heartbeat_time is NULL) into OUTFILE ‘c:/test.xls‘ CHARACTER SET gbk 

    insert into a(pic) select ad_thumb from wifi_ad

     ---

  


# 2015-03-08

## 触发器
mysql触发器(trigger),监视某种情况,并触发某种操作
1. 监视地点(table)
2. 监视事件(insert/update/delete)
3. 触发时间(after/before)
4. 触发事件(insert/update/delete)

语法

    #商品表
    create table g
    ( id int primary key auto_increment,
       name varchar(20),
      num int)
    #订单表
    create table o
    ( oid int primary key auto_increment,
       gid int,
       much int);
    insert into g(name,num) values(‘商品1‘,10),(‘商品2‘,10),(‘商品3‘,10);

    delimiter $ #先执行此句,告诉mysql语句的结尾换成$
    create trigger triggerName
    after/before insert/update/delete on 表名
    for each row # 这句话是mysql中固定的
    begin
    update g set num=num-3 where id=1; # sql语句;
    end $
    insert into o(gid,much) values(1,3)$

---

  

## 表存储引擎

InnoDB与MyIsam的区别
- InnoDB存储为一个文件
- MyISAM在磁盘上存储成三个文件,.frm文件存储表定义,数据:.MYD,索引文件:.MYI
- MyISAM类型的表强调的是性能,执行速度比InnoDB快,但是不提供外键和事物
- 执行select,MyISAM更快
- MyISAM是表锁,InnoDB是行锁

  


## 事务处理

1. 关闭自动提交模式,自动提交模式被关闭的同时,通过PDO对象实例对数据库做出的更改直到调用PDO::commit()结束事物才被提交。若失败了,则调用PDO::rollBack()将回滚对数据库做出的更改并将数据库连接返回到自动提交模式。
2. 返回值 Boolean

        <?php
        $dbh -> beginTransaction ();/*开始一个事务,关闭自动提交*/
        /*更改数据库架构及数据*/
        $sth = $dbh -> exec ("DROP TABLE fruit");
        $sth = $dbh -> exec ("UPDATE admin set name = ‘yang‘");
        /*识别出错误并回滚更改*/
        $dbh -> rollBack();
        /*数据库连接现在返回到自动提交模式*/
        ?>

---

## 备份恢复
- mysql/bin/mysqldump.exe
- 执行脚本,备份数据库  

        mysqldump.exe -uroot -proot test >a.sql

---

## 缓存
    redis  memcache apc
---

## 静态化
当Browser请求Server时,进行数据交互,S解析到缓冲池上,将数据静态化存入文件,将文件返回给B

    <?php
    ob_start();//打开缓冲区,当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而
    是保存在内部缓冲区,为了输出缓冲区的内容,可以使用flush()或flush()输出缓冲区内容。

    echo "this is yangling";
    //将str存入缓冲区,不会直接输出到浏览器,直到使用flush或者ob_end_flush()才会输出到浏览器

    header("location:index.php");//输出不放入缓冲去

    ob_end_flush();

    flush();//刷新缓冲区的内容,使用频率高

    ob_get_contents();//返回内部缓冲区的内容,如果输出缓冲区没有激活,则返回false

    ob_get_length();//返回内部缓冲区的长度

    ob_end_flush();//发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区

    ob_end_clean();//删除内部缓冲区的内容,并且关闭内部缓冲区

    ob_implicit_flush();//打开或关闭绝对刷新

    ob_get_clean(); //得到当前缓冲区的内容并删除当前输出缓冲区

---

## mysql

- mysql服务开启了查询缓存,可以提高性能

        [mysqld]
        port=3306
        basedir="D:/phpStudy/MySQL/"
        datadir="D:/phpStudy/MySQL/data/"
        character-set-server=utf8
        default-storage-engine=MyISAM
        #innodb
        sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
        max_connections=512

        #SQL慢查询
        log-slow-queries = D:\logs\mysqlslowquery.log
        long_query_time = 2
        #(其他参数如上)

        #查询缓存大小
        query_cache_size=0
        table_cache=256
        tmp_table_size=18M

- **慢查询**,配置已开启

        #navicat->工具->命令界面
        show variables like ‘slow%‘ #环境变量
        show variables like ‘char%‘
        select sleep(3);

- 索引的分类 主键索引(不为空),普通索引,唯一索引(可以为空),(全文索引,)
- 索引不一定是主键或者唯一字段,但是在常用的字段上要加索引;
- 索引的两种算法(betree & hash)
- 检测有没有索引语句

        show create table test \G;
        show create database test \G;
- 索引的增删改查

        alter table test add index index_name (column_list);
        #table_name = test
        alter table test add unique (colunm_list);
        alter table test add primary key(column_list);

        create index index_name on test (column_list);
        create unique index index_name on test(column_list);

        drop index index_name on test;
        alter table test drop index index_name;
        alter table test drop primary key;

        show index from test;
        show key from test;

- 查看表结构

        explain select * from test \G;
- 不使用 `order by rand()`;
- 字段使用 `not null`;
- 使用`char` 不使用`varchar`;
- 垂直分割(将数据建立外键,分出表),水平分割(如qq表);
- 不要用不是索引的字段来排序;
- `like`不要使用`‘%中%‘`,使用`‘中%‘`;
- 不要使用`not in` 或者`<>`
- `order by `

        #如只需分组,不需排序时,需之名order by null
        explain select title from test group by id \G;
        #extra : using filesort;
        explain select title from test group by id order by null \G;
        #extra : ;

  

 

时间: 2024-08-04 20:36:47

mysql的学习总结的相关文章

mysql触发器学习

创建一个触发器 语法: create trigger 触发器名字 create trigger xiaoshou_update_trigger  after update on xiaoshou  for each row  begin  update jiangjin  set xiaoshouer=( select sum(taoshu*danjia)from xiaoshou  where userid=new.userid  and month=new.month) , jiangjin

MySQl Study学习之--MySQl二进制日志管理

MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log):   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库(DML)的语句的执行时间信息    不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能    主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新    用于在主复制服务器上记录所有将发送

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea

MySQL基础学习之数据查询

一般查询 SELECT * FROM 表名 SELECT 属性名  FROM  表名 条件查询 SELECT 属性名 FROM 表名  WHERE 条件表达式 查询数据值1,数据值2的表单 SELECT *  FROM  表名  WHERE  属性名 [NOT] IN(数据值1,数据值2....) 查询数值1,数据2的表单 SELECT *  FROM  表名  WHERE  属性=值  AND 属性1=值1 查询数值1到数值2之间的表单 SELECT *  FROM  表名  WHERE  属

【转】MYSQL入门学习之三:全文本搜索

转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索 www.2cto.com 1.MyISAM支持全文本搜索,而InnoDB不支持. 2.在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词.MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行.这样MySQL可以快速有效地决定哪些词匹配,哪些词不匹配,它们匹配的频率,等等. 二.使用全文本搜索 1.为了进行全文本搜索,必须索引被搜索的列,

Mysql Cookbook学习笔记第二章

1,使用python链接mysql + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # -*- coding: utf-8 -*- # connect.py --连接到MySQL服务器 import sys import MySQLdb try:     conn = MySQLdb.connect(db = "cookbook",                            host = "localhost"

JDBC+MYSQL初始学习

JDBC+MYSQL初始学习 一.学习准备 Eclipse 开发工具  + mysql数据库+navicat 数据库连接工具 Mysql的数据库连接驱动jar包  + testing测试集成+maven工具集成 Jar的获取方法: 1.直接下载需要的jar,导入项目中使用. 2.在maven工程中加入依赖:本文使用的maven依赖: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connect

MYSQL 存储过程学习

MYSQL 存储过程学习笔记 MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性. 存储过程的优点: ①重复使用.存储过程可以重复使用,从而可以减少数据库开发人员的工作量. ②提高性能.存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译.一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率. ③减少网络流量.存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量.

MySQL基础学习之函数

数学函数 绝对值      abs() 圆周率      PI() 平方根 sqrt() 模除取余   mod(被除数,除数) 随机数      rand() 四舍五入    round(数字) 次方         pow(5,2) e为底的指数函数  exp(数字) 字符串函数 字符长度       length(字符) 字符连接       concat(字符1,字符2) 带符号的字符连接    concat_ws('-','su','zhou') 字符插入      insert('su

MySQL基础学习之数据表

查看数据表 SHOW TABLE; 查看数据表详细结构 SHOW CREATE TABLE 表名\G; 创建数据表 CREATE TABLE 表名(数据名 类型,数据名1  类型2); CREATE TABLE department ( d_id INT(10) , d_name VARCHAR(20) , function VARCHAR(20) , address VARCHAR(30) ); 删除数据表 DROP TABLE 表名; 修改数据表 修改数据表名        ALTER TA