Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187715
  • 博文数量: 174
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1800
  • 用 户 组: 普通用户
  • 注册时间: 2018-04-16 06:56
文章分类

全部博文(174)

文章存档

2020年(7)

2019年(29)

2018年(138)

我的朋友

分类: Mysql/postgreSQL

2018-10-15 18:07:32

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)
最近进行数据库操作,遇到一个问题,就是大量删除一个数据表中的数据后,由于设定了id是自增的,导致再插入时,默认生成的id会很大,这个时候想要再次插入新的数据,应该怎么办呢?
1.明确目前最后一个id的大小
select id from tags order by id DESC limit 0,1;
 假设返回的是9,则设置数据表从10开始自增
 2.修改这个数据表从10开始自增
alter table tags auto_increment=10;
3.尝试新插入一条数据
insert into tags(title) values ('testAutoIncre');
可以发现,此时,数据库中增加了一条新的记录,id为10
再谈面向对象中的封装、继承和多态
封装
封装说的是把数据封装起来,对外暴露一个可以访问的接口,不能让外界直接访问内部的数据。
从上面的描述可以抽取出两种类型:接口和类。
从现在比较火的微服务的观点上来看,一个类就是一个服务,一个对象就是一个服务的实例,通过这个服务暴露的接口来访问这个服务。从这个意义上来讲,面向对象其实就是一个工程化的架构设计。
继承
继承是实现代码复用性的基础特性。
继承关系其实是一种链式关系,使得我们可以在现有的服务的基础上增加新的功能,而不用修改原有的服务。这其实也是符合了开闭原则:
开闭原则是java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则定义如下:
Software entities like classes,modules and functions should be open for extension but closed for modifications.
一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
详细的信息请参考博文:
六大设计原则之开闭原则
多态
多态这个特性其实可以用盲人摸象这个寓言故事来形象地描述:
从前,有五个盲人,从来没有见过大象,不知道大象长的什么样,他们就决定去摸摸大象。第一个人摸到了鼻子,他说:“大象像一条弯弯的管子。”第二个人摸到了尾巴,他说:“大象像个细细的棍子。”第三个人摸到了身体,他说:“大象像一堵墙。”第四个人摸到了腿,他说:“大象像一根粗粗的柱子。”
首先大象都是同一个大象,没有任何变化,但是五个人理解的大象都是不一样的,有的人认为它是管子,有的人认为是棍子。可以说,同一个大象在不同的人眼中表现出了不同的状态。
在面向对象的世界中是怎么体现的呢?同一个对象,我们用不同的引用去指向它,这个对象表现出的状态就是这个引用所描述的状态。我们其实并不知道对象的真实的状态,我们知道的只是对象通过这个引用访问到的状态。可以说,多态是面向对象封装特性的运行时(Runtime)体现。
总结
面向对象这种设计思想其实是一种工程化的程序设计思想,它的思想的核心是对外暴露方法,而不是对外暴露数据,对这个数据的修改的操作都会放到特定的方法中。这样,我们调用方法就相当于向对象发送命令,就像现实生活中我让某人干某件事一样,可以说是一种命令(Command)式的编程风格。
但是,这在并发模式下会有一个问题,就是并发的修改数据会造成数据的混乱。因为我(当前线程)不知道数据是由我自己修改的,还是由别人修改的。如果一个线程拿到数据以后,别的线程也拿到了这个数据,这样两个线程对数据的修改就会不一致,造成逻辑混乱。怎么解决这个问题呢?很简单,只需要在一个线程拿到数据以后,别的线程不能再拿到这个数据,等拿到数据的线程把数据放回去,别的线程才能再拿到这个数据,这样就不会造成并发读写数据的问题了。但是这样做会把并发问题转换为串行来解决,丧失了并发处理的高效性。
我们可以把数据访问的过程再细分一下,分两种情况:1. 线程需要对拿到的数据做修改 2. 线程只需要取数据,不需要对数据进行更改。我们把只允许一个线程访问数据的情况称为对数据的锁定,简称锁。我们可以看到,只有当一个线程需要对数据进行修改的情况下,才会对数据进行锁定,防止别的线程修改或读取到脏数据(修改之前的数据)。这样,我们把锁细分为:读锁和写锁。如果数据没有锁或只有读锁,那么可以再给数据加读锁,不能加写锁。如果想加写锁,必须等待数据上面的所有锁都释放掉才可以加,而且加上写锁以后,必须等写锁释放掉才能加其它类型的锁,这就是写锁的排他性。
我们可以看到并发数据访问的问题是由于数据是可修改的这种情况导致的。如果数据不可以改变,每个线程都在这一份原始数据上进行数据变换,那就不会有并发数据访问的问题了,这个思路其实就是函数式编程的思想。
函数式编程的特点:无状态、无副作用、无关时序、幂等
什么是幂等性:在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
阅读(958) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~