MySQL笔记-10 数据完整性约束

2023-05-16

文章目录

  • 1 定义完整性约束
    • 1.1 实体完整性
      • 1.1.1 主键约束
      • 1.1.2 候选键约束
    • 1.2 参照完整性
    • 1.3 用户定义完整性
      • 1.3.1 非空约束
      • 1.3.2 CHECK约束
        • 1.3.2.1 对列实施CHECK约束
        • 1.3.2.2 对表实施CHECK约束
  • 2 命名完整性约束
  • 3 更新完整性约束
    • 3.1 删除完整性约束
    • 3.2 修改完整性约束

数据完整性是指数据的正确性和相容性,是为了防止数据库中存在不符合语义的数据,即防止数据库中存在不正确的数据。在MySQL中提供了多种完整性约束,它们作为数据库关系模式定义的一部分,可以通过CREATE TABLE或ALTER TABLE语句来定义。一旦定义了完整性约束,MySQL服务器会随时检测处于更新状态的数据库内容是否符合相关的完整性约束,从而保证数据的一致性与正确性。这样,既能有效地防止对数据库的意外破坏,又能提高完整性检测的效率,还能减轻数据库编程人员的工作负担。

1 定义完整性约束

关系模型的完整性规则是对关系的某种约束条件。在关系模型中,提供了实体完整性、参照完整性和用户定义完整性3项规则。下面将分别介绍MySQL中对数据库完整性3项规则的设置和实现方式。

1.1 实体完整性

实体(Entity)
是一个数据对象,是指客观存在并可以相互区分的事物,如一个教师、一个学生或一个雇员等。一个实体在数据库中表现为表中的一条记录。通常情况下,它必须遵守实体完整性规则。
实体完整性规则(Entity Integrity Rule)
是指关系的主属性,即主码(主键)的组成不能为空,也就是关系的主属性不能是空值(NULL)。关系对应于现实世界中的实体集,而现实世界中的实体是可区分的,即说明每个实例具有唯一性标识。在关系模型中,是使用主码(主键)作为唯一性标识的,若假设主码(主键)取空值,则说明这个实体不可标识,即不可区分,这个假设显然不正确,与现实世界应用环境相矛盾,因此不能存在这样的无标识实体,从而在关系模型中引入实体完整性约束。

例如,学生关系(学号、姓名、性别)中,“学号”为主码(主键),则“学号”这个属性不能为空值,否则就违反了实体完整性规则。

在MySQL中,实体完整性是通过主键约束和候选键约束来实现的。

1.1.1 主键约束

主键可以是表中的某一列,也可以是表中多个列所构成的一个组合;其中,由多个列组合而成的主键也称为复合主键。在MySQL中,主键列必须遵守以下规则:

  1. 每一个表只能定义一个主键。
  2. 唯一性原则。主键的值,也称键值,必须能够唯一标识表中的每一行记录,且不能为NULL。也就是说一张表中两个不同的行在主键上不能具有相同的值。
  3. 最小化规则。复合主键不能包含不必要的多余列。也就是说,当从一个复合主键中删除一列后,如果剩下的列构成的主键仍能满足唯一性原则,那么这个复合主键是不正确的。
  4. 一个列名在复合主键的列表中只能出现一次。

在MySQL中,可以在CREATE TABLE或者ALTER TABLE语句中,使用PRIMARY KEY子句来创建主键约束,其实现方式有以下两种:

  • 1)作为列的完整性约束
    在表的某个列的属性定义时,加上PRIMARY KEY关键字实现。
create table tb_user(
id int auto_increment primary key,
user varchar(30) not null,
password varchar(30) not null,
createtime datetime);
  • 2)作为表的完整性约束
    在表的所有列的属性定义后,加上PRIMARY KEY(index_col_name,…)子句实现。
create table tb_student (
id int auto_increment,
name varchar(30) not null,
sex varchar(2),
classid int not null,
birthday date,
PRIMARY KEY (id,classid)
);

如果主键仅由表中的某一列所构成,那么以上两种方法均可以定义主键约束;如果主键由表中多个列所构成,那么只能用第二种方法定义主键约束。另外,定义主键约束后,MySQL会自动为主键创建一个唯一索引,默认名为PRIMARY,也可以修改为其他名称。

1.1.2 候选键约束

如果一个属性集能唯一标识元组,且又不含有多余的属性,那么这个属性集称为关系的候选键。例如,在包含学号、姓名、性别、年龄、院系、班级等列的“学生信息表”中,“学号”能够标识一名学生,因此,它可以作为候选键,而如果规定,不允许有同名的学生,那么姓名也可以作为候选键。

候选键可以是表中的某一列,也可以是表中多个列所构成的一个组合。任何时候,候选键的值必须是唯一的,且不能为空(NULL)。

候选键可以在CREATE TABLE或者ALTER TABLE语句中使用关键字UNIQUE来定义,其实现方法与主键约束类似,也是可作为列的完整性约束或者表的完整性约束两种方式。

在MySQL中,候选键与主键之间存在以下两点区别:

  • 一个表只能创建一个主键,但可以定义若干个候选键。
  • 定义主键约束时,系统会自动创建PRIMARY KEY索引,而定义候选键约束时,系统会自动创建UNIQUE索引。
create table tb_user1(
id int auto_increment UNIQUE,
user varchar(30) not null UNIQUE,
password varchar(30) not null,
createtime TIMESTAMP default CURRENT_TIMESTAMP);

1.2 参照完整性

现实世界中的实体之间往往存在着某种联系,在关系模型中,实体及实体间的联系都是用关系来描述的,那么自然就存在着关系与关系间的引用。

例如,学生实体和班级实体可以分别用下面的关系表示,其中,主码(主键)用下划线标识。

  • 学生(++学生证号++,姓名,性别,生日,班级编号,备注)
  • 班级(++班级编号++,班级名称,备注)

在这两个关系之间存在着属性的引用,即“学生”关系引用了“班级”关系中的主码(主键)“班级编号”。在两个实体间,“班级编号”是“班级”关系的主码(主键),也是“学生”关系的外部码(外键)。

显然,“学生”关系中的“班级编号”的值必须是确实存在的班级的“班级编号”,即“班级”关系中的该班级的记录。也就是说,“学生”关系中某个属性的取值需要参照“班级”关系的属性和值。

参照完整性规则(Referential Integrity Rule)
就是定义外码(外键)和主码(主键)之间的引用规则,它是对关系间引用数据的一种限制。
参照完整性的定义为:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应,则对于R中每个元组在F上的值只允许两种可能,即要么取空值(F的每个属性值均为空值),要么等于S中某个元组的主码值。其中,关系R与S可以是不同的关系,也可以是同一关系,而F与K是定义在同一个域中。

例如,在“学生”关系中每个学生的“班级编号”一项,要么取空值,表示该学生还没有分配班级;要么取值必须与“班级”关系中的某个元组的“班级编号”相同,表示这个学生分配到某个班级学习。这就是参照完整性。

如果“学生”关系中,某个学生的“班级编号”取值不能与“班级”关系中任何一个元组的“班级编号”值相同,表示这个学生被分配到不属于所在学校的班级学习,这与实际应用环境不相符,显然是错误的,这就需要在关系模型中定义参照完整性进行约束。

与实体完整性一样,参照完整性也是由系统自动支持的,即在建立关系(表)时,只要定义了“谁是主码”“谁参照于认证”,系统将自动进行此类完整性的检查。

在MySQL中,参照完整性可以通过在创建表(CREATE TABLE)或者修改表(ALTER TABLE)时定义一个外键声明来实现。

MySQL有两种常用的引擎类型(MyISAM和InnoDB),目前,只有InnoDB引擎类型支持外键约束。InnoDB引擎类型中声明外键的基本语法格式如下:

[CONSTRAINT [SYMBOL]]
FOREIGN KEY (index_col_name,…) reference_definition

reference_definition主要用于定义外键所参照的表、列、参照动作的声明和实施策略等4部分内容。它的基本语法格式如下:

REFERENCES tbl_name [(index_col_name,…)]
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]

index_col_name的语法格式如下:

col_name [(length)] [ASC | DESC]

reference_option的语法格式如下:

RESTRICT | CASCADE | SET NULL | NO ACTION

参数说明如下:

  1. index_col_name:用于指定被设置为外键的列。
  2. tbl_name:用于指定外键所参照的表名。这个表称为参照表(或父表),而外键所在的表称作参照表(或子表)
  3. col_name:用于指定被参照的列名。外键可以引用被参照表中的主键或候选键,也可以引用被参照表中某些列的一个组合,但这个组合不能是被参照表中随机的一组列,必须保存该组合的取值在被参照表中是唯一的。外键中的所有列值在被参照表的列中必须全部存在,也就是通过外键来对参照表某些列(外键)的取值进行限定与约束。
  4. ON DELETE | ON UPDATE:指定参照动作相关的SQL语句。可为每个外键指定对应于DELETE语句和UPDATE语句的参照动作。
  5. reference_option:指定参照完整性约束的实现策略。其中,当没有明确指定参照完整性的实现策略时,两个参照动作会默认使用RESTRICT。

具体的策略可选值如下:

可选值说明
RESTRICT限制策略:当要删除或更新被参照表中被参照列上,并在外键中出现的值时,系统拒绝对被参照表的删除或更新操作
CASCADE级联策略:从被参照表中删除或更新记录行时,自动删除或更新参照表匹配的记录行
SET NULL置空策略:当从被参照表中删除或更新记录行时,设置参照表中与之对应的外键列的值为NULL。这个策略需要被参照表中的外键列没有声明限定词NOT NULL
NO ACTION不采取实施策略:当一个相关的外键值在被参照表中时,删除或更新被参照表中键值的动作不被允许。该策略的动作语音与RESTRICT相同

示例:

create table tb_student1 (
id int auto_increment,
name varchar(30) not null,
sex varchar(2),
classid int not null,
birthday date,
remark varchar(100),
primary key (id),FOREIGN KEY (classid) REFERENCES tb_class(id) ON DELETE RESTRICTON UPDATE RESTRICT
);

要设置为主外键关系的两张数据表必须具有相同的存储引擎,如都是InnoDB,并且相关联的两个字段的类型必须一致。
设置外键时,通常需要遵守以下规则:

  1. 被参照表必须是已经存在的,或者是当前正在创建的表。如果是当前正在创建的表,也就是说,被参照表与参照表是同一个表,这样的表称为自参照表(Self-referencing Table),这种结构称为自参照完整性(Self-referential Integrity)。
  2. 必须为被参照表定义主键。
  3. 必须在被参照表名后面指定列名或列名的组合。这个列或列组合必须是这个被参照表的主键或候选键。
  4. 外键中列的数目必须和被参照表中的列的数据相同。
  5. 外键中列的数据类型必须和被参照表的主键(或候选键)中的对应列的数据类型相同。
  6. 尽管主键是不能够包含空值的,但允许在外键中出现一个空值。这意味着,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

1.3 用户定义完整性

用户定义完整性规则(User-defined Integrity Rule)是针对某一应用环境的完整性约束条件,它反映了某一具体应用所涉及的数据应满足的要求。关系模型提供定义和检验这类完整性规则的机制,其目的是由系统来统一处理,而不再由应用程序来完成这项工作。

在实际系统中,这类完整性规则一般是在建立数据表的同时进行定义,应用编程人员不需要再做考虑,如果某些约束条件没有建立在库表一级,则应用编程人员应在各模块的具体编程中通过程序进行检查和控制。

MySQL支持非空约束、CHECK约束和触发器3种用户自定义完整性约束。其中,触发器将在后续章节进行详细介绍。这里主要介绍非空约束和CHECK约束。

1.3.1 非空约束

在MySQL中,非空约束可以通过在CREATE TABLE或ALTER TABLE语句中,某个列定义后面加上关键字NOT NULL来定义,用来约束该列的取值不能为空。

CREATE TABLE tb_class1 (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(45) NOT NULL,
remark varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
);

1.3.2 CHECK约束

与非空约束一样,CHECK约束也可以通过在CREATE TABLE或ALTER TABLE语句中,根据用户的实际完整性要求来定义。它可以分别对列或表实施CHECK约束,其中使用的语法如下:

CHECK(expr)

其中,expr是一个SQL表达式,用于指定需要检查的限定条件。在更新表数据时,MySQL会检查更新后的数据行是否满足CHECK约束中的限定条件。该限定条件可以是简单的表达式,也可以是复杂的表达式(如子查询)。

1.3.2.1 对列实施CHECK约束

将CHECK子句置于表的某个列的定义之后就是对列实施CHECK约束。

create table tb_student2 (
id int auto_increment,
name varchar(30) not null,
sex varchar(2),
age int not null CHECK(age>6 and age<18),
remark varchar(100),
primary key (id)
);

MySQL8.0.16版本之前只是对CHECK约束进行了分析处理,但会被直接忽略,并不会报错。8.0.16版本及之后的版本才生效。

1.3.2.2 对表实施CHECK约束

将CHECK子句置于表中所有列的定义以及主键约束和外键定义之后就是对表实施CHECK约束。

create table tb_student3 (
id int auto_increment,
name varchar(30) not null,
sex varchar(2),
classid int not null,
birthday date,
remark varchar(100),
primary key (id),
CHECK(classid IN (SELECT id FROM tb_class))
);

2 命名完整性约束

在MySQL中,也可以对完整性约束进行添加、修改和删除等操作。其中,为了删除和修改完整性约束,需要在定义约束的同时对其进行命名。命名完整性约束的方式是在各种完整性约束的定义说明之前加上CONSTRAINT子句实现的。CONSTRAINT子句的语法格式如下:

CONSTRAINT <symbol>
[PRIMAR KEY 短语 |FOREIGN KEY 短语 |CHECK 短语]

参数说明如下。

  1. symbol:用于指定约束名称。这个名字是在完整性约束说明的前面被定义,在数据库里必须是唯一的。如果在创建时没有指定约束的名字,则MySQL将自动创建一个约束名字。
  2. PRIMAR KEY短语:主键约束。
  3. FOREIGN KEY短语:参照完整性约束。
  4. CHECK短语:CHECK约束。
create table tb_student1a (
id int auto_increment PRIMARY KEY,
name varchar(30) not null,
sex varchar(2),
classid int not null,
birthday date,
remark varchar(100),CONSTRAINT fk_classid FOREIGN KEY (classid)
REFERENCES tb_class(id)
ON DELETE RESTRICT
ON UPDATE RESTRICT
);

在定义完整性约束时,应该尽可能为其指定名字,以便在需要对完整性约束进行修改或删除时,可以很容易地找到它们。

只能给基于表的完整性约束指定名字,无法给基于列的完整性约束指定名字。

3 更新完整性约束

对各种约束命名后,就可以使用ALTER TABLE语句来更新或删除与列或表有关的各种约束。

3.1 删除完整性约束

在MySQL中,使用ALTER TABLE语句,可以独立地删除完整性约束,而不会删除表本身。如果使用DROP TABLE语句删除一个表,那么这个表中的所有完整性约束也会自动被删除。删除完整性约束需要在ALTER TABLE语句中使用DROP关键字来实现,具体的语法格式如下:

DROP [FOREIGN KEY| INDEX| <symbol>] |[PRIMARY KEY]

参数说明如下:

  1. FOREIGN KEY:用于删除外键约束。
  2. PRIMARY KEY:用于删除主键约束。需要注意的是,在删除主键时,必须再创建一个主键,否则不能删除成功。
  3. INDEX:用于删除候选键约束。
  4. symbol:要删除的约束名称。

示例:

ALTER TABLE tb_student1a DROP FOREIGN KEY fk_classid;

3.2 修改完整性约束

在MySQL中,完整性约束不能直接被修改,若要修改只能使用ALTER TABLE语句先删除除该约束,然后再增加一个与该约束同名的新约束。删除完整性约束的语法在3.1节已经介绍了,这里只给出在ALTER TABLE语句中添加完整性约束的语法格式,具体语法格式如下:

ADD CONSTRAINT <symbol> 各种约束

参数说明如下:

  1. symbol:为要添加的约束指定一个名称。
  2. 各种约束:定义各种约束的语句,具体内容请参见13.1和13.2节介绍的各种约束的添加语法。

示例:

ALTER TABLE tb_student1a DROP FOREIGN KEY fk_classid;
ALTER TABLE tb_student1a ADD CONSTRAINT fk_classid FOREIGN KEY (classid) REFERENCES tb_class(id) ON DELETE CASCADE ON UPDATE CASCADE;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL笔记-10 数据完整性约束 的相关文章

  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • Laravel 读写连接不同步

    我在 Laravel 5 2 应用程序中使用读写 MySQL 连接设置 mysql gt write gt host gt env DB HOST WRITE localhost read gt host gt env DB HOST RE
  • mysql 查询选择当月的所有行?

    我有一个名为 startdate 的日期时间类型的列 我必须获取当前月份的开始日期和结束日期之间的所有行 即从 1 11 2014 到 30 11 2014 select from your table where year curdate
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p
  • 选择列表;这与我的 sql 中的 DISTINCT 不兼容

    CREATE DEFINER root localhost PROCEDURE GetAllEventIdList SP in skillId varchar 50 in offsetvalue int in recordlimit int
  • Mysql UUID_SHORT() 与 UUID() 相当吗

    如果您愿意的话 请快速提出问题或意见 我需要为数据库表生成一些 UUID 自动递增密钥不会减少它 因为我还需要密钥在数据库和系统中保持唯一 UUID 工作正常 但其输出对于行将导出到的某些系统来说太长 UUID SHORT 做得很好 我已经
  • mysqli_num_rows 无法正常工作

    I have an admin panel in my website in which the admin creates new pages he provides the page name and then the spaces o
  • 使用 libpqxx 批量存储数据或如何在 libpqxx 中使用 COPY 语句

    要在 PostgreSQL 中插入批量数据 填充数据库 最快的方法是使用 COPY Source https stackoverflow com questions 758945 whats the fastest way to do a
  • 如何在 kubernetes 上使多个 pod 相互通信

    我是 Kubernetes 新手 我正在尝试通过 microk8s 将应用程序部署到 Kubernetes 该应用程序包含Python Flask后端 Angular前端 Redis和MySQL数据库 我将映像部署在多个 Pod 中 状态显
  • Laravel - 重复键批量插入更新大数据集

    我有大约 80k 条记录 每天需要多次运行插入 更新脚本 INSERT INTO my rankings id rank VALUES 1 100 2 99 3 102 80000 3 ON DUPLICATE KEY UPDATE ran
  • 性能 多次插入或多值单次插入

    从性能角度 时间和服务器负载 来看 最好是进行多个插入或单个插入多个值 我在 stackoverflow 上发现每次插入最多可以有 1000 个值集 我说的是两种情况 要插入大约 1000 3000 个值 有时我会在 mySQL 数据库中插
  • 有什么办法可以自动生成UML图吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 MySQL 数据库 我想生成它的关系图 有没有一个工具可以连接到数据库并自动为我生成它 是的
  • JPA:如何将字符串持久保存到数据库字段中,输入 MYSQL Text

    需求是用户可以写文章 所以我选择typeText为了contentmysql数据库内的字段 我怎样才能转换Java String into MySQL Text 干得好Jim Tough Entity public class Articl
  • MySQL Amazon RDS:超出锁定等待超时

    在 Mysql Amazon RDS 上 当我尝试运行以下 SQL 查询时 UPDATE table1 INNER JOIN table2 USING CommonColumn SET table1 col1 table2 x table1
  • 导轨中的多个 DB 连接

    我正在尝试在 ROR 应用程序中连接多个数据库 我的 database yml 如下所示 在你的database yml文件中 发展 adapter mysql username root password database example
  • MySQL - 使用可变路径加载数据文件

    我在设置用于将数据放入表中的变量路径时遇到问题 这就是我构建路径的方式 SET path1 CONCAT C Projekte Metrics DXL CSV EXPORT DATA YEAR NOW MONTH NOW DAY NOW B
  • MySQL JDBC 连接上的故障转移?

    我正在尝试确定如何使用 MySQL JDBC 驱动程序实现高可用性解决方案 似乎有一个我可以设置的故障转移属性 但我想知道当使用 MySQL 和 JDBC 实现简单的故障转移机制时 人们倾向于使用什么 我们计划将 2 个前端 Tomcat
  • MySQL 匹配全文

    我正在尝试使用 mysql 进行全文搜索以匹配字符串 问题是它首先返回奇怪的结果 例如 字符串 passat 2 0 tdi AND MATCH records veiculos titulo records veiculos descri
  • 如何准备更新查询语句? [复制]

    这个问题在这里已经有答案了 我有一个 mysqli 查询 代码如下 db usag gt query UPDATE Applicant SET phone number phone number street name street nam

随机推荐

  • Windows如何查看.db数据库文件

    从android应用导出的 db文件 xff0c 想在Windows电脑端看 xff0c 可以用SQLite Expert Professional这个软件查看 xff0c 网上说用FireFox的插件sqlite manager xff0
  • Ubuntu工具-01 UEX

    UltraEdit是Windows旗下一款流行的老牌文本 HEX编辑器 xff08 非开源 xff09 UltraEdit正被移植到Linux平台 该移植名为UEX xff0c 意即UltraEdit for Linux UltraEdit
  • Ubuntu工具-2 OBS Studio

    文章目录 1 下载并安装1 1 Flathub安装1 2 Snap安装1 3 PPA源方式安装1 3 1 检查OpenGL版本 xff0c 其版本必须高于 96 3 3 96 1 3 2 安装虚拟摄像机驱动1 3 3 安装ffmpeg库1
  • Docker build创建指定容器镜像

    Docker build xff1a Build an image from a Dockerfile 按照Dockerfile文件所定义内容创建临时性容器 xff0c 把Docker中所定义的每行命令在临时容器中执行 xff0c 然后生成
  • Ubuntu工具-03 VLC

    文章目录 1 安装VLC Media Player的方法1 1 apt安装1 2 snap安装 xff08 未测试 xff09 2 启动VLC Media Player并设置为默认媒体播放器 VLC Media Player xff08 V
  • MySQL笔记-07 常用函数

    文章目录 1 数学函数1 1 ABS1 2 CEIL和CEILIN1 3 FLOOR1 4 MOD1 5 ROUND1 6 TRUNCATE 2 字符串函数2 1 CONCAT2 2 CONCAT WS2 3 INSERT2 4 LOWER
  • SpringMVC-01 Web基础介绍

    文章目录 1 CGI1 1 CGI原理1 2 输入 出1 3 环境变量1 3 1 与请求相关的环境变量1 3 2 与服务器相关的环境变量1 3 3 与客户端相关的环境变量1 3 4 详细说明1 3 4 1 REQUEST METHOD 1
  • SpringMVC-02 MVC模式介绍

    文章目录 1 Java Web开发模型2 JSP 43 JavaBean开发模型 xff08 model1 xff09 3 MVC开发模式 xff08 model2 xff09 3 1 MVC模式基础3 1 1 模型 视图 控制器各部分的作
  • 系统架构师-科目1考点

  • 系统架构师-科目2考点

  • 系统架构师-科目3考点

  • Hive笔记-01 架构概述

    文章目录 1 概述2 Metadata Metastore的作用3 Metastore三种配置方式3 1 Hive配置参数说明3 1 1 基本配置参数3 1 2 其他配置参数 3 2 内嵌模式 xff08 Embedded xff09 3
  • Hadoop笔记-01概述

    文章目录 1 什么是大数据 xff1f 1 1 大数据计算模式及代表产品1 2 云计算与物联网1 2 1 云计算1 2 1 1 虚拟化1 2 1 2 分布式存储1 2 1 3 分布式计算1 2 1 4 多租户 1 3 物联网1 3 1 识别
  • Hadoop笔记-02 安装

    文章目录 1 VBOX安装CentOS71 1 安装VBOX软件1 2 下载CentOS7镜像文件1 3 初始化VBOX虚拟盘1 4 CentOS7网络配置1 5 CentOS7 yum源配置1 6 CentOS7 一般配置1 6 1关闭防
  • ffmpeg播放器实现详解 - 视频同步控制

    1 时间戳 时间戳的概念贯穿音视频开发始终 xff0c 重要性不言而喻 时间戳告诉我们在什么时候 xff0c 用多快的速度去播哪一帧 xff0c 其中 xff0c DTS decoding timestamp 告诉我们何时解码 xff0c
  • Ubuntu22.04 安装深度微信报错 依赖: libsasl2-2 (>= 2.1.27.1)

    现象 xff1a span class token punctuation span base span class token punctuation span pang 64 pang HP span class token funct
  • Ubuntu22.04更新后 点击深度微信无反应

    系统版本 xff1a Ubuntu 22 04 jammy内核 xff1a x86 64 Linux 5 15 0 53 genericdeepin wine6 stable 版本 xff1a 6 0 0 41 1 深度微信图标点击后 xf
  • MySQL笔记-08 索引

    文章目录 1 索引概述1 1 MySQL索引分类1 1 1 普通索引1 1 2 唯一性索引1 1 3 全文索引1 1 4 单列索引1 1 5 多列索引1 1 6 空间索引 2 创建索引2 1 在建立数据表时创建索引2 1 1 普通索引创建2
  • MySQL笔记-09 视图

    文章目录 1 视图概念1 1 概念1 2 作用 2 创建视图2 1 查看创建视图的权限2 2 创建视图的步骤2 3 创建视图的注意事项 3 视图操作3 1 查看视图3 1 1 DESCRIBE语句3 1 2 SHOW TABLE STATU
  • MySQL笔记-10 数据完整性约束

    文章目录 1 定义完整性约束1 1 实体完整性1 1 1 主键约束1 1 2 候选键约束 1 2 参照完整性1 3 用户定义完整性1 3 1 非空约束1 3 2 CHECK约束1 3 2 1 对列实施CHECK约束1 3 2 2 对表实施C