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

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

原文地址:https://www.cnblogs.com/dushublog/p/9792513.html

时间: 2024-10-02 18:03:15

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

【代码学习】MYSQL数据库的常见操作

============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与关闭 -h:指定所连接的服务器位置 -u:数据库的用户名 -p:数据库的密码 1 mysql -u 用户名 -p //连接数据库 2 密码 3 exit //关闭数据库 1 mysql_connect($host,$user,$password); //连接数据库 2 mysql_close() //关闭数据库 二.创建数据

MYSQL数据库学习----MYSQL数据库、表操作和引擎区别

MYSQL数据库的操作 一:查看MYSQL中所有的数据库 SHOW DATABASES; 二:创建数据库 CRETAE DATABASE 数据库名称; 三:删除数据库 DROP DATABASE 数据库名称; 四:查看数据库支持的存储引擎 SHOW ENGINES; 四:连接MYSQL数据库 USE 数据库名称; MYSQL数据库中表的操作 一:查看数据库中的所有表格 SHOW TABLES: 二:查看表格的结构 DESC 表名称;(基本结构): 或 SHOW CREATE TABLE 表名称;

Java连接MySQL数据库及简单操作代码

1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘,然后将其目录下的MySQL-connector-java-5.0.5-bin.jar加到classpath里,具体如下: "我的电脑"-> "属性" -> "高级" -> "环境变量",在系统变量那里编辑clas

mysql数据库很简单操作

进入linux系统 root   >/usr/bin/mysql -u root mysql>show databases;                    #查看数据库 mysql>use  testtable;                        #testtable 为所要查看的库,应用数据库 mysql>show tables;                          #查看所有表 mysql>desc abc_table          

linux系统上Mysql数据库导入导出操作

需求:把MySQL数据库目录中的dz数据库备份到/home/dz_bak.sql ,然后再新建一个数据库dzbak,最后把/home/dz_bak.sql 导入到数据库dzbak中.操作如下:以下操作均在终端命令行下进行 1.mysqldump -u root -p dz > /home/dz_bak.sql        #导出数据库     123456     #输入数据库密码     扩展:     mysqldump -u root -p dz pre_portal_comment >

面向对象(一)—继承与多态

又一次深入的学习设计模式,发现了很多以前感觉不是问题的问题,这才发现原来自己不是真的理解了.通过这次的深入学习,才开始慢慢感受到OO的魅力所在. 从C#学习到设计模式,再到机房收费系统个人版和合作版,再到我们做的项目,我们真正的朝着面向对象编程了吗?我的项目中,先不说泛型.委托.集合的利用率,就是基本的继承.多态用的少之又少. 下面将为大家解说"OO引领编程"之--继承和多态 继承篇 一.简介 俗话说:龙生龙凤生凤,老鼠的儿子会打洞.可以理解为,继承就是小辈拥有父辈流传下来的东西. 在

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

Django中的app及mysql数据库篇(ORM操作)

Django常见命令 在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目.启动Django程序.创建新的APP.数据库迁移等. 创建Django项目 一把我们都新建一个文件夹来存放项目文件,切换到这个目录下,启动命令行工具.创建一个名为mysite的Django项目: django-admin startproject mysite 创建好项目之后,可以查看当前目录下多出一个名为mysite的文件夹,mysite的文件夹目录结构如下: mysite/ ma