元組是關係數據庫中的基本概念,關係是一張表, 表中的每行(即數據庫中的每條記錄)就是一個元組 ,每列就是一個屬性。 在二維表裏,元組也稱爲記錄。mysql
要刪除表A中數據,使用TRUNCATE TABLE A。運行結果是表A中的約束依然存在!sql
刪除表的語句爲:DROP TABLE table_name;數據庫
而DELETE和TRUNCATE TABLE都是刪除表中的數據的語句,它們的不一樣之處在於:併發
一、TRUNCATE TABLE比DELETE的速度快;ide
二、TRUNCATE TABLE 是刪除表的全部行,而DELETE是刪除表的一行或者多行(除非DELETE不帶WHERE語句);性能
三、在刪除時若是遇到任何一行違反約束(主要是外鍵約束),TRUNCATE TABLE仍然刪除,只是表的結構命令行
及其列、約束、索引等保持不變,但DELETE是直接返回錯誤;日誌
四、對於被外鍵約束的表,不能使用TRUNCATE TABLE,而應該使用不帶WHERE語句的DELETE語句。server
五、若是想保留標識計數值,要用DELETE,由於TRUNCATE TABLE會對新行標誌符列搜用的計數值重置爲該列的種子。對象
1. TRUNCATE TABLE 在功能上與不帶 Where 子句的 Delete 語句相同:兩者均刪除表中的所有行。
但 TRUNCATE TABLE 比 Delete 速度快,且使用的系統和事務日誌資源少。
2. Delete 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE 經過釋放
存儲表數據所用的數據頁來刪除數據,而且只在事務日誌中記錄頁的釋放。
3. TRUNCATE TABLE 刪除表中的全部行,但表結構及其列、約束、索引等保持不變。新行標識所用的
計數值重置爲該列的種子。若是想保留標識計數值,請改用 Delete。
4. 速度,通常來講: drop> truncate > delete
5. 想保留表而將全部數據刪除. 若是和事務無關,用truncate便可. 若是和事務有關,或者想觸發trigger,仍是用delete.
1NF:原子性 字段不可再分,不然就不是關係數據庫;
2NF:惟一性 一個表只說明一個事物;
3NF:每列都與主鍵有直接關係,不存在傳遞依賴;
1) 概念:
數據庫是一個多用戶使用的共享資源。當多個用戶併發地存取數據時,在數據庫中就會產生多個事務同時
存取同一數據的狀況。若對併發操做不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。
加鎖是實現數據庫併發控制的一個很是重要的技術。當事務在對某個數據對象進行操做前,先向系統發出請求,
對其加鎖。加鎖後事務就對該數據對象有了必定的控制,在該事務釋放鎖以前,其餘的事務不能對此數據對象進
行更新操做。
(2) 鎖的分類:
共享(S)鎖:多個事務可封鎖一個共享頁;任何事務都不能修改該頁; 一般是該頁被讀取完畢,S鎖當即被釋放。
排它(X)鎖:僅容許一個事務封鎖此頁;其餘任何事務必須等到X鎖被釋放才能對該頁進行訪問;X鎖一直到事務結束才能被釋放。
更新(U)鎖:更新鎖在修改操做的初始化階段用來鎖定可能要被修改的資源,這樣能夠避免使用共享鎖形成的死
鎖現象。由於使用共享鎖時,修改數據的操做分爲兩步,首先得到一個共享鎖,讀取數據,而後將共享鎖升級爲
排它鎖,而後再執行修改操做。這樣若是同時有兩個或多個事務同時對一個事務申請了共享鎖,在修改數據的
時候,這些事務都要將共享鎖升級爲排它鎖。這時,這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就
形成了死鎖。若是一個數據在修改前直接申請更新鎖,在數據修改的時候再升級爲排它鎖,就能夠避免死鎖。
(3) 鎖的粒度:
在sql server2000中鎖是具備粒度的,便可以對不一樣的資源加鎖。鎖定在較小的粒度的資源(例如行)上能夠
增長系統的併發量但須要較大的系統開銷,從而也會影響系統的性能,由於鎖定的粒度較小則操做可能產生的
鎖的數量會增長;鎖定在較大的粒度(例如表)就併發而言是至關昂貴的,由於鎖定整個表限制了其它事務
對錶中任意部分進行訪問,但要求的開銷較低,由於須要維護的鎖較少,因此在這裏是一種互相制約的關係。
Sql server2000中鎖定的粒度包括 行、頁、擴展盤區、表、庫等資源。
數據完整性能夠分爲四類。
一、實體完整性,實體完整性的目的是確保數據庫中全部實體的惟一性,也就是不該出現徹底相同的數據記錄。
二、區域完整性,匹配完整性要求數據表中的數據位於某一個特定的容許範圍內。
三、參考完整性,是用來維護相關數據表之間數據一致性的手段,經過實現參考完整性,能夠避免因一個數據
表的記錄改變而形成另外一個數據表內的數據變成無效值。
四、用戶自定義完整性,用戶自定義由用戶根據實際應用中的須要自行定義。
引用完整性經過主鍵和外鍵之間的引用關係實現 若是兩個表中存儲的信息相互關聯,那麼只要修改了一個表,
另一個表也要作出相應的修改,則稱該這兩個表中的數據具有完整性
BEGIN或START TRANSACTION;顯示地開啓一個事務;
COMMIT;也可使用COMMIT WORK,不過兩者是等價的。COMMIT會提交事務,並使已對數據庫進行的全部修改稱
爲永久性的;
ROLLBACK;有可使用ROLLBACK WORK,不過兩者是等價的。回滾會結束用戶的事務,並撤銷正在進行的全部未提交的修改;
SAVEPOINT identifier;SAVEPOINT容許在事務中建立一個保存點,一個事務中能夠有多個SAVEPOINT;
RELEASE SAVEPOINT identifier;刪除一個事務的保存點,當沒有指定的保存點時,執行該語句會拋出一個異常;
ROLLBACK TO identifier;把事務回滾到標記點;
SET TRANSACTION;用來設置事務的隔離級別。InnoDB存儲引擎提供事務的隔離級別有READ UNCOMMITTED、
READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
在mysql命令行的默認下,事務都是自動提交的,sql語句提交後立刻會執行commit操做。
所以開啓一個事務必須使用begin,start transaction,或者執行 set autocommit=0;可使用的事務控制語句
start transction | begin : 顯示的開啓一個事務