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

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

1. 数据完整性的概念

数据完整性是指数据的准确性、合法性、一致性和有效性等方面。

在数据库中,可以通过设置约束条件来保证数据的完整性,包括以下几种类型的约束:

  • 主键约束
  • 外键约束
  • 唯一约束
  • 非空约束
  • 默认约束
  • 检查约束

2. 主键约束

主键是唯一标识一张表中某一行数据的字段或字段组合,主键的值必须唯一且不能为空。

创建主键的方式有两种:

  1. 在创建表的时候指定主键
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 在已存在的表中添加主键
ALTER TABLE `user` ADD PRIMARY KEY (`id`);

3. 外键约束

外键是关系型数据库中表与表之间关联的一种约束,用于保证数据的一致性。

在使用外键之前,必须先确保所关联的表已经存在主键。

创建外键的方式如下:

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

上述代码中,外键约束的名称为fk_user_id,关联的列是user_id,所关联的主键是user表中的id字段。

4. 唯一约束

唯一约束用于保证某个字段的值在表中必须唯一,可用于防止数据重复插入等情况。

创建唯一约束的方式如下:

  1. 在创建表的时候指定唯一约束
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL UNIQUE,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 在已存在的表中添加唯一约束
ALTER TABLE `user` ADD UNIQUE (`username`);

5. 非空约束

非空约束用于保证某个字段在插入数据时不能为空。

创建非空约束的方式如下:

  1. 在创建表的时候指定非空约束
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 在已存在的表中添加非空约束
ALTER TABLE `user` MODIFY `email` varchar(255) NOT NULL;

6. 默认约束

默认约束用于在插入数据时,如果该字段没有被赋值,则会自动赋予一个默认值。

创建默认约束的方式如下:

  1. 在创建表的时候指定默认约束
CREATE TABLE `book` (
  `isbn` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `price` float DEFAULT 0,
  PRIMARY KEY (`isbn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 在已存在的表中添加默认约束
ALTER TABLE `book` MODIFY `price` float DEFAULT 0;

7. 检查约束

检查约束用于保证某个字段的取值在插入数据时符合一定的条件。

创建检查约束的方式如下:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL CHECK (LENGTH(`username`) > 2),
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

上述代码中,检查约束用于保证username字段的长度大于2。

8. 示例说明

示例1:使用主键约束

假设要创建一个用户表,包含以下字段:

  • id:用户id,主键,自增长
  • username:用户名,唯一约束
  • password:用户密码

创建表的SQL语句如下:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL UNIQUE,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

示例2:使用外键约束

假设要创建一个订单表,包含以下字段:

  • id:订单id,主键,自增长
  • user_id:用户id,外键约束,关联用户表的id字段
  • product:产品名称

创建表的SQL语句如下:

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

在执行上述SQL语句后,当尝试向订单表中插入一个不存在于用户表中的用户id时,会导致插入失败,并且会抛出外键约束错误。这保证了订单表中的用户id一定是存在于用户表中的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL与PHP的基础与应用专题之数据完整性 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • VSCode下.json文件的编写之(1) linux/g++ (2).json中参数与预定义变量的意义解释

    下面是关于“VSCode下.json文件的编写之(1) linux/g++ (2).json中参数与预定义变量的意义解释”的完整攻略。 1. 简介 首先,我们应该知道,.json文件是一种轻量级的数据交换格式,可用于跨语言和跨平台传输数据,并且在VSCode中可以用来配置我们的编译环境。 在这个话题中,我们会讲解两个方面的内容:- (1) linux/g++…

    C 2023年5月23日
    00
  • QCY T1C真无线蓝牙耳机怎么样 QCY T1C真无线蓝牙耳机拆解介绍

    QCY T1C真无线蓝牙耳机怎么样? 简介 QCY T1C真无线蓝牙耳机是一款真无线蓝牙耳机,采用蓝牙 5.0 技术,漂亮的外观以及出色的音质,是市场上比较受欢迎的商品之一。 音质 QCY T1C 真无线蓝牙耳机采用了 6mm 真空负压动圈单元,有效实现了卓越的超低频效果。同时,这款耳机还支持 SBC 和 AAC 等高保真音质的编码格式,让你在使用过程中可以…

    C 2023年5月23日
    00
  • C语言代码 模块化实现三子棋

    C语言代码模块化实现三子棋攻略 1. 模块划分 三子棋游戏可以被划分为多个模块,每个模块负责实现一个特定的任务,如绘制游戏界面、接受用户输入、处理游戏逻辑等等。在划分模块时,我们应该遵循“单一原则”,也就是每个模块负责的任务应该尽量保持单一性,不要搞乱复杂性。 常见的三子棋游戏模块划分包括: main:主函数,初始化游戏、开始游戏、结束游戏 draw:绘制游…

    C 2023年5月22日
    00
  • C语言实现计算器的两种方法

    当下常见编程语言中,C语言是一种十分常用的语言。C语言可以用来开发各种类型的应用、系统和游戏,其中之一就是实现计算器。下面将结合两条示例来详细讲解“C语言实现计算器的两种方法”的完整攻略。 第一种方法:基于表达式求值的计算机实现 思路分析 在程序开发者社区中,基于表达式求值的方式是最广泛使用的方法之一。下面是一个实现“基于表达式求值的计算机”的思路: 读入表…

    C 2023年5月23日
    00
  • 如何在c语言下关闭socket

    关闭socket是确保网络通信中TCP连接正常终止的一项重要步骤。在C语言中,关闭socket的步骤非常简单,下面我将为大家提供一个完整的攻略。 步骤一:创建socket 首先,我们需要创建一个socket对象,用于在Windows或Linux中进行网络通信。在C语言中,可以使用socket()函数来创建socket对象。以下是一个示例: #include …

    C 2023年5月23日
    00
  • 电脑越来越卡怎么办 手写CCleaner电脑垃圾文件清理规则

    关于“电脑越来越卡怎么办”这个问题,我们可以通过手写CCleaner电脑垃圾文件清理规则来优化电脑性能。以下就是详细的攻略: 步骤一:下载和安装CCleaner 首先,我们需要从官方网站下载并安装CCleaner。下载链接:https://www.ccleaner.com/ccleaner/download 步骤二:运行CCleaner 安装完成后,我们可以…

    C 2023年5月23日
    00
  • Qt学习之容器类的使用教程详解

    Qt学习之容器类的使用教程详解 介绍 Qt框架提供了许多容器类来帮助开发者高效地管理数据集合。这些容器类提供了各种重载的方法和运算符来满足不同的需求。 本文将详细介绍Qt提供的常用容器类的使用方法和注意事项。 QVector 概述 QVector是Qt提供的动态数组容器类,可以在运行时根据需要自动扩展容量,并且可以方便地访问和修改其中的元素。 常用方法 QV…

    C 2023年5月23日
    00
  • C语言实现简易文本编辑器

    C语言实现简易文本编辑器攻略 1. 需求概述 本项目的目标是使用C语言实现一个简易的文本编辑器,能够实现以下基本功能: 读取文本文档并将其显示在屏幕上。 在文档中插入、删除字符及行。 将编辑后的文档保存至本地。 2. 设计思路 为了实现上述功能,我们考虑按照以下步骤执行: 读取文本文档并将其显示在屏幕上:使用C语言的文件操作方式读取文档内容,然后通过标准输出…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部