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日

相关文章

  • C语言程序设计

    第一章程序设计与C语言 1,机器语言属于第一代计算机语言,能直接识别和接受的二进制代码称为机器指令,用机器语言编写的程序程序称为目标程序,将高级语言编写的程序称为源程序,将源程序翻译成目标程序的程序称为编译程序。 2,软件危机:软件的正确性、开发成本、有错误而不能使用等。 3,对象是数据以及对数据进行简单的操作的封装体,程序设计语言的功能:数据表达和数据处理…

    C语言 2023年4月18日
    00
  • C语言中switch语句基本用法实例

    下面我将详细讲解C语言中switch语句的基本用法实例,内容将包括以下几部分: 什么是switch语句? switch语句的语法格式 switch语句实例解析 switch语句的优缺点 switch语句实例展示 1. 什么是switch语句? switch语句是C语言中的一种流程控制语句,它可以根据不同的情况执行不同的代码块。通常情况下,switch语句用于…

    C 2023年5月23日
    00
  • C语言实现简易的三子棋小游戏

    C语言实现简易的三子棋小游戏 概述 本文将讲解如何使用C语言编写一个简易的三子棋小游戏,涉及到的编程知识包括二维数组、循环结构、条件语句等基本概念。 实现步骤 1. 创建游戏棋盘 我们可以使用一个三行三列的二维数组来表示游戏的棋盘,初始化的时候将数组元素全部赋值为空格即可。 示例代码: char board[3][3] = { {‘ ‘, ‘ ‘, ‘ ‘}…

    C 2023年5月23日
    00
  • C++静态库与动态库文件的生成和使用教程

    以下是关于C++静态库与动态库文件的生成和使用教程的详细攻略。 什么是C++静态库和动态库? C++库文件是编写的代码的编译结果,可以用来在其他项目中共享代码。C++库文件可以分为静态库和动态库两种。 静态库(Static Library)是指在链接过程中,将库的代码和目标程序的代码一起组合成一个可执行程序。静态库编译后的文件后缀名通常为 .a (Unix)…

    C 2023年5月23日
    00
  • Python3 JSON 数据解析及日期和时间小结

    Python3 JSON 数据解析及日期和时间小结 JSON 数据解析 JSON 是什么? JSON(JavaScript Object Notation)是一种轻量级数据交换格式,通常用于客户端和服务器之间的数据交互。与 XML 不同,JSON 的语法简洁明了,易于读写和理解。 JSON 数据格式由两种数据结构组成: 键值对,以逗号分隔 大括号括起来的对象…

    C 2023年5月23日
    00
  • 理解函数指针和回调函数

    理解 函数指针 指向函数的指针。比如: 理解函数指针的伪代码 void (*p)(int type, char *data); // 定义一个函数指针p void func(int type, char *data); // 声明一个函数func p = func; // 将指针p指向函数func p(1,”test”); // 调用方式1 (*p)(1,”…

    C语言 2023年4月20日
    00
  • VC List Control控件如何删除选中的记录实例详解

    删除VC List Control控件中选中的记录的过程可以通过以下步骤实现: 获取选中的记录索引:可以通过List Control控件的GetNextItem函数来获取选中的记录索引。该函数的参数可以用来指定搜索的起始索引。因此,我们可以在循环中使用该函数来获取所有选中的记录索引。 示例代码: int nItem = -1; while ((nItem =…

    C 2023年5月23日
    00
  • MongoDB导出查询结果到文件例子

    MongoDB导出查询结果到文件主要有两种方式:使用mongoexport命令和使用db.collection.find().forEach()方法,下面分别进行讲解: 使用mongoexport命令导出查询结果到文件 语法: mongoexport -d <database_name> -c <collection_name> -q…

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