Mysql Notes
来源:互联网 发布:snh48 team sii知乎 编辑:程序博客网 时间:2024/06/05 19:08
- mysql int tinyint(1)
- truncate table 和delete * from的区别
区别主要两个.- Truncate 是整体删除, delete是逐条删除
- truncate不写服务器log,delete写服务器log,这就是为什么truncate要快过delete 所以,影响有:
- truncate 快
- truncate不激活 trigger
- truncate 重置 Identity
- sql where 1=1和 0=1 的作用
where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句。 mysql为字段值添加或者去除前缀、后缀
- 添加前缀
update ecs_goods set goods_name=concat('新中式',goods_name) where cat_id =4;
- 添加后缀
update ecs_goods set goods_name=concat(goods_name,'新中式') where cat_id =4;
- 删除
update ecs_goods set goods_name=right(goods_name,length(goods_name)-1) where cat_id =4;
其中ecs_goods为表名,cat_id为分类字段名,goods_name为产品字段名
(1)加前缀
--专题
updatet_mobile_special
set image=concat(‘update/zhuanti/show/exclusive/’,image) where type <> 3 and LENGTH(image)>0;
updatet_mobile_special
set index_image=concat(‘update/zhuanti/show/exclusive/’,image) where type <> 3 and LENGTH
(index_image)>0;
updatet_mobile_special
set logo=concat(‘update/zhuanti/show/exclusive/’,logo) where type <> 3 and LENGTH(logo)>0;
updatet_mobile_special
set mobile_image_one=concat(‘update/zhuanti/show/exclusive/’,mobile_image_one) where type <> 3 and
LENGTH(mobile_image_one)>0;
updatet_mobile_special
set mobile_image_two=concat(‘update/zhuanti/show/exclusive/’,mobile_image_two) where type <> 3 and
LENGTH(mobile_image_two)>0;
(2)替换
–水印
update t_brand_period_banner set url = replace(url,’app.appvipshop.com’,’b.appsimg.com’);
update t_brand_period_banner set url = replace(url,’app.vipshop.com’,’b.appsimg.com’);
–2.0档期
update t_brand_period_sort set banner_image_url = replace(banner_image_url,’app.appvipshop.com’,’b.appsimg.com’) where LENGTH
(banner_image_url)>0;
update t_brand_period_sort set banner_image_url = replace(banner_image_url,’app.vipshop.com’,’b.appsimg.com’) where LENGTH
(banner_image_url)>0;
–3.0档期
update t_brand_mobile_info set banner_image_url = replace(banner_image_url,’app.appvipshop.com’,’b.appsimg.com’) where LENGTH
(banner_image_url)>0;
update t_brand_mobile_info set banner_image_url = replace(banner_image_url,’app.vipshop.com’,’b.appsimg.com’) where LENGTH
(banner_image_url)>0
(3)去前缀
updatet_mobile_special
set image=right(image,length(image)-30) where type <> 3 and LENGTH(image)>0;
updatet_mobile_special
set index_image=right(index_image,length(index_image)-30) where type <> 3 and LENGTH(index_image)>0;
updatet_mobile_special
set logo=right(logo,length(logo)-30) where type <> 3 and LENGTH(logo)>0;
- 添加前缀
MySql之on duplicate key update
现在有表test,test表中有字段a,在a上有主键或者唯一索引,并且表中只有一条a=1, b=1的数据,现在执行如下的sql:insert into test (a,b) values (1,2) on duplicate key update b = b + 1;
因为a=1的记录已存在了,所以不会执行insert,而会在该条记录上执行update语言b=b+1
,记录会变成a=1,b=2insert into test (a,b) values (2,2) on duplicate key update b = b + 1;
a=2的记录不存在,所以执行insert
来源: http://zifeiwu.com/2013/10/13/mysql-on-duplicate-key-update.html
MyBatis:<insert id="insertForSyn" parameterType="com.vip.mlisting.brand.entity.AppsBrandMobileInfo"> insert into t_apps_brand_mobile_info (brand_id, sale_platform, brand_type, warehouse, create_time) values (#{brandId,jdbcType=INTEGER}, #{salePlatform,jdbcType=VARCHAR}, #{brandType,jdbcType=TINYINT}, #{warehouse,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}) ON DUPLICATE KEY UPDATE brand_id =#{brandId}</insert>
- mysql的最大连接数
首先,我们来查看mysql的最大连接数:mysql> show variables like'%max_connections%';
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 151 |
+—————–+——-+
1 row inset(0.00 sec)
其次,查看服务器响应的最大连接数:mysql> show globalstatuslike'Max_used_connections';
+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| Max_used_connections | 2 |
+———————-+——-+
可以看到服务器响应的最大连接数为2,远远低于mysql服务器允许的最大连接数值。
对于mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。Max_used_connections / max_connections * 100% = 2/151 *100% ≈ 1%
如何设置这个最大连接数值。
方法1:mysql>setGLOBALmax_connections=256;
Query OK, 0 rowsaffected (0.00 sec)
mysql> show variables like’%max_connections%’;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 256 |
+—————–+——-+
1 row inset(0.00 sec)
方法2:
修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
max_connections=128
重启mysql服务即可。mysql> show processlist;
可以显示前100条连接信息 show full processlist; 可以显示全部。随便说下,如果用普通账号登录,就只显示这用户的。注意命令后有分号。 - What’s the difference between utf8_general_ci and utf8_unicode_ci:http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci#
mysql utf8mb4与emoji表情:http://my.oschina.net/wingyiu/blog/153357?fromerr=nW9DdJtO
函数
- mysql TO_DAYS(date) 函数
TO_DAYS(date)
给定一个日期date, 返回一个天数 (从年份0开始的天数 )。
mysql> SELECT TO_DAYS(950501);
-> 728779
mysql> SELECT TO_DAYS(‘1997-10-07′);
-> 729669
TO_DAYS() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。
请记住, MySQL“日期和时间类型”中的规则将日期中的二位数年份值转化为四位。例如, ‘1997-10-07′和 ‘97-10-07′ 被视为同样的日期:
mysql> SELECT TO_DAYS(‘1997-10-07′), TO_DAYS(‘97-10-07′);
-> 729669, 729669
对于1582 年之前的日期(或许在其它地区为下一年 ), 该函数的结果实不可靠的。 - MySql中GROUP_CONCAT()函数
http://www.111cn.net/database/mysql/50837.htm
索引
涉及频繁硬删除的表尽量不加索引,且索引字段取值范围少!
查询
mysql查看数据库和表的占用空间大小
http://xiaosu.blog.51cto.com/2914416/687835
MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:
TABLE_SCHEMA : 数据库名
TABLE_NAME:表名
ENGINE:所使用的存储引擎
TABLES_ROWS:记录数
DATA_LENGTH:数据大小
INDEX_LENGTH:索引大小
- 看数据库的大小
use 数据库名SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH)
FROM information_schema.TABLES where TABLE_SCHEMA='数据库名';
得到的结果是以字节为单位,除1024为K,除1048576为M。 - 看表的大小
SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM TABLES WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名'
查看表结构
desc tablename
show create table tablename
不用join,对于1对多或者多对多情况,需要循环查询,或者表需要冗余很多字段,而冗余字段一致性的维护和更新,会有大量的批操作,这样会不会有性能问题
1对多,分两次查询。多对多,分页,IN,如果实在搞不定,只能一页for 多次查询(例如20次),至少这个CPU是耗在服务层,可以随时加机器扩展。
日志
mysql有4种不同的日志,分别是二进制日志,查询日志,慢查询日志和错误日志
http://www.blogjava.net/dongbule/archive/2010/09/04/331050.html
数据类型
- int(2)和int(11)不是长度和范围的区别,只是前面会补0
表设计
- MYSQL字符型数据初始值,default 为 null 好还是空串好?
NULL 类型比较特殊,SQL 难优化。虽然 MySQL NULL类型和 Oracle 的NULL 有差异,会进入索引中,但如果是一个组合索引,那么这个NULL 类型的字段会极大影响整个索引的效率。此外,NULL 在索引中的处理也是特殊的,也会占用额外的存放空间。 很多人觉得 NULL 会节省一些空间,所以尽量让NULL来达到节省IO的目的,但是大部分时候这会适得其反,虽然空间上可能确实有一定节省,倒是带来了很多其他的优化问题,不但没有将IO量省下来,反而加大了SQL的IO量。所以尽量确保 DEFAULT 值不是 NULL,也是一个很好的表结构设计优化习惯。 - utf8建议用utf8mb4(四个字节,支持emoji表情字符)
数据结构
- int、bigint、smallint 和 tinyint范围
使用整数数据的精确数字数据类型。- bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 - int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 - smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。 - tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。
注释
在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。
在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。
只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。
reference :http://www.cnblogs.com/hsapphire/archive/2009/08/21/1551304.html
- bigint
主从复制
- 复制如何工作
从高层来看,复制分成三步:- master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
- slave将master的binary log events拷贝到它的中继日志(relay log);
- slave重做中继日志中的事件,将改变反映它自己的数据。
- MySQL主从复制与读写分离:http://www.cnblogs.com/luckcs/articles/2543607.html
Innodb共享表空间VS独立表空间
:http://wubx.net/innodb共享表空间vs独立表空间/mysql 的 utf8 编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。
- mysql notes
- MySQL Notes
- MySQL Notes
- MySQL Notes
- Mysql Notes
- Mysql Notes
- MySql study notes [1]
- Mysql learning notes!
- [DB] Mysql learning notes!
- MySQL Syntax Notes
- Mysql 优化 Notes
- Mysql book notes
- JBDC+mysql Notes
- Notes—MySQL(cmd)
- Notes
- notes
- Notes
- notes
- 欧几里德算法(最大公约数算法)
- C#找梅森素数
- 2015总结
- 四舍五入到特定的小数位置
- java 自定义序列化
- Mysql Notes
- GeekBand c++学习笔记——防卫式声明的背后
- 数据结构学习笔记1-概述
- Xcode下使用github进行版本控制
- 排序算法之直接插入排序
- Python自动化面试必备 之 你真明白装饰器么?
- 【Java】(二)运算符小结(赋值运算符)
- 可重入函数与不可重入函数
- BZOJ_P2563 阿狸和桃子的游戏(贪心)