MySQL資料完整性約束

2021-09-09 08:28:39 字數 3915 閱讀 6963

資料完整性是指資料的正確性和相容性,是為了防止資料庫中存在不符合語義的資料,即防止資料庫中存在不正確的資料。在mysql中提供了多種完整性約束。

1、主鍵約束

主鍵可以是表中的某一列,也可以是表中的多個列所構成的乙個組合;其中,由多個列組合而成的主鍵也稱為復合主鍵。在mysql中,主鍵列必須遵守以下規則。

(1)每乙個表只能定義乙個主鍵。

(2)唯一性原則。主鍵的值,也稱鍵值,必須能夠唯一表示表中的每一條記錄,且不能為null。

(3)最小化規則。復合主鍵不能包含不必要的多餘列。也就是說,當從乙個復合主鍵中刪除一列後,如果剩下的列構成的主鍵仍能滿足唯一性原則,那麼這個復合主鍵是不正確的。

(4)乙個列名在復合主鍵的列表中只能出現一次。

示例:建立學生資訊表tb_student時,將學號(stu_id)字段設定為主鍵。

create table tb_student

( stu_id int auto_increment primary key,

name varchar(30)

);

示例:建立使用者資訊表tb_student時,將學號(stu_id)和所在班級號(class_id)字段設定為復合主鍵。

create table tb_student

( stu_id int auto_increment,

name varchar(30),

class_id int not null,

primary key (stu_id,class_id)

);

示例:通過修改資料表結構,新增主鍵約束。 

alter table tb_student add constraint primary key(stu_id);
2、唯一約束(替代鍵約束或者候選鍵約束)

唯一約束使用unique關鍵字來定義。唯一約束的值必須是唯一的,允許為空(null)。

在mysql中,唯一約束與主鍵之間存在以下兩點區別。

(1)乙個表只能建立乙個主鍵,但可以定義多個唯一約束。

(2)定義主鍵約束時,系統會自動建立primary key索引,而定義候選鍵約束時,系統會自動建立unique索引。

示例:建立使用者資訊表tb_student時,將學號(stu_id)和姓名(name)設定為唯一約束。

create table tb_student

( stu_id int unique,

name varchar(30) unique

);

示例:建立使用者資訊表tb_student時,將學號(stu_id)和姓名(name)字段設定為復合唯一約束。

create table tb_student

( stu_id int,

name varchar(30),

unique uniq_id_name (stu_id,name)

);

示例:通過修改資料表結構,新增唯一約束。

alter table tb_student add constraint uniq_id_name unique(stu_id,name);
mysql有兩種常用的引擎型別(myisam和innodb),目前,只用innodb引擎型別支援外來鍵約束。

foreign key(a欄位) references b(id) # a欄位和外來鍵的字段一定要保證unique

foreign key fk_class_id (class_id)

references tb_class(class_id)--------參照完整性約束,定義外來鍵連線到是哪個表的哪個主鍵。

示例:建立班級資訊表(tb_class)和學生資訊表(tb_student),並設定學生資訊表中班級編號(class_id)欄位的外來鍵約束。

-- 建立班級資訊表

create table tb_class

( class_id int auto_increment primary key,

class_name varchar(30) not null);

-- 建立學生資訊表,並設定班級id的外來鍵約束

create table tb_student

( stu_id int auto_increment primary key,

name varchar(30),

class_id int not null,

foreign key fk_class_id (class_id)

references tb_class(class_id)

);

示例:通過修改資料表結構,新增外來鍵約束。

alter table tb_student add constraint foreign key fk_class_id (class_id) references tb_class(class_id);
檢查約束用來指定某列的可取值的範圍,它通過限制輸入到列中的值來強制域的完整性。

注意:目前的mysql版本只是對check約束進行了分析處理,但會被直接忽略,並不會報錯。

示例:建立學生資訊表tb_student時,將年齡(age)的值設定在7至18之間(不包括18)的數值。

create table tb_student

( stu_id int auto_increment primary key,

name varchar(30),

age int not null check(age>=7 and age<18)

);

5、自動增長約束(auto_increment)

定義:自動增長,通常搭配主鍵字段使用,只能用於整形

create table student(

id int primary key auto_increment,

name varchar(20),

*** enum('male','female') default 'male'

);

刪除約束語法:

alter table 表名 drop [foreign key| index 約束名稱]|[primary key]
示例:刪除約束。

create table tb_student

( stu_id int,

name varchar(30) ,

class_id int not null,

-- 主鍵約束

primary key(stu_id),

-- 外來鍵約束

foreign key fk_class_id (class_id)

references tb_class(class_id),

-- 唯一性約束

unique uniq_name (name));

-- 刪除主鍵約束

alter table tb_student drop primary key;

-- 刪除外來鍵約束

alter table tb_student drop foreign key fk_class_id;

-- 刪除唯一性約束

alter table tb_student drop index uniq_name;

MySQL完整性約束

create database adrui show databases use adrui not null 非空約束,插入資料該欄位不能為空 primary key 主鍵約束 主鍵約束相當於非空約束 唯一約束,auto increment是mysql擴充套件的字段值自加的約束,約束字段資料型別必...

Mysql 完整性約束

定義 完整性約束是對字段進行限制,從而符合該欄位達到我們期望的效果比如字段含有預設值,不能是null等,主要有唯 一 自增 主鍵 外來鍵約束 唯一約束 唯一約束可以有多個但索引列的值必須唯一,索引列的值允許有空值。如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立索引的時候就應該使用關...

資料完整性約束

實體完整性 實體就是指一條記錄。這種完整性就是為了保證每一條記錄不是重覆記錄。是有意義的 主鍵 非空和唯一.乙個表只有乙個主鍵,但是乙個主鍵可以是由多個字段組成的 組合鍵 標識列 系統自動生成,永遠不重複 唯一鍵 唯一,但是可以為null,只能null一次 域完整性 域就是指字段,它是為了保證欄位的...