欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL與PHP的基礎與應用專題之數(shù)據(jù)完整性

 更新時間:2022年02月21日 15:25:52   作者:我是小白呀  
MySQL是一個關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL?AB?公司開發(fā),屬于?Oracle?旗下產(chǎn)品。MySQL?是最流行的關系型數(shù)據(jù)庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎應用,本篇從數(shù)據(jù)完整性開始

概述

從今天開始, 小白我將帶領大家一起來補充一下 數(shù)據(jù)庫的知識.

數(shù)據(jù)完整性

數(shù)據(jù)完整性 (Data Integrity) 指存儲在數(shù)據(jù)庫 (Databse) 中的數(shù)據(jù), 需要保證一致性和可靠性. 數(shù)據(jù)完整性可以防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù)和防止因錯誤信息的輸入輸出造成無效操作.

數(shù)據(jù)完整性包括:

  • 實體完整性: RDBMS 中一行代碼表示一個實體. 實體完整性就是保住每一個實體都能被區(qū)別
  • 域完整性: 對列的輸入的要求, 通過限制類的數(shù)據(jù)類型, 格式或值的范圍來實現(xiàn)
  • 參照完整性: 主要是表與表之間的關系, 可以通過外鍵來實現(xiàn)
  • 自定義完整性: 借助存儲過程和觸發(fā)器實現(xiàn)

實體完整性

實體完整性 (Enity Integrity) 要求每張表都有唯一標識符, 每張表中的主鍵字段不能為空且不能重復.

例如:

  • id
  • 編號

域完整性

域完整性 (Domain Integrity) 是針對某一具體關系數(shù)據(jù)庫約束條件. 域完整性能保證表中某些列不能輸入無效的值.

例如:

  • 數(shù)據(jù)類型
  • 格式
  • 值域范圍
  • 是否允許空值

舉個例子, 當我們錄入工資數(shù)據(jù)的時候, 工資的范圍應該確保負數(shù)不會被錄入.

參照完整性

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

自定完整性

自定義完整性是針對某一具體關系數(shù)據(jù)庫的約束條件. 自定義完整性反映某一具體應用所涉及的數(shù)據(jù)必須滿足語義要求.

唯一性

在 MySQL 中, 可以使用關鍵字UNIQUE實現(xiàn)字段的唯一性約束, 從而保證實體的完整性.

UNIQUE 的特性:

  • 使用 UNIQUE, 則表中兩條數(shù)據(jù)的同一個字段不能有相同值
  • 一個表中可以有多個 UNIQUE 約束

PHP 代碼實現(xiàn):

<?php

# 創(chuàng)建連接
$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 '身份證號'
)";

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

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

# 關閉連接
mysqli_close($conn);

?>

效果:

外鍵

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

創(chuàng)建主表 & 從表

<?php

# 創(chuàng)建連接
$conn = mysqli_connect("localhost", "root", "admin", "study");

# 查看是否連接成功
if ($conn) {
    echo "服務器連接成功!";
} else {
    echo mysqli_connect_error();
}

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

# SQL語句, 創(chuàng)建成績表
$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)
)";

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

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

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

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

# 關閉連接
mysqli_close($conn);

?>

效果:

插入數(shù)據(jù)

<?php

# 創(chuàng)建連接
$conn = mysqli_connect("localhost", "root", "admin", "study");

# 查看是否連接成功
if ($conn) {
    echo "服務器連接成功!";
} else {
    echo mysqli_connect_error();
}

# SQL語句, 向主表添加數(shù)據(jù)
$SQL1 = "INSERT INTO student
    (student_id, student_name)
    VALUES(1, '我是小白呀'),
    (2, '我是大白呀')";

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

# SQL語句, 向從表添加數(shù)據(jù)
$SQL2 = "INSERT INTO grade
    (student_id, course, grade)
    VALUES(1, '語文', 59),
    (2, '語文', 99)";

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

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

# 關閉連接
mysqli_close($conn);

?>

錯誤展示

<?php

# 創(chuàng)建連接
$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)";

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

# 查看是否執(zhí)行成功
if ($result) {
    echo "SQL語句執(zhí)行成功!";
} 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:\Users\Windows\Desktop\數(shù)據(jù)庫\外鍵錯誤.php:19
Stack trace:
#0 C:\Users\Windows\Desktop\數(shù)據(jù)庫\外鍵錯誤.php(19): mysqli_query(Object(mysqli), 'INSERT INTO gra...')
#1 {main}
thrown in C:\Users\Windows\Desktop\數(shù)據(jù)庫\外鍵錯誤.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:\Users\Windows\Desktop\數(shù)據(jù)庫\外鍵錯誤.php:19
Stack trace:
#0 C:\Users\Windows\Desktop\數(shù)據(jù)庫\外鍵錯誤.php(19): mysqli_query(Object(mysqli), 'INSERT INTO gra...')
#1 {main}
thrown in C:\Users\Windows\Desktop\數(shù)據(jù)庫\外鍵錯誤.php on line 19

到此這篇關于MySQL與PHP的基礎與應用專題之數(shù)據(jù)完整性的文章就介紹到這了,更多相關MySQL 數(shù)據(jù)完整性內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql使用xtrbackup+relaylog增量恢復注意事項

    mysql使用xtrbackup+relaylog增量恢復注意事項

    這篇文章主要介紹了mysql使用xtrbackup+relaylog增量恢復,本次實驗mysql5.7.19.使用了GTID,row格式的binlog,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • MySQL索引優(yōu)化之適合構建索引的幾種情況詳解

    MySQL索引優(yōu)化之適合構建索引的幾種情況詳解

    我們知道正確的建立索引可以加快數(shù)據(jù)庫的查詢,但是如果索引建立不當,或者隨意的建立過多索引不僅不會提升數(shù)據(jù)庫的效率,反而在進行數(shù)據(jù)更新操作的時候需要耗費系統(tǒng)資源對索引進行維護,同時占用大量的存儲空間來對索引進行存儲,本文主要講述在哪些情況下適合建立索引
    2022-07-07
  • MySQL使用mysqldump實現(xiàn)數(shù)據(jù)完全備份

    MySQL使用mysqldump實現(xiàn)數(shù)據(jù)完全備份

    mysqldump是MySQL自帶的備份工具,可方便實現(xiàn)對MySQL的備份,也可以將指定的庫、表導出為SQL腳本,下面小編就來教大家如何使用mysqldump實現(xiàn)數(shù)據(jù)完全備份吧
    2023-07-07
  • Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設置方式

    Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設置方式

    這篇文章主要介紹了Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 淺析SQL語句行列轉換的兩種方法 case...when與pivot函數(shù)的應用

    淺析SQL語句行列轉換的兩種方法 case...when與pivot函數(shù)的應用

    SQL語句行列轉換的兩種方法 case...when和pivot函數(shù)應用,運用pivot 函數(shù)只支持數(shù)據(jù)庫版本2005以上的。一般運用case when else end 的方法比較多,比較普遍
    2013-08-08
  • 基于mysql中delete的語法別名問題

    基于mysql中delete的語法別名問題

    這篇文章主要介紹了mysql中delete的語法別名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • mysql 5.7.11 winx64.zip安裝配置方法圖文教程

    mysql 5.7.11 winx64.zip安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql5.7.11安裝配置方法圖文教程,具有一定的參考價值,感興趣的朋友可以參考一下
    2017-02-02
  • MySQL慢查詢日志超詳細總結

    MySQL慢查詢日志超詳細總結

    mysql的慢查詢日志是mysql提供的一種日志記錄,它用來記錄在mysql中響應時間超過閾值的語句,下面這篇文章主要給大家介紹了關于MySQL慢查詢日志的相關資料,需要的朋友可以參考下
    2023-05-05
  • 阿里云ESC 安裝 MYSQL8.0的教程

    阿里云ESC 安裝 MYSQL8.0的教程

    這篇文章主要介紹了阿里云ESC 安裝 MYSQL8.0的教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • MySQL ERROR 1045 (28000) 錯誤的解決辦法

    MySQL ERROR 1045 (28000) 錯誤的解決辦法

    這篇文章主要介紹了MySQL ERROR 1045 (28000) 錯誤的解決辦法,很實用的解決方法,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論