數據庫表的約束


一、數據庫約束的概述

  1、約束的作用

    對表中的數據進行限制,保證數據的正確性、有效性和完整性。

    一個表如果添加了約束,不正確的數據將無法插入到表中。約束在創建表的時候添加比較合適。

  2、約束的種類

約束名 約束關鍵字
主鍵約束 primary key
唯一約束 unique
非空約束 not null
外鍵約束 foreign key
檢查約束 check 注:MySQL不支持

 

二、主鍵約束

  1、主鍵的作用

    主鍵的作用:用來唯一標識數據庫中的每一條記錄。

  2、哪些字段應該作為表的主鍵

    通常不用業務字段作為主鍵,單獨給每張表設計一個 id 的字段,把 id 作為主鍵。

    主鍵就是給數據庫和程序使用的,不是給最終的客戶使用的,所以主鍵有沒有含義沒有關系,只有不重復,非空就行。

  3、創建主鍵

    •    主鍵關鍵字:primary key
    •    主鍵的特點: ① 非空 not  null; ② 唯一
    •    基本語法     

      在創建表時,添加主鍵約束

create table student(
	id int primary key,-- 給id添加主鍵約束
	name varchar(20)
);

 

      ② 刪除主鍵

ALTER TABLE student DROP PRIMARY KEY;

     

      ③ 創建完表后添加主鍵(兩種方式)

ALTER TABLE student MODIFY id int PRIMARY KEY;   
ALTER TABLE student add primary key(字段名);

    注意

      ① 主鍵非空且唯一

      ② 一張表只能有一個字段(組)作為主鍵

      ③ 主鍵就是表中記錄的唯一標識

  4、主鍵自增

    主鍵如果讓自己添加很有可能重復,所以希望在每次插入新記錄時,數據庫自動生成主鍵字段的值。

    基本語法格式:

    ① 創建表時,添加主鍵約束,並且完成主鍵自增長(字段類型必須是整數類型)

create table student(
	id int primary key auto_increment,-- 給id添加主鍵約束
	name varchar(20)
);

    ② 刪除自動增長

ALTER TABLE stu MODIFY id INT;

    ③ 創建表完后,添加自動增長

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

  5、修改自增長的默認值起始值

    默認 auto_increment 的開始值是 1,如果希望修改起始值,使用下面語法。

    ① 創建時指定起始值

CREATE TABLE 表名(
    列名 int primary key AUTO_INCREMENT
) AUTO_INCREMENT=起始值;

    ② 創建好以后修改起始值

ALTER TABLE 表名 AUTO_INCREMENT=起始值;

  6、delete 和 truncate 對自增長的影響

    •   delete:刪除所有記錄之后,自增長沒有影響。
    •   truncate:刪除以后,自增長又重新開始。

三、唯一約束

  1、概念

    唯一約束概念:表中的某一列不能出現重復的值,必須保證值的唯一性。

  2、基本語法格式

    ① 創建表時,添加唯一約束

CREATE TABLE student(
	id INT,
	phone_number VARCHAR(20) UNIQUE -- 添加了唯一約束
);

              注意:在MySQL中,唯一約束限定的列的值可以有多個 null。(null表示不確定,即不相等)

    ② 刪除唯一約束

ALTER TABLE student DROP INDEX phone_number;

    ③ 在創建表后,添加唯一約束

ALTER TABLE student MODIFY phone_number VARCHAR(20) UNIQUE;

 

四、非空約束

  1、非空約束概念

    非空約束:即數據表的某一列不能為 null。

  2、基本語法格式

    ① 創建表時添加約束

CREATE TABLE student(
	id INT,
	NAME VARCHAR(20) NOT NULL -- name為非空
);

    ② 創建表完后,添加非空約束

ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

    ③ 刪除 某個字段的非空約束

ALTER TABLE stu MODIFY NAME VARCHAR(20);

  3、為某字段設置默認值

    語法格式

字段名 字段類型 DEFAULT 默認值

          Demo:

 1 create table student(  2     id int,  3     name varchar(20),  4     sex varchar(2) default '男'
 5 )  6 
 7 -- 添加一條記錄,使用默認值  8 insert into student values(6,'趙六',default)  9 -- 添加一條記錄,不適用默認值 10 insert into student values(8,'錢九','男')

 

   擴展:如果一個字段設置了非空和為約束,該字段與主鍵有什么區別?

     (1)主鍵在一個表中,只能有一個。不能出現多個主鍵。主鍵可以單列,也可以是多列

     (2)自增長只能用在主鍵上。

五、外鍵約束

  1、單表存儲數據的缺點

    單表存儲數據可能會造成的缺點:

      ① 數據冗余

      ② 后期還會出現增刪改的問題

    解決方式:使用外鍵約束

  2、外鍵約束

    外鍵約束概念:foreign key,讓從表中與主表主鍵對應的那一列,從而保證數據的正確性。

    主表:一方,用來約束別人的表。

    從表:多方,被別人約束的表。

    示意圖

    

  3、創建約束的語法

    ① 創建表時增加外鍵

create table 表名(
	....
	外鍵列
	[constraint] [外鍵名稱] foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
);

    ② 刪除外鍵

ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;

    ③ 創建表之后添加外鍵

ALTER TABLE 表名 ADD [CONSTRAINT] [外鍵名稱] FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱);

  4、外鍵的級聯操作

    當改變主表中的主鍵時,修改失敗;在刪除主表中的記錄時,也出現刪除失敗。

    級聯操作:在修改和刪除主表的主鍵時,同時更新或刪除副表的外鍵值,稱為級聯操作。

    級聯操作語法:

ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱);
on update cascade; 表示級聯更新操作
on delete cascade; 表示級聯刪除操作

 

六、數據約束總結

約束名 關鍵字 說明
主鍵 primary key

① 唯一

② 非空

默認 default 如果一列沒有值,使用默認值
非空 not null 這一列必須有值
唯一 unique 這一列不能有重復值
外鍵 foreign key 主表中主鍵列,在從表中外鍵列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM