文档章节

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)

 原创小博客
发布于 10/15 18:12
字数 1731
阅读 9
收藏 2

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
再谈面向对象中的封装、继承和多态
封装
封装说的是把数据封装起来,对外暴露一个可以访问的接口,不能让外界直接访问内部的数据。
从上面的描述可以抽取出两种类型:接口和类。
从现在比较火的微服务的观点上来看,一个类就是一个服务,一个对象就是一个服务的实例,通过这个服务暴露的接口来访问这个服务。从这个意义上来讲,面向对象其实就是一个工程化的架构设计。

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)
继承
继承是实现代码复用性的基础特性。
继承关系其实是一种链式关系,使得我们可以在现有的服务的基础上增加新的功能,而不用修改原有的服务。这其实也是符合了开闭原则:
开闭原则是java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则定义如下:
Software entities like classes,modules and functions should be open for extension but closed for modifications.
一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
详细的信息请参考博文:
六大设计原则之开闭原则
多态
多态这个特性其实可以用盲人摸象这个寓言故事来形象地描述:
从前,有五个盲人,从来没有见过大象,不知道大象长的什么样,他们就决定去摸摸大象。第一个人摸到了鼻子,他说:“大象像一条弯弯的管子。”第二个人摸到了尾巴,他说:“大象像个细细的棍子。”第三个人摸到了身体,他说:“大象像一堵墙。”第四个人摸到了腿,他说:“大象像一根粗粗的柱子。”
首先大象都是同一个大象,没有任何变化,但是五个人理解的大象都是不一样的,有的人认为它是管子,有的人认为是棍子。可以说,同一个大象在不同的人眼中表现出了不同的状态。
在面向对象的世界中是怎么体现的呢?同一个对象,我们用不同的引用去指向它,这个对象表现出的状态就是这个引用所描述的状态。我们其实并不知道对象的真实的状态,我们知道的只是对象通过这个引用访问到的状态。可以说,多态是面向对象封装特性的运行时(Runtime)体现。
总结
面向对象这种设计思想其实是一种工程化的程序设计思想,它的思想的核心是对外暴露方法,而不是对外暴露数据,对这个数据的修改的操作都会放到特定的方法中。这样,我们调用方法就相当于向对象发送命令,就像现实生活中我让某人干某件事一样,可以说是一种命令(Command)式的编程风格。
但是,这在并发模式下会有一个问题,就是并发的修改数据会造成数据的混乱。因为我(当前线程)不知道数据是由我自己修改的,还是由别人修改的。如果一个线程拿到数据以后,别的线程也拿到了这个数据,这样两个线程对数据的修改就会不一致,造成逻辑混乱。

怎么解决这个问题呢?很简单,只需要在一个线程拿到数据以后,别的线程不能再拿到这个数据,等拿到数据的线程把数据放回去,别的线程才能再拿到这个数据,这样就不会造成并发读写数据的问题了。安检门http://www.weiheshidai.com/但是这样做会把并发问题转换为串行来解决,丧失了并发处理的高效性。

我们可以把数据访问的过程再细分一下,分两种情况:1. 线程需要对拿到的数据做修改 2. 线程只需要取数据,不需要对数据进行更改。我们把只允许一个线程访问数据的情况称为对数据的锁定,简称锁。我们可以看到,只有当一个线程需要对数据进行修改的情况下,才会对数据进行锁定,防止别的线程修改或读取到脏数据(修改之前的数据)。这样,我们把锁细分为:读锁和写锁。如果数据没有锁或只有读锁,那么可以再给数据加读锁,不能加写锁。如果想加写锁,必须等待数据上面的所有锁都释放掉才可以加,而且加上写锁以后,必须等写锁释放掉才能加其它类型的锁,这就是写锁的排他性。
我们可以看到并发数据访问的问题是由于数据是可修改的这种情况导致的。如果数据不可以改变,每个线程都在这一份原始数据上进行数据变换,那就不会有并发数据访问的问题了,这个思路其实就是函数式编程的思想。
函数式编程的特点:无状态、无副作用、无关时序、幂等
什么是幂等性:在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

© 著作权归作者所有

共有 人打赏支持
粉丝 5
博文 120
码字总数 144293
作品 0
宜昌
私信 提问
PHP 学习必备技能(基础略过)

1.面向对象编程 面向对象编程基本概念 类和对象的关系 如何定义类 成员属性(变量) 如何创建对象实例及如何访问对象属性 对象在内存中存在的形式 栈、堆、全局区、常量区和代码区的关系 成员方...

风雪中的舞者
2015/08/05
0
0
谈谈你对面向对象的理解

Question:请你谈一下面向对象? Answer: 面向对象是相对于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面向对象是一种基于结构分析的、以数据为中心...

DevShaw
2016/01/12
640
0
【原】PHP从入门到精通2小时【图文并茂】

原创内容,转载请注明。 主要内容: 搭建PHP开发环境 第一个helloworld程序 变量 全局变量 循环结构 函数 数组 面向对象编程 继承 接口 多态 日志 文件的读写 时间格式和时区 创建图形 从远程...

乌云上
09/16
0
0
Python-面向对象

(个人感觉真心不错 ,转过来一起学习一下 ) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分...

ala9981
2016/03/20
0
0
Python基础6-1 面向对象编程

概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过...

jinmy001
2017/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

揭秘 | 双11逆天记录背后的数据库技术革新

摘要: 第十个天猫“双11”狂欢节圆满落幕,如今双11已不仅仅是天猫的盛会,更是阿里技术人的新年 每一个数字背后 都需要强大的技术支撑 Higher, Faster, Smarter 是我们不变的追求 技术无边...

阿里云云栖社区
21分钟前
4
0
element ui中的input组件不能监听键盘事件解决

vue使用element-ui的el-input监听不了键盘事件,原因应该是element-ui自身封装了一层div在input标签外面,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-input v-model="search" p...

呵呵闯
24分钟前
3
0
Linux常用中间件启动命令

zookeeper redis lts

王桥修道院副院长
25分钟前
1
0
Kotlin极简教程中对? extends 和 ? super (out和int)的描述

PECS 现在问题来了:我们什么时候用extends什么时候用super呢?《Effective Java》给出了答案: PECS: producer-extends, consumer-super 比如,一个简单的Stack API: public class Stack<E...

SuShine
26分钟前
1
0
微信分享link问题

前提:公司业务,分享的页面需要自定义并且是一个固定页面 因此自定义分享link,这里存在一个问题,必须与安全域名一致,自不必说,而且这个link必须是当有协议的,也就是说不能写成locatio...

litCabbage
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部