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
繼承
繼承是實現代碼複用性的基礎特性。
繼承關係實際上是一種鏈式關係,使得咱們能夠在現有的服務的基礎上增長新的功能,而不用修改原有的服務。這其實也是符合了開閉原則:
開閉原則是java世界裏最基礎的設計原則,它指導咱們如何創建一個穩定,靈活的系統。開閉原則定義以下:
Software entities like classes,modules and functions should be open for extension but closed for modifications.
一個軟件實體如類,模塊和函數應該對擴展開放,對修改關閉。
詳細的信息請參考博文:
六大設計原則之開閉原則
多態
多態這個特性其實能夠用盲人摸象這個寓言故事來形象地描述:
從前,有五個盲人,歷來沒有見過大象,不知道大象長的什麼樣,他們就決定去摸摸大象。第一我的摸到了鼻子,他說:「大象像一條彎彎的管子。」第二我的摸到了尾巴,他說:「大象像個細細的棍子。」第三我的摸到了身體,他說:「大象像一堵牆。」第四我的摸到了腿,他說:「大象像一根粗粗的柱子。」
首先大象都是同一個大象,沒有任何變化,可是五我的理解的大象都是不同的,有的人認爲它是管子,有的人認爲是棍子。能夠說,同一個大象在不一樣的人眼中表現出了不一樣的狀態。
在面向對象的世界中是怎麼體現的呢?同一個對象,咱們用不一樣的引用去指向它,這個對象表現出的狀態就是這個引用所描述的狀態。咱們其實並不知道對象的真實的狀態,咱們知道的只是對象經過這個引用訪問到的狀態。能夠說,多態是面向對象封裝特性的運行時(Runtime)體現。
總結
面向對象這種設計思想實際上是一種工程化的程序設計思想,它的思想的核心是對外暴露方法,而不是對外暴露數據,對這個數據的修改的操做都會放到特定的方法中。這樣,咱們調用方法就至關於向對象發送命令,就像現實生活中我讓某人幹某件事同樣,能夠說是一種命令(Command)式的編程風格。
可是,這在併發模式下會有一個問題,就是併發的修改數據會形成數據的混亂。由於我(當前線程)不知道數據是由我本身修改的,仍是由別人修改的。若是一個線程拿到數據之後,別的線程也拿到了這個數據,這樣兩個線程對數據的修改就會不一致,形成邏輯混亂。sql
怎麼解決這個問題呢?很簡單,只須要在一個線程拿到數據之後,別的線程不能再拿到這個數據,等拿到數據的線程把數據放回去,別的線程才能再拿到這個數據,這樣就不會形成併發讀寫數據的問題了。安檢門http://www.weiheshidai.com/可是這樣作會把併發問題轉換爲串行來解決,喪失了併發處理的高效性。
咱們能夠把數據訪問的過程再細分一下,分兩種狀況:1. 線程須要對拿到的數據作修改 2. 線程只須要取數據,不須要對數據進行更改。咱們把只容許一個線程訪問數據的狀況稱爲對數據的鎖定,簡稱鎖。咱們能夠看到,只有當一個線程須要對數據進行修改的狀況下,纔會對數據進行鎖定,防止別的線程修改或讀取到髒數據(修改以前的數據)。這樣,咱們把鎖細分爲:讀鎖和寫鎖。若是數據沒有鎖或只有讀鎖,那麼能夠再給數據加讀鎖,不能加寫鎖。若是想加寫鎖,必須等待數據上面的全部鎖都釋放掉才能夠加,並且加上寫鎖之後,必須等寫鎖釋放掉才能加其它類型的鎖,這就是寫鎖的排他性。
咱們能夠看到併發數據訪問的問題是因爲數據是可修改的這種狀況致使的。若是數據不能夠改變,每一個線程都在這一份原始數據上進行數據變換,那就不會有併發數據訪問的問題了,這個思路其實就是函數式編程的思想。
函數式編程的特色:無狀態、無反作用、無關時序、冪等
什麼是冪等性:在編程中一個冪等操做的特色是其任意屢次執行所產生的影響均與一次執行的影響相同。數據庫