Mysql的InnoDB引擎 4 表(2)

2022-07-16 10:42:18 字數 1550 閱讀 9867

首先我們搞清楚約束和索引的區別,使用者建立了乙個唯一索引,意味著使用者建立了唯一約束。但是約束和索引的概念是不同的,約束更多是邏輯上的概念,用來保證資料的完整性,而索引是乙個資料結構,既有邏輯上的概念,還有物理上的儲存。

在innodb儲存引擎表中,域完整性可以通過如下幾個途徑來保證:

對於innodb而言,提供出去的集中約束為:

在某些預設值下,mysql允許非法或者不正確的資料插入或更新。比如not null約束下你傳乙個null值進來,mysql會將null轉換成0再進行插入。比如時間插入,插入『2020-02-30』,資料庫也不會對日期是否合法進行驗證。因此資料庫本身沒有對資料的正確性進行驗證。

可以通過設定sql_mode用來嚴格審查輸入的引數。sql如下:

set sql_mode =

'strict_trans_tables

'

mysql資料不支援傳統的check約束,但是可以通過enum和set型別解決這部分需求。具體使用方式檢視 

實現比較複雜的約束的時候enum和set有點乏力,我們還是使用觸發器進行約束比較好。

觸發器:作用是在執行insert、delete、以及update命令之前或者之後自動呼叫的sql命令或者儲存過程。

建立觸發器:

create

[definer =

]trigger trigger_name before |after insert

|delete

|update

on table_name for each row trigger_stmt

我們最多可以為乙個表建立6個觸發器,即分別為insert、update、delete的before和after各定義乙個觸發器。當前的mysql只支援for each row的觸發器。

外來鍵約束來保證完整性,innodb支援外來鍵約束,定義如下:

[

constraint [symbol]]

foreign

key[

index_name

](table_col_name, ......)

references

tab_name (index_col_name,......)

[on delete reference_option][

on update reference_option

]reference_option:

restrict

|cascade

|set

null

| no action

mysql資料庫中,檢視是乙個命名的虛表,它有乙個sql查詢語句定義,可以用作表使用,但是不占用物理記憶體。mysql不支援物化檢視。

分割槽功能並不是在引擎層面完成的,因此不是只有innodb才有分割槽功能。mysql的資料庫分割槽支援水平分割槽,並且mysql的分割槽是資料和索引一起分割槽。不支援全域性分割槽(資料存放在各個分割槽,索引在乙個物件裡面)。

分割槽的型別:

無論建立什麼分割槽,如果表中存在主鍵或者唯一索引,那麼每個分割槽對應的列也必須是主鍵或者唯一索引。

Mysql的InnoDB引擎 4 表(3)

create table t id int engine innodb partition byrange id partition p0 values less than 10 partition p1 values less than 20 partition p2 values less th...

MySQL的儲存引擎INNODB

1 一般情況下,mysql會預設提供多種儲存引擎,你可以通過下面的檢視 看你的mysql現在已提供什麼儲存引擎 mysql show engines 看你的mysql當前預設的儲存引擎 mysql show variables like storage engine 你要看某個錶用了什麼引擎 在顯示...

mysql的innodb儲存引擎

innodb是支援事務的儲存引擎,支援acid特性的acid 指資料庫事務正確執行的四個基本要素的縮寫 包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 更適合處理大量的小事務,小事務正常都會被提交,很少會被回滾,在資料儲存的...