資料完整性是指資料的正確性和相容性,是為了防止資料庫中存在不符合語義的資料,即防止資料庫中存在不正確的資料。在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一次 域完整性 域就是指字段,它是為了保證欄位的...