服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL与PHP的基础与应用专题之数据完整性

MySQL与PHP的基础与应用专题之数据完整性

2022-09-26 15:36我是小白呀 Mysql

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,本系列将带你掌握php与mysql的基础应用,本篇从数据完整性开始

概述

从今天开始, 小白我将带领大家一起来补充一下 数据库的知识.

MySQL与PHP的基础与应用专题之数据完整性

 

数据完整性

数据完整性 (Data Integrity) 指存储在数据库 (Databse) 中的数据, 需要保证一致性和可靠性. 数据完整性可以防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作.

MySQL与PHP的基础与应用专题之数据完整性

数据完整性包括:

  • 实体完整性: 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);

?>

效果:

MySQL与PHP的基础与应用专题之数据完整性

 

外键

外键 (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);

?>

效果:

MySQL与PHP的基础与应用专题之数据完整性

 

插入数据

<?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 数据完整性内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://iamarookie.blog.csdn.net/article/details/122378093

延伸 · 阅读

精彩推荐
  • MysqlMySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决

    MySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决

    这篇文章主要介绍了MySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看...

    Magicer12072019-06-10
  • Mysqlmysql中如何去除小数点后面多余的0

    mysql中如何去除小数点后面多余的0

    这篇文章主要介绍了mysql 中去除小数点后面多余的0的方法 ,需要的朋友可以参考下 ...

    MYSQL教程网10592020-03-22
  • MysqlMySql服务未知原因消失解决方法

    MySql服务未知原因消失解决方法

    这篇文章主要介绍了MySql服务未知原因消失解决方法的相关资料,需要的朋友可以参考下...

    mysql教程网5252020-07-24
  • Mysql详解MySQL多版本并发控制机制(MVCC)源码

    详解MySQL多版本并发控制机制(MVCC)源码

    MVCC,即多版本并发控制(Multi-Version Concurrency Control)指的是,通过版本链维护一个数据的多个版本,使得读写操作没有冲突,可保证不同事务读写、写读操作...

    无毁的湖光-Al4702021-08-23
  • MysqlMySQL细数发生索引失效的情况

    MySQL细数发生索引失效的情况

    本文主要介绍了MySQL导致索引失效的几种情况,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    少年.4592022-07-13
  • MysqlMySql关于null的函数使用分享

    MySql关于null的函数使用分享

    这篇文章主要介绍了MySql中null的函数使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    东京易冷12172021-08-17
  • Mysql一步步教你MySQL查询优化分析教程

    一步步教你MySQL查询优化分析教程

    这篇文章主要给大家介绍了关于MySQL查询优化分析的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要...

    锐玩道4582020-12-14
  • MysqlMysql支持的数据类型(列类型总结)

    Mysql支持的数据类型(列类型总结)

    MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的...

    默默淡然2152020-07-05