mysql 函数笔记

1、coalesce  若为空,则取下一个值或字段

用法:select  coalesce(a,b,c)     a,b,c之间可多个

如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

mysql> select name from test1;
+--------+
| name   |
+--------+
| 小明   |
| 小王   |
| 小丽   |
| 小王   |
| 小明   |
| 小明   |
| NULL   |
+--------+
7 rows in set (0.00 sec)


mysql> select coalesce(name,'1') from test1;
+--------------------+
| coalesce(name,'1') |
+--------------------+
| 小明               |
| 小王               |
| 小丽               |
| 小王               |
| 小明               |
| 小明               |
| 1                  |
+--------------------+
7 rows in set (0.00 sec)


mysql> select coalesce(name,null,'11') from test1;
+--------------------------+
| coalesce(name,null,'11') |
+--------------------------+
| 小明                     |
| 小王                     |
| 小丽                     |
| 小王                     |
| 小明                     |
| 小明                     |
| 11                       |
+--------------------------+
7 rows in set (0.00 sec)

mysql> select coalesce(name,null,null,'111') from test1;
+--------------------------------+
| coalesce(name,null,null,'111') |
+--------------------------------+
| 小明                           |
| 小王                           |
| 小丽                           |
| 小王                           |
| 小明                           |
| 小明                           |
| 111                            |
+--------------------------------+
7 rows in set (0.00 sec)


2、with rollup 分组统计数据后再计算汇总

mysql> select name,sum(singin) from test1 group by name;
+--------+-------------+
| name   | sum(singin) |
+--------+-------------+
| 小丽   |           2 |
| 小明   |           7 |
| 小王   |           7 |
+--------+-------------+
3 rows in set (0.00 sec)


mysql> select coalesce(name,'总数'),sum(singin) from test1 group by name with rollup;
+-------------------------+-------------+
| coalesce(name,'总数')   | sum(singin) |
+-------------------------+-------------+
| 小丽                    |           2 |
| 小明                    |           7 |
| 小王                    |           7 |
| 总数                    |          16 |
+-------------------------+-------------+
4 rows in set (0.01 sec)


3、null的比较

当字段的值是null时,只能通过is null 或 is not null来查询,不能用=null 或!=null来查询。

若字段a的值是null,字段b的值是null,那么,a=b是会返回false的。可使用<=>运算符,那么,a<=>b会返回true。

mysql> select distinct a.name from test1 a,test1_copy b where a.name = b.name;
+--------+
| name   |
+--------+
| 小明   |
| 小王   |
+--------+
2 rows in set (0.00 sec)


mysql> select distinct a.name from test1 a,test1_copy b where a.name <=> b.name;
+--------+
| name   |
+--------+
| 小明   |
| 小王   |
| NULL   |
+--------+
3 rows in set (0.00 sec)

4.mysql截取函数

                  left('1234567890',4): 1234
                 right('1234567890',4): 7890
             substring('1234567890',4): 4567890
            substring('1234567890',-4): 7890
           substring('1234567890',4,2): 45
 substring_index('123.456.7890','.',1): 123
substring_index('123.456.7890','.',-1): 7890

5.前后去空格,ltrim去左边空格,rtriim去右边空格

select ltrim('  hello  '),rtrim('  hello  ');
+--------------------+--------------------+
| ltrim('  hello  ') | rtrim('  hello  ') |
+--------------------+--------------------+
| hello              |   hello            |
+--------------------+--------------------+




MySQL online ddl

来源于:http://www.cnblogs.com/cchust/p/4639397.html

在5.6 online ddl推出以前,执行ddl主要有两种方式:copy方式和inplace方式,inplace方式又称为fast index creation。

copy方式:拷贝格式,全程锁表(允许查询),较慢。

        创建索引步骤: 新增带索引的临时表--锁原表--拷贝数据到临时表--rename表,升级字典锁--完成

inplace方式:较快,因为不拷贝数据。但仅支持添加/删除索引两种方式,且需要全程锁表。(全量+增量的方式)

        创建索引步骤:新建索引的数据字典--锁表--读取聚集索引,构造新的索引项,排序并插入新索引--等待打开表的所有只读事务提交--结束

online ddl方式,包含3个阶段,prepare阶段、ddl执行阶段,commit阶段。

包含了copy和inplace方式。

1)不支持online的ddl操作使用copy方式(修改列、删除主键,修改字符集等),这些操作都会导致记录格式发生变化,无法通过简单的全量+增量的方式实现online。

2)对于inplace方式,mysql内部以“是否修改记录格式”为基准分为两类:

A.REBUILD方式:需要重建建表,如optimize table、添加索引、添加/删除列、修改列NULL/NOT NULL属性等;(比NO-REBULID方式多了一个ddl执行阶段)

B.NO-REBUILD方式:只需要修改表的元数据,如删除索引、修改列名、修改列默认值、修改列自增值等。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值