摘要: mysql被oracle收购后,从mysql-5.5开始,将InnoDB作为默认存储引擎,是一次比较重大的突破。InnoDB作为支持事务的存储引擎,拥有相关的RDBMS特性:包括ACID事务支持,数据完整性(外健),灾难恢复能力等特性。 使用mysql做为数据库的话,将来程序员肯定要写很多,存储过程,function等。在写些东东的时候,游标肯定是少不了的。下面简单简介一下。 一,什么是游标(... 阅读全文
posted @ 2017-07-31 17:09 左闯 阅读(3128) 评论(0) 推荐(0) 编辑
摘要: 存储过程 什么是存储过程?? 简单来说,存储过程就是为了以后使用而保存的一条或多条SQL语句的集合 . 和我们编程语言中的函数这个概念比较像。 在编程语言中,我们经常要完成某个功能,我们都会将它写成一个函数,然后在需要这个函数的时候调用它就好了。 同样的道理,存储过程也是这样,我们首先先声明这个存储 阅读全文
posted @ 2017-07-31 17:00 左闯 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 一、使用视图的理由是什么?1.安全性。一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到了一个特性:grant语句可以针对视图进行授予权限。2.查询性能提高。3.有灵活性的功能需求后,需要改动表的结构而导致工作量比较大。那么可以使用虚拟表的形式达到少 阅读全文
posted @ 2017-07-31 16:34 左闯 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 我们先做个测试: 接上篇日志建的商品表g和订单表o和触发器 假设:假设商品表有商品1,数量是10; 我们往订单表插入一条记录: insert into o(gid,much) values(1,20); 会发现商品1的数量变为-10了。这就是问题的所在,因为我们之前创建的触发器是after,也就是说触发的语句是在插入订单记录之后才执行的,这样我们就无法判断新插入订单的购买数量。 ... 阅读全文
posted @ 2017-07-31 16:29 左闯 阅读(2857) 评论(0) 推荐(0) 编辑
摘要: 触发器(trigger):监视某种情况,并触发某种操作。 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 语法: create trigger triggerName after/before insert/update/dele... 阅读全文
posted @ 2017-07-31 16:28 左闯 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 一,什么触发器 1,个人理解触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了。你放炮仗,点燃了,一会就炸了。2,官方定义触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一 阅读全文
posted @ 2017-07-31 16:27 左闯 阅读(931) 评论(0) 推荐(0) 编辑
摘要: 由于数据库查询的及插入的操作 耗费的实际时间要耗费比redis 要多, 导致 多人查询时库存有,但是实际插入数据库时却超卖 redis 会有效的减少相关的延时,对于并发量相对较少的 可以一用 阅读全文
posted @ 2017-07-31 11:53 左闯 阅读(1052) 评论(0) 推荐(0) 编辑
摘要: 抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。 重点在于第二个问题 常规写法: 查询出对应商品的库存,看是否 阅读全文
posted @ 2017-07-31 11:46 左闯 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制。 方案一:使用文件锁排它锁 flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞,要么获 阅读全文
posted @ 2017-07-31 11:30 左闯 阅读(2025) 评论(0) 推荐(0) 编辑