SQL數據完整性


1.數據的完整性

1. 什么是數據的完整性

保證用戶輸入的數據保存到數據庫中是正確的

2.添加數據完整性

在創建表的時候給表添加約束

3.完整性分類

實體完整性、域完整性、引用完整性


2.完整性的分類

1.實體完整性

  • 表中的一行(一條記錄)代表一個實體 (entity)

  • 實體完整性的作用:標記每一行數據不重復。行級約束

  • 約束類型:

    • 主鍵約束(primary key):

      • 每個表中要有一個主鍵,數據唯一,且不能為null

      • 創建主鍵的方式:

        • create table pe(ID BIGINT PRIMARY key, name VARCHAR(50));
          
        • create table pe2(ID BIGINT, name VARCHAR(50), PRIMARY KEY(ID));
          
        • 聯合主鍵:兩個字段數據同時相同時,才違反聯合主鍵約束。 create table stu2(ID BIGINT,snum BIGINT, name VARCHAR(50), PRIMARY KEY(ID, snum));

        • 更改表結構,設置主鍵:ALTER TABLE student ADD CONSTRAINT PRIMARY KEY(sid);

    • 唯一約束

      • 指定列的數據不能重復,可以為空值
      • CREATE TABLE table1(id int PRIMARY KEY, name VARCHAR(50) UNIQUE); name不能重復
    • 自動增長列

      • 指定列的數據自動增長,即使數據刪除,依然繼續增長

      • CREATE TABLE table1(
        	id int PRIMARY KEY auto_increment,
        	name varchar (20) UNIQUE
        );
        

2.域完整性

使用:限制此單元格的數據正確,不對照此列的其他單元格比較

域,代表當前單元格

域完整性約束:

  • 數據類型:數值、日期、字符串

  • 非空約束(not null) CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null);

  • -- 默認值約束 (default)
    CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null,sex char(1) default '男')
    -- 設置默認值為 男
    


3. 參照完整性

什么是參照完整性

  • 指表與表之間的一種對應關系
  • 通常情況下可以通過設置兩張表之間的主鍵、外鍵關系,或者編寫兩表的觸發器來實現。
  • 有對應參照完整性的兩張表,在對他們進行數據插入、更新、刪除的過程中,系統都會將被修改表格與另一張對應表格繼續對照,從而阻止一些不正確的數據操作

數據庫的主鍵和外鍵類型要一致

兩個表必須是 InnoDB 類型

設置參照完整性后,外鍵當中的內值,必須得是主鍵當中的內容

-- 設置外鍵
CREATE TABLE score(
	sid int PRIMARY KEY score int,
	CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id)
);
-- score 設置外鍵,score 里的sid 關聯 stu 里的 id
-- 設置外鍵
alter table score add CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id);
-- 多對多關系創建
CREATE TABLE teach(tid int PRIMARY KEY, name VARCHAR(50));
CREATE TABLE stu(sid int PRIMARY KEY, name VARCHAR(50));
CREATE TABLE tea_stu_rel(tid int, sid int);

ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(tid) REFERENCES teach(tid);
ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(sid) REFERENCES stu(sid);

為什么要將表拆分:避免冗余數據



免責聲明!

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



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