一、变量的定义
第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量 第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where …… 如: 1)set @t_error=0; select @t_error ; 2)select @num:=`name` from sys_area where id=2 ; select @num;
二、启动事务和提交事务,回滚事务,如果打算启动事务则,设置自动提交为0,start transaction ; commit;
# 数值1自动提交 0手动提交 select @@autocommit; #设置手动提交 set @@autocommit=0; start transaction ; insert into dic(name ) values('1'); insert into dic(name ) values('2'); ROLLBACK; commit;
三、数据库的三大特性:原子性,一致性,隔离性,持久性
其中隔离性是不同事物之间的隔离原则,需要设置事务隔离级别来处理
四、事务的隔离级别(针对有事务的业务的数据才会使用):
Read Uncommitted(读取未提交内容),Read Committed(读取提交内容),Repeatable Read(可重读),Serializable(可串行化) 1)查看当前会话隔离级别 select @@tx_isolation; 2)查看系统当前隔离级别 select @@global.tx_isolation; 3)设置当前会话隔离级别 set session transaction isolatin level repeatable read; 4)设置系统当前隔离级别 set global transaction isolation level repeatable read;
五、数据库的共享锁和排它锁
查询当前有多少事务,多少锁 SELECT * FROM information_schema.INNODB_TRX ; SELECT * FROM information_schema.INNODB_LOCKS; 两者不同点在于是否允许另一个事务读取被锁住的数据 共享锁锁住了一条id=1的数据,则其他的事务是可以读取,但不能更改 排它锁锁住了一条id=1的数据,其他的事务不可以读取,也不能更改,直到这个事务完成 如果另一个查询没有显示添加锁,则他是可以读取数据,不受上面锁影响 例子: select @@autocommit; #设置手动提交 set @@autocommit=0; set @t_error=0; select @t_error ; start transaction ; select * from dic for update ; insert into dic(name ) values('1'); insert into dic(name ) values('2'); ROLLBACK; commit;
六、外键不能删除,必须先删除外键在删除相应的索引
#查看表的外键以及外键名称 show create table 表名 #删除外键 alter table 表名 drop FOREIGN KEY 外键名称 ; #显示所有的索引,并且删除需要删除的索引 show index from 表名称 ; alter table 表名称 drop index FK_cv98jak92idoqj8rrlyhkghv0 ;
七、字段的添加与删除
alter table 表名 drop column cluster_num alter table 表名 add cluster_num int comment '数量';
八、NULL问题
SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
九、show full processlist (状态字段的意思)
或者(select * from information_schema.processlist where host like '%11.168.2.65%')
1)Sleep 通常代表资源未释放,如果是通过连接池,sleep状态应该恒定在一定数量范围内 (一般连接池会有一个参数initialSize,如果initialSize=10则初始化的时候会有10个状态为sleep连接被建立,并且一直存在), 例如: 数据查询时间为0.1秒,而网络输出需要1秒左右,原本数据连接在0.1秒即可释放,但是因为前端程序未执行close操作, 直接输出结果,那么在结果未展现在用户桌面前,该数据库连接一直维持在sleep状态 2)Locked 操作被锁定,通常使用innodb可以很好的减少locked状态的产生 3)Copy to tmp table 索引及现有结构无法涵盖查询条件时,会建立一个临时表来满足查询要求,产生巨大的i/o压力Copy to tmp table通常与连表查询有关, 建议减少关联查询或者深入优化查询语句,如果出现此状态的语句执行时间过长,会严重影响其他操作,此时可以kill掉该操作 4)Sending data Sending data并不是发送数据,是从物理磁盘获取数据的进程,如果你的影响结果集较多,那么就需要从不同的磁盘碎片去抽取数据, 如果sending data连接过多,通常是某查询的影响结果集过大,也就是查询的索引项不够优化 5)Storing result to query cache 如果频繁出现此状态,使用set profiling分析,如果存在资源开销在SQL整体开销的比例过大(即便是非常小的开销,看比例), 则说明query cache碎片较多,使用flush query cache可即时清理,Query cache参数可适当酌情设置
十、mysql日期时间函数的处理
date_format(date, format) 函数,MySQL日期格式化函数date_format() unix_timestamp( 时间日期) 函数 ,Mysql日期转换为unix时间戳 str_to_date(str, format) 函数 ,字符串转化日期 from_unixtime(unix_timestamp, format) 函数,MySQL时间戳格式化函数from_unixtime 实例 select DATE_FORMAT(now(),'%Y-%m-%d' ) select str_to_date('2017-12-08 00:00:00', '%Y-%m-%d %H:%i:%s' ) select unix_timestamp( DATE_FORMAT(now(),'%Y-%m-%d' ) )*1000 ; select unix_timestamp( str_to_date('2017-12-08 00:00:00', '%Y-%m-%d %H:%i:%s' ) )*1000 ; select from_unixtime( unix_timestamp( DATE_FORMAT(now(),'%Y-%m-%d' ) ),'%Y-%m-%d %H:%i:%s' ) ;
十一、多表关联更新与删除
#关联更新一个表的数据 update user a join user_ext b on a.uid=b.id set b.name=a.name, b.age=a.age where ifNULL(a.business_ip,'')<>ifNULL(b.new_business_ip,'') #关联删除h表的数据 delete h.* from user g join user_ext h on g.id=h.userId where g.id=1 in和exist的区别: http://www.manongjc.com/article/981.html
相关推荐
自己整理的mysql性能测试脚本,需要的同学,可以下载使用
Mysql 性能测试脚本
Postgresql MySQL 性能测试TPCH-环境部署,非常不错的文档,部署生产环境肯定需要全面测试了
MySQL性能测试工具,MySQL的性能测试,测试增、删、改、查,看时间和记录数。
mysql性能测试报告,查询时间等测试性能问题,sql优化建议.
mysql 性能测试工具sysbench 0.4.12.10版本
对mysql进行性能测试 写10万条记录: start time: Sun Jul 14 19:09:31 CST 2013 end time: Sun Jul 14 19:26:49 CST 2013 实际用时:15分18秒
MySQL 性能测试工具sysbench安装使用
MySQL自带的性能压力测试工具mysqlslap详解
此代码为Loadrunner 8 通过C API类型的Vuser 测试MySQL性能,或者测试sql语句性能的脚本。 这东西很少有人用,网上资料很少,一般测试B/S的很多。
千万级Mysql-MongoDB性能对比报告
LoadRunner驱动MySQL性能测试(lib库实现) 前言 因为loadrunner原生未提供针对mysql测试的功能 国内网络上流传的都是ODBC连接mysql进行性能测试,过程较为繁琐 而LR本身推荐的是使用提供的dll库或者自行编写...
很不错的MySQL性能测试文档,值得观看
mysql三百万测试数据,可以用来做性能优化测试。
达梦数据库与mysql数据对比测试数据结果
关于Mysql性能测试的文章,详细列举了多种性能测试工具的功能及其用法
MySQL5.5在8核至64核机器上随用户数增加的性能状况 在8核至64核机器上随用户数增加的性能状况 CPU数量下MySQL5.5与MySQL5.6的性能对比 在8核至64核机器上随用户数增加的性能状况 在8核至64核机器...
旨在阐述近期Oracle 和 Intel 公司通过 MySQL 集群执行的基准测试。这些基准测试用于衡量在配 备最新Intel® Xeon® E5 系列处理器的一组普通服务器集群上扩展的数据库的读写操作性能。
mysql-test mysql性能测试代码-nodejs
MySQL常见性能问题原因分析及解决办法,MySQL性能测试方法等