mysql各種key SQL中的各種鍵

2021-10-18 22:05:13 字數 3381 閱讀 2603

sql中的primary key, unique key, foreign key。

primary key與unique key的作用

共同作用是為了約束字段/建立索引/提高查詢效率

mysql primary key的屬性:主鍵具有唯一性:是指一張表裡只能有乙個主鍵;

主鍵作用:主鍵primary key是為了唯一標識乙個字段,使其唯一且不能為null,自動生成索引;

隱含定義:如果這些列沒有被明確地定義為not null,mysql會隱含地定義這些列。

主鍵其實也是索引,甚至在mysql的術語裡面「鍵」就等於「索引」,

unique key的屬性:唯一性:定義了unique約束的字段中不能包含重複值,

可為空:在unique約束的字段上可以包含空值.

擴充套件:unique就是唯一,當你需要限定你的某個表字段每個值都唯一,沒有重複值時使用.

關係:主鍵=not null +unique鍵的結合;

not null和unique約束最好的結合。如果這些列沒有被明確地定義為not null,mysql會隱含地定義這些列。

區別:(1) 唯一性約束所在的列允許空值,但是主鍵約束所在的列不允許空值。

(2) 可以把唯一性約束放在乙個或者多個列上,這些列或列的組合必須有唯一的。但是,唯一性約束所在的列並不是表的主鍵列。

(3) 唯一性約束強制在指定的列上建立乙個唯一性索引。在預設情況下,建立唯一性的非聚簇索引,但是,也可以指定所建立的索引是聚簇索引。

(4) 建立主鍵的目的是讓外來鍵來引用

(5) 乙個表最多只有乙個主鍵,但可以有很多唯一鍵

sql 約束(constraints)

sql 約束用於規定表中的資料規則。

約束可以在建立表時規定(通過 create table 語句),或者在表建立之後規定(通過 alter table 語句)。

# sql create table + constraint 語法create table table_name

column_name1 data_type(size) constraint_name,

column_name2 data_type(size) constraint_name,

column_name3 data_type(size) constraint_name,

在 sql 中,我們有如下約束:not null - 指示某列不能儲存 null 值。

unique - 保證某列的每行必須有唯一的值。

primary key - not null 和 unique 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助於更容易更快速地找到表中的乙個特定的記錄。

foreign key - 保證乙個表中的資料匹配另乙個表中的值的參照完整性。

check - 保證列中的值符合指定的條件。

default - 規定沒有給列賦值時的預設值。

sql not null 約束

在預設的情況下,表的列接受 null 值。

not null 約束強制字段始終包含值。這意味著,如果不向字段新增值,就無法插入新記錄或者更新記錄。

# 下面的 sql 強制 "p_id" 列和 "lastname" 列不接受 null 值:

create table persons

p_id int not null,

lastname varchar(255) not null,

firstname varchar(255),

address varchar(255),

city varchar(255)

sql unique 約束

unique 約束唯一標識資料庫表中的每條記錄。

unique 和 primary key 約束均為列或列集合提供了唯一性的保證。

primary key 約束擁有自動定義的 unique 約束。

請注意,每個表可以有多個 unique 約束,但是每個表只能有乙個 primary key 約束。

下面的 sql 在 「persons」 表建立時在 「p_id」 列上建立 unique 約束:

create table persons

p_id int not null,

lastname varchar(255) not null,

firstname varchar(255),

address varchar(255),

city varchar(255),

unique (p_id)

sql primary key 約束

primary key 約束唯一標識資料庫表中的每條記錄。

主鍵必須包含唯一的值。

主鍵列不能包含 null 值。

每個表都應該有乙個主鍵,並且每個表只能有乙個主鍵。

下面的 sql 在 「persons」 表建立時在 「p_id」 列上建立 primary key 約束:

create table persons

p_id int not null,

lastname varchar(255) not null,

firstname varchar(255),

address varchar(255),

city varchar(255),

primary key (p_id)

sql foreign key 約束

乙個表中的 foreign key 指向另乙個表中的 unique key(唯一約束的鍵)。

讓我們通過乙個例項來解釋外來鍵。請看下面兩個表:

請注意,」orders」 表中的 「p_id」 列指向 「persons」 表中的 「p_id」 列。

「persons」 表中的 「p_id」 列是 「persons」 表中的 primary key。

「orders」 表中的 「p_id」 列是 「orders」 表中的 foreign key。

foreign key 約束用於預防破壞表之間連線的行為。

foreign key 約束也能防止非法資料插入外來鍵列,因為它必須是它指向的那個表中的值之一。

下面的 sql 在 「orders」 表建立時在 「p_id」 列上建立 foreign key 約束:

create table orders

o_id int not null,

orderno int not null,

p_id int,

primary key (o_id),

foreign key (p_id) references persons(p_id)

mysql中InnoDB中的各種鎖

一種分類方式 行鎖 索引上鎖 表鎖 表上鎖 一種分類方式 共享鎖 以及獲取前先獲取意向共享鎖 lock in share model 排它鎖 以及獲取前先獲取意向排它鎖 for update 一種分類方式 該分類前提 命中索引 記錄鎖 單條行鎖 間隙鎖 無記錄時候的臨鍵鎖退化為間隙鎖 臨鍵鎖 查詢範...

MySQL中各種欄位的取值範圍

mysql中各種欄位的取值範圍 tinyint 128 127 tinyint unsigned 0 255 allint 32768 32767 allint unsigned 0 65535 mediumint 8388608 8388607 mediumint unsigned 0 16777...

MySQL中各種欄位的取值範圍

mysql中各種欄位的取值範圍 tinyint 128 127 tinyint unsigned 0 255 smallint 32768 32767 smallint unsigned 0 65535 mediumint 8388608 8388607 mediumint unsigned 0 1...