首頁 > 軟體

MySQL與PHP的基礎與應用專題之資料完整性

2022-02-21 19:01:29

概述

從今天開始, 小白我將帶領大家一起來補充一下 資料庫的知識.

資料完整性

資料完整性 (Data Integrity) 指儲存在資料庫 (Databse) 中的資料, 需要保證一致性和可靠性. 資料完整性可以防止資料庫中存在不符合語意規定的資料和防止因錯誤資訊的輸入輸出造成無效操作.

資料完整性包括:

  • 實體完整性: RDBMS 中一行程式碼錶示一個實體. 實體完整性就是保住每一個實體都能被區別
  • 域完整性: 對列的輸入的要求, 通過限制類的資料型別, 格式或值的範圍來實現
  • 參照完整性: 主要是表與表之間的關係, 可以通過外來鍵來實現
  • 自定義完整性: 藉助儲存過程和觸發器實現

實體完整性

實體完整性 (Enity Integrity) 要求每張表都有唯一識別符號, 每張表中的主鍵欄位不能為空且不能重複.

例如:

  • id
  • 編號

域完整性

域完整性 (Domain Integrity) 是針對某一具體關聯式資料庫約束條件. 域完整效能保證表中某些列不能輸入無效的值.

例如:

  • 資料型別
  • 格式
  • 值域範圍
  • 是否允許空值

舉個例子, 當我們錄入工資資料的時候, 工資的範圍應該確保負數不會被錄入.

參照完整性

參照完整性 (Referential Integrity) 指關聯的兩個表之間的約束. 參照完整性保證了表中每條記錄外來鍵的值必須是表中存在的.

自定完整性

自定義完整性是針對某一具體關聯式資料庫的約束條件. 自定義完整性反映某一具體應用所涉及的資料必須滿足語意要求.

唯一性

在 MySQL 中, 可以使用關鍵字UNIQUE實現欄位的唯一性約束, 從而保證實體的完整性.

UNIQUE 的特性:

  • 使用 UNIQUE, 則表中兩條資料的同一個欄位不能有相同值
  • 一個表中可以有多個 UNIQUE 約束

PHP 程式碼實現:

<?php

# 建立連線
$conn = mysqli_connect("localhost", "root", "admin", "study");

# 檢視是否連線成功
if ($conn) {
    echo "伺服器連線成功!";
} else {
    echo mysqli_connect_error();
}

# SQL語句 (身份證帶唯一性)
$SQL = "CREATE TABLE user_with_id (
    id INT(8) AUTO_INCREMENT PRIMARY KEY comment '主鍵id',
    username VARCHAR(255) NOT NULL comment '姓名',
    id_number varchar(255) UNIQUE NOT NULL comment '身份證號'
)";

# 執行SQL語句
$result = mysqli_query($conn, $SQL);

# 檢視是否執行成功
if ($result) {
    echo "SQL語句執行成功!";
} else {
    echo mysqli_error($conn);
}

# 關閉連線
mysqli_close($conn);

?>

效果:

外來鍵

外來鍵 (Foreign KEY) 定義了表之間一致性, 用於強制參照完整性. 外來鍵約束定義了對同一表或其他表的列的參照, 這些列具有 PRIMARY KEY 或 UNIQUE 約束.

建立主表 & 從表

<?php

# 建立連線
$conn = mysqli_connect("localhost", "root", "admin", "study");

# 檢視是否連線成功
if ($conn) {
    echo "伺服器連線成功!";
} else {
    echo mysqli_connect_error();
}

# SQL語句, 建立學生表
$SQL1 = "CREATE TABLE student (
    student_id INT(8) PRIMARY KEY COMMENT '學生id',
    student_name VARCHAR(255) NOT NULL COMMENT '學生姓名'
)";

# SQL語句, 建立成績表
$SQL2 = "CREATE TABLE grade (
    id INT(8) AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵id',
    student_id INT(8) NOT NULL COMMENT '學生id',
    course varchar(255) NOT NULL COMMENT '課程',
    grade INT(8) NOT NULL COMMENT '成績',
    FOREIGN KEY (student_id) references student(student_id)
)";

# 執行SQL語句
$result = mysqli_query($conn, $SQL1);

# 檢視是否執行成功
if ($result) {
    echo "SQL語句執行成功!";
} else {
    echo mysqli_error($conn);
}

# 執行SQL語句
$result = mysqli_query($conn, $SQL2);

# 檢視是否執行成功
if ($result) {
    echo "SQL語句執行成功!";
} else {
    echo mysqli_error($conn);
}

# 關閉連線
mysqli_close($conn);

?>

效果:

插入資料

<?php

# 建立連線
$conn = mysqli_connect("localhost", "root", "admin", "study");

# 檢視是否連線成功
if ($conn) {
    echo "伺服器連線成功!";
} else {
    echo mysqli_connect_error();
}

# SQL語句, 向主表新增資料
$SQL1 = "INSERT INTO student
    (student_id, student_name)
    VALUES(1, '我是小白呀'),
    (2, '我是大白呀')";

# 執行SQL語句
$result = mysqli_query($conn, $SQL1);

# SQL語句, 向從表新增資料
$SQL2 = "INSERT INTO grade
    (student_id, course, grade)
    VALUES(1, '語文', 59),
    (2, '語文', 99)";

# 執行SQL語句
$result = mysqli_query($conn, $SQL2);

# 檢視是否執行成功
if ($result) {
    echo "SQL語句執行成功!";
} else {
    echo mysqli_error($conn);
}

# 關閉連線
mysqli_close($conn);

?>

錯誤展示

<?php

# 建立連線
$conn = mysqli_connect("localhost", "root", "admin", "study");

# 檢視是否連線成功
if ($conn) {
    echo "伺服器連線成功!";
} else {
    echo mysqli_connect_error();
}

# SQL語句, 錯誤展示 (主表沒有student_id=3)
$SQL = "INSERT INTO grade
    (student_id, course, grade)
    VALUES(3, '語文', 88)";

# 執行SQL語句
$result = mysqli_query($conn, $SQL);

# 檢視是否執行成功
if ($result) {
    echo "SQL語句執行成功!";
} else {
    echo mysqli_error($conn);
}

# 關閉連線
mysqli_close($conn);

?>

報錯:

伺服器連線成功!
Fatal error: Uncaught mysqli_sql_exception: Cannot add or update a child row: a foreign key constraint fails (`study`.`grade`, CONSTRAINT `grade_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)) in C:UsersWindowsDesktop資料庫外來鍵錯誤.php:19
Stack trace:
#0 C:UsersWindowsDesktop資料庫外來鍵錯誤.php(19): mysqli_query(Object(mysqli), 'INSERT INTO gra...')
#1 {main}
thrown in C:UsersWindowsDesktop資料庫外來鍵錯誤.php on line 19
PHP Fatal error: Uncaught mysqli_sql_exception: Cannot add or update a child row: a foreign key constraint fails (`study`.`grade`, CONSTRAINT `grade_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)) in C:UsersWindowsDesktop資料庫外來鍵錯誤.php:19
Stack trace:
#0 C:UsersWindowsDesktop資料庫外來鍵錯誤.php(19): mysqli_query(Object(mysqli), 'INSERT INTO gra...')
#1 {main}
thrown in C:UsersWindowsDesktop資料庫外來鍵錯誤.php on line 19

到此這篇關於MySQL與PHP的基礎與應用專題之資料完整性的文章就介紹到這了,更多相關MySQL 資料完整性內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com