最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL與PHP的基礎(chǔ)與應(yīng)用專題之?dāng)?shù)據(jù)完整性

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

概述

從今天開(kāi)始, 小白我將帶領(lǐng)大家一起來(lái)補(bǔ)充一下 數(shù)據(jù)庫(kù)的知識(shí).

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

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

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

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

實(shí)體完整性

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

例如:

  • id
  • 編號(hào)

域完整性

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

例如:

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

舉個(gè)例子, 當(dāng)我們錄入工資數(shù)據(jù)的時(shí)候, 工資的范圍應(yīng)該確保負(fù)數(shù)不會(huì)被錄入.

參照完整性

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

自定完整性

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

唯一性

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

UNIQUE 的特性:

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

PHP 代碼實(shí)現(xiàn):

<?php

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

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

# SQL語(yǔ)句 (身份證帶唯一性)
$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 '身份證號(hào)'
)";

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

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

# 關(guān)閉連接
mysqli_close($conn);

?>

效果:

外鍵

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

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

<?php

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

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

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

# SQL語(yǔ)句, 創(chuàng)建成績(jī)表
$SQL2 = "CREATE TABLE grade (
    id INT(8) AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵id',
    student_id INT(8) NOT NULL COMMENT '學(xué)生id',
    course varchar(255) NOT NULL COMMENT '課程',
    grade INT(8) NOT NULL COMMENT '成績(jī)',
    FOREIGN KEY (student_id) references student(student_id)
)";

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

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

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

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

# 關(guān)閉連接
mysqli_close($conn);

?>

效果:

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

<?php

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

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

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

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

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

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

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

# 關(guān)閉連接
mysqli_close($conn);

?>

錯(cuò)誤展示

<?php

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

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

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

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

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

# 關(guān)閉連接
mysqli_close($conn);

?>

報(bào)錯(cuò):

服務(wù)器連接成功!
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ù)庫(kù)\外鍵錯(cuò)誤.php:19
Stack trace:
#0 C:\Users\Windows\Desktop\數(shù)據(jù)庫(kù)\外鍵錯(cuò)誤.php(19): mysqli_query(Object(mysqli), 'INSERT INTO gra...')
#1 {main}
thrown in C:\Users\Windows\Desktop\數(shù)據(jù)庫(kù)\外鍵錯(cuò)誤.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ù)庫(kù)\外鍵錯(cuò)誤.php:19
Stack trace:
#0 C:\Users\Windows\Desktop\數(shù)據(jù)庫(kù)\外鍵錯(cuò)誤.php(19): mysqli_query(Object(mysqli), 'INSERT INTO gra...')
#1 {main}
thrown in C:\Users\Windows\Desktop\數(shù)據(jù)庫(kù)\外鍵錯(cuò)誤.php on line 19

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

相關(guān)文章

  • mysql數(shù)據(jù)庫(kù)和oracle數(shù)據(jù)庫(kù)之間互相導(dǎo)入備份

    mysql數(shù)據(jù)庫(kù)和oracle數(shù)據(jù)庫(kù)之間互相導(dǎo)入備份

    今天小編就為大家分享一篇關(guān)于mysql數(shù)據(jù)庫(kù)和oracle數(shù)據(jù)庫(kù)之間互相導(dǎo)入備份,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • PostgreSQL物化視圖(materialized view)過(guò)程解析

    PostgreSQL物化視圖(materialized view)過(guò)程解析

    這篇文章主要介紹了PostgreSQL物化視圖(materialized view)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 完美解決mysql啟動(dòng)后隨即關(guān)閉的問(wèn)題(ibdata1文件損壞導(dǎo)致)

    完美解決mysql啟動(dòng)后隨即關(guān)閉的問(wèn)題(ibdata1文件損壞導(dǎo)致)

    下面小編就為大家?guī)?lái)一篇完美解決mysql啟動(dòng)后隨即關(guān)閉的問(wèn)題(ibdata1文件損壞導(dǎo)致)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Mysql ERROR 1067: Invalid default value for字段問(wèn)題

    Mysql ERROR 1067: Invalid default v

    這篇文章主要介紹了Mysql ERROR 1067: Invalid default value for字段問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • MySQL內(nèi)部函數(shù)的超詳細(xì)介紹

    MySQL內(nèi)部函數(shù)的超詳細(xì)介紹

    眾所周知MySQL有很多內(nèi)置的函數(shù),下面這篇文章主要給大家介紹了關(guān)于MySQL內(nèi)部函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Win10下mysql 8.0.20 安裝配置方法圖文教程

    Win10下mysql 8.0.20 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Win10下mysql 8.0.20 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • linux 安裝 mysql 8.0.19 詳細(xì)步驟及問(wèn)題解決方法

    linux 安裝 mysql 8.0.19 詳細(xì)步驟及問(wèn)題解決方法

    這篇文章主要介紹了linux 安裝 mysql 8.0.19 詳細(xì)步驟,本文給大家列出了常見(jiàn)問(wèn)題及解決方法,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼

    RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼

    這篇文章主要給大家介紹了關(guān)于RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 快速解決mysql導(dǎo)數(shù)據(jù)時(shí),格式不對(duì)、導(dǎo)入慢、丟數(shù)據(jù)的問(wèn)題

    快速解決mysql導(dǎo)數(shù)據(jù)時(shí),格式不對(duì)、導(dǎo)入慢、丟數(shù)據(jù)的問(wèn)題

    這篇文章主要介紹了快速解決mysql導(dǎo)數(shù)據(jù)時(shí),格式不對(duì)、導(dǎo)入慢、丟數(shù)據(jù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 淺談mysql中int(1)和int(10)的區(qū)別

    淺談mysql中int(1)和int(10)的區(qū)別

    本文主要介紹了淺談mysql中int(1)和int(10)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

馆陶县| 晋中市| 邵阳县| 五家渠市| 湘乡市| 德昌县| 天水市| 高邑县| 德昌县| 昌都县| 台前县| 广宗县| 澄江县| 凤山县| 黄浦区| 平邑县| 大理市| 江城| 长乐市| 石门县| 秀山| 兰西县| 安新县| 曲麻莱县| 旅游| 元氏县| 夏河县| 寻乌县| 大港区| 东兴市| 亚东县| 安阳市| 枣强县| 淮南市| 阿合奇县| 华池县| 含山县| 乌鲁木齐县| 静海县| 永丰县| 浦北县|