4. MySQL 约束

文章目录

  • 【 1. 主键约束 PRIMARY KEY 】
    • 1.1 在创建表时设置主键约束
      • 设置单字段主键
      • 在创建表时设置联合主键
    • 1.2 在修改表时添加主键约束
    • 1.3 删除主键约束
    • 1.4 主键自增长 AUTO_INCREMENT
      • 指定自增字段初始值
      • 自增字段不连续
  • 【 2. 外键约束 FOREIGN KEY 】
    • 2.1 在创建表时设置外键约束
    • 2.2 在修改表时设置外键约束
    • 2.3 删除外键约束
  • 【 3. 唯一约束 UNIQUE KEY 】
    • 3.1 在创建表时设置唯一约束
    • 3.2 在修改表时添加唯一约束
    • 3.3 删除唯一约束
  • 【 4. 检查约束 CHECK 】
    • 4.1 选取设置检查约束的字段
    • 4.2 在创建表时设置检查约束
    • 4.3 在修改表时添加检查约束
    • 4.4 删除检查约束
  • 【 5. 默认值约束 Default 】
    • 5.1 在创建表时设置默认值约束
    • 5.2 在修改表时添加默认值约束
    • 5.3 删除默认值约束
  • 【 6. 非空约束 NOT NULL 】
    • 6.1 在创建表时设置非空约束
    • 6.2 在修改表时添加非空约束
    • 6.3 删除非空约束
  • 【 7. 查看表中的约束 】

  • 在 MySQL 中, 约束 是指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。

例如,在数据表中存放年龄的值时,如果存入 200、300 这些无效的值就毫无意义了。因此,使用约束来限定表中的数据范围是很有必要的。

【 1. 主键约束 PRIMARY KEY 】

  • 主键(PRIMARY KEY) 的完整称呼是 主键约束,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。
  • 每个表只能定义一个主键 ,其它约束可以有多个。
  • 唯一性原则 :主键字段的值在表中必须是唯一的,不存在重复的情况,且不能为 NULL。即 设置成主键约束的字段的值中不可能存在有相同主键值的数据,且不能为NULL ;否则,无法设置主键约束。
  • 主键分为单字段主键和多字段联合主键。在创建数据表时设置主键约束,既可以为表中的一个字段设置 单字段主键 ,也可以为表中多个字段设置 联合主键

1.1 在创建表时设置主键约束

设置单字段主键

  • 在 CREATE TABLE 语句中,通过 在字段后面加 PRIMARY KEY 关键字来指定主键 。基本语法:
<字段名> <数据类型> PRIMARY KEY [默认值]
  • 实例
    在 test_db 数据库中创建 tb_emp3 数据表,其主键为 id
    CREATE TABLE tb_emp3
    (
    id INT(11) PRIMARY KEY,
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT
    );
    在这里插入图片描述
  • 也可以在定义完所有字段之后指定主键,语法格式如下:
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
  • 实例
    在数据库中创建 tb_emp4 数据表,其主键为 id。
    CREATE TABLE tb_emp4
    (
    id INT(11),
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT,
    PRIMARY KEY(id)
    );
    在这里插入图片描述

在创建表时设置联合主键

  • 联合主键 就是这个主键是由一张表中多个字段组成的约束,是指使用 表中的两个或更多字段的组合来共同作为主键,以此来唯一标识表中的记录 。当单个字段无法唯一标识表中的每一行数据,或者业务逻辑需要多个字段的组合来定义唯一性时,就会使用联合主键。
  • 最小化原则 :联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。
  • 比如,设置学生选课数据表时,使用学生编号做主键还是用课程编号做主键呢?如果用学生编号做主键,那么一个学生就只能选择一门课程。如果用课程编号做主键,那么一门课程只能有一个学生来选。显然,这两种情况都是不符合实际情况的。
  • 实际上设计学生选课表,要限定的是一个学生只能选择同一课程一次。因此,学生编号和课程编号可以放在一起共同作为主键,这也就是联合主键了。
  • 基本语法
    • 一个字段名只能在联合主键字段表中出现一次
    • 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
PRIMARY KEY [字段1,字段2,…,字段n]
  • 实例
    创建数据表 tb_emp5,假设表中没有主键 id,为了唯一确定一个员工,可以把 name、deptId 联合起来作为主键。
    CREATE TABLE tb_emp5
    (
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT,
    PRIMARY KEY(name,deptId)
    );
    在这里插入图片描述

1.2 在修改表时添加主键约束

  • 基本语法
ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);
  • 实例
    修改数据表 student,将字段 id 设置为主键。
    ALTER TABLE student ADD PRIMARY KEY(id);
    在这里插入图片描述

1.3 删除主键约束

  • 由于主键约束在一个表中只能有一个,因此不需要指定主键名就可以删除一个表中的主键约束。
    基本语法:
ALTER TABLE <数据表名> DROP PRIMARY KEY;
  • 实例
    删除 student 表中的主键约束。
    ALTER TABLE student DROP PRIMARY KEY;
    在这里插入图片描述

1.4 主键自增长 AUTO_INCREMENT

  • 在 MySQL 中,当主键定义为 自增长 后,这个主键的值就不再需要用户输入数据了,而是由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
    通过给字段添加 AUTO_INCREMENT 属性来实现主键自增长,基本语法
    • 默认情况下,AUTO_INCREMENT 的 初始值是 1,每 新增一条记录,字段值自动加 1。因此,这个字段不可能出现相同的值。
    • 一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
    • AUTO_INCREMENT 约束的字段必须具备 非空 NOT NULL 属性
    • AUTO_INCREMENT 约束的字段 只能是整数类型 (TINYINT、SMALLINT、INT、BIGINT 等)。
    • AUTO_INCREMENT 约束字段的 最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。
字段名 数据类型 AUTO_INCREMENT
  • 实例
    1. 创建名为 tb_student 的数据表。其中,id 为主键,每插入一条新记录,id 的值就会在前一条记录的基础上自动加 1。name 为非空字段,该字段的值不能为空值(NULL)。
      CREATE TABLE tb_student(
      id INT(4) PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(25) NOT NULL
      );
    2. 向 tb_student 表中插入数据。
      INSERT INTO tb_student(name,id) VALUES('Java',NULL);
      INSERT INTO tb_student(name,id) VALUES('Python',NULL);
      INSERT INTO tb_student(name,id) VALUES('SQL',NULL);
    3. 查看表。
      SELECT * FROM tb_student;
      在这里插入图片描述

指定自增字段初始值

  • 如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。
    例如,如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加。
  • 实例
    1. 创建表 tb_student2,指定主键从 100 开始自增长。
      CREATE TABLE tb_student2 (
      id INT NOT NULL AUTO_INCREMENT,
      name VARCHAR(20) NOT NULL,
      PRIMARY KEY(ID)
      )AUTO_INCREMENT=100;
    2. 向 tb_student2 表中插入数据。
      INSERT INTO tb_student2 (name)VALUES('Java');
      INSERT INTO tb_student2 (name)VALUES('Python');
    3. 使用 SELECT 命令查询表中记录
      SELECT * FROM tb_student2;
      在这里插入图片描述

自增字段不连续

  • 当唯一键冲突是,再插入新的数据时自增字段会不连续。
  • 实例
    1. 创建表 tb_student3,其中 id 是自增主键字段,name 是唯一索引。
      CREATE TABLE tb_student3(
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(20) UNIQUE KEY,
      age INT DEFAULT NULL
      );
    2. 向 tb_student3 表中插入数据。
      INSERT INTO tb_student3 VALUES(1,1,1);
    3. 此时,表 tb_student3 中已经有了(1,1,1)这条记录,这时再执行一条插入数据命令会报错。
      这是由于表中已经存在 name=1 的记录,所以报 Duplicate key error(唯一键冲突)。
      INSERT INTO tb_student3 VALUES(null,1,1);
    4. 在这之后,再插入新的数据时,自增 id 就是 3,这样就出现了自增字段值不连续的情况。
      INSERT INTO tb_student3 VALUES(null,2,66);
    5. 查看结果
      SELECT * FROM tb_student3;
      在这里插入图片描述

【 2. 外键约束 FOREIGN KEY 】

  • MySQL 外键约束(FOREIGN KEY) 是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是 主表(父表) ,外键所在的表就是 从表(子表)外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性
    比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。
  • 定义外键时,需要遵守下列规则:
    • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果主表当前正在创建,则主表与从表是同一个表,这样的表称为 自参照表 ,这种结构称为 自参照完整性
    • 必须为主表定义主键
    • 一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值
    • 在主表的表名后面指定列名或列名的组合,这个列或列的组合必须是主表的主键或候选键。
    • 从表的外键关联的必须是主表的主键,外键中列的数目、列的数据类型必须和主表主键相同
      例如,两者都是 INT 类型,或者都是 CHAR 类型。如果不满足这样的要求,在创建从表时,就会出现“ERROR 1005(HY000): Can’t create table”错误。
  • 主表删除某条记录时,从表中与之对应的记录也必须有相应的改变

2.1 在创建表时设置外键约束

  • 基本语法:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
  • 实例
    1. 创建1个数据表 tb_dept1,并在 tb_dept1 的 id 字段上创建主键约束。
      CREATE TABLE tb_dept1
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(22) NOT NULL,
      location VARCHAR(50)
      );
    2. 创建数据表 tb_emp6,并在表 tb_emp6 上创建外键约束,让它的键 deptId 作为外键关联到表 tb_dept1 的主键 id。
      CREATE TABLE tb_emp6
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(25),
      deptId INT(11),
      salary FLOAT,
      CONSTRAINT fk_emp_dept1
      FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
      );
      在这里插入图片描述

2.2 在修改表时设置外键约束

  • 外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须全部来源于主键列或者是为空没有数据,不过为空的数据跟与之相关联的表就没有关系了,一般不采用 。
    基本语法:
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
  • 实例
    修改数据表 tb_emp3,将字段 deptId 设置为外键,与数据表 tb_dept1 的主键 id 进行关联。
    ALTER TABLE tb_emp3
    ADD CONSTRAINT fk_tb_dept1_2
    FOREIGN KEY(deptId)
    REFERENCES tb_dept1(id);
    在这里插入图片描述

2.3 删除外键约束

  • 基本语法
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
  • 实例
    删除数据表 tb_emp3 中的外键约束 fk_tb_dept1_2。
    ALTER TABLE tb_emp3 DROP FOREIGN KEY fk_tb_dept1_2;
    在这里插入图片描述

【 3. 唯一约束 UNIQUE KEY 】

  • MySQL 唯一约束(Unique Key) 是指 所有记录中字段的值不能重复出现
    例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中另一条记录的 id 值就不能为‘0001’。
  • 唯一约束与主键约束相似的是它们都可以 确保列的唯一性 。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值
    比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。

3.1 在创建表时设置唯一约束

  • 唯一约束可以在创建表时直接设置,通常设置在除了主键以外的其它列上。基本语法:
    • 在定义完列之后直接使用 UNIQUE 关键字指定唯一约束。
<字段名> <数据类型> UNIQUE
  • 实例
    创建数据表 tb_dept2,指定部门的名称唯一。
    CREATE TABLE tb_dept2
    (
    id INT(11) PRIMARY KEY,
    name VARCHAR(22) UNIQUE,
    location VARCHAR(50)
    );
    在这里插入图片描述

3.2 在修改表时添加唯一约束

  • 基本语法
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
  • 实例
    ALTER TABLE tb_dept1 ADD CONSTRAINT unique_name UNIQUE(name);
    在这里插入图片描述

3.3 删除唯一约束

  • 基本语法
ALTER TABLE <表名> DROP INDEX <唯一约束名>;
  • 实例
    ALTER TABLE tb_dept1 DROP INDEX unique_name;
    在这里插入图片描述

【 4. 检查约束 CHECK 】

  • MySQL 检查约束(CHECK) 是用来 检查数据表中字段值有效性 的一种手段,设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。

4.1 选取设置检查约束的字段

  • 在更新表数据的时候,系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件。MySQL 可以使用简单的表达式来实现 CHECK 约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询。
  • 基本语法
    • “表达式”指的就是 SQL 表达式,用于指定需要检查的限定条件。
CHECK <表达式>
  • 若将 CHECK 约束子句置于表中某个列的定义之后,则这种约束也称为 基于列的 CHECK 约束
  • 若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为 基于表的 CHECK 约束 。该约束可以同时对表中多个列设置限定条件。

4.2 在创建表时设置检查约束

  • 在创建表时就可以为字段设置检查约束。
    基本语法:
CHECK(<检查约束>)
  • 实例
    创建 tb_emp7 数据表,要求 salary 字段值大于 0 且小于 10000。
    CREATE TABLE tb_emp7
    (
    id INT(11) PRIMARY KEY,
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT,
    CHECK(salary>0 AND salary<100),
    FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    );
    在这里插入图片描述

4.3 在修改表时添加检查约束

  • 如果一个表创建完成,可以通过修改表的方式为表添加检查约束。
    基本语法:
ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
  • 实例
    修改 tb_emp7 数据表,要求 id 字段值大于 0。
    ALTER TABLE tb_emp7
    ADD CONSTRAINT check_id
    CHECK(id>0);
    在这里插入图片描述

4.4 删除检查约束

  • 基本语法
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;
  • 实例
    删除 tb_emp7 表中的 check_id 检查约束。
    ALTER TABLE tb_emp7
    DROP CONSTRAINT check_id;
    在这里插入图片描述

【 5. 默认值约束 Default 】

  • 默认值(Default)的完整称呼是 默认值约束(Default Constraint) ,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。

5.1 在创建表时设置默认值约束

  • 基本语法
    • 其中,“默认值” 为该字段设置的默认值,如果是字符类型的,要用单引号括起来。
    • 在创建表时为列添加默认值,可以一次为多个列添加默认值,需要注意不同列的数据类型。
<字段名> <数据类型> DEFAULT <默认值>;
  • 实例
    创建数据表 tb_dept3,指定部门位置默认为 Beijing,新插入的记录如果没有指定部门位置,则默认都为 Beijing。
    CREATE TABLE tb_dept3
    (
    id INT(11) PRIMARY KEY,
    name VARCHAR(22),
    location VARCHAR(50) DEFAULT 'Beijing'
    );
    在这里插入图片描述

5.2 在修改表时添加默认值约束

  • 基本语法
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;
  • 实例
    修改数据表 tb_dept3,将部门位置的默认值修改为 Shanghai。
    ALTER TABLE tb_dept3
    CHANGE COLUMN location
    location VARCHAR(50) DEFAULT 'Shanghai';
    在这里插入图片描述

5.3 删除默认值约束

  • 当一个表中的列不需要设置默认值时,就需要从表中将其删除。
    基本语法:
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;
  • 实例
    修改数据表 tb_dept3,将部门位置的默认值约束删除。
    ALTER TABLE tb_dept3
    CHANGE COLUMN location
    location VARCHAR(50) DEFAULT NULL;
    在这里插入图片描述

【 6. 非空约束 NOT NULL 】

  • MySQL 非空约束(NOT NULL)字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。

比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约束。

6.1 在创建表时设置非空约束

  • 基本语法
<字段名> <数据类型> NOT NULL;
  • 实例
    创建数据表 tb_dept4,指定部门名称不能为空。
    CREATE TABLE tb_dept4
    (
    id INT(11) PRIMARY KEY,
    name VARCHAR(22) NOT NULL,
    location VARCHAR(50)
    );
    在这里插入图片描述

6.2 在修改表时添加非空约束

  • 如果在创建表时忘记了为字段设置非空约束,也可以通过修改表进行非空约束的添加。
    基本语法:
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;
  • 实例
    修改数据表 tb_dept4,指定部门位置不能为空。
    ALTER TABLE tb_dept4
    CHANGE COLUMN location
    location VARCHAR(50) NOT NULL;
    在这里插入图片描述

6.3 删除非空约束

  • 基本语法
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;
  • 实例
    修改数据表 tb_dept4,将部门位置的非空约束删除。
    ALTER TABLE tb_dept4
    CHANGE COLUMN location
    location VARCHAR(50) NULL;
    在这里插入图片描述

【 7. 查看表中的约束 】

  • 基本语法
SHOW CREATE TABLE <数据表名>;
  • 实例
    1. 创建数据表 tb_emp8 并指定 id 为主键约束,name 为唯一约束,deptId 为非空约束和外键约束。
      CREATE TABLE tb_emp8
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(22) UNIQUE,
      deptId INT(11) NOT NULL,
      salary FLOAT DEFAULT 0,
      CHECK(salary>0),
      FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
      );
    2. 查看表中的约束SHOW CREATE TABLE tb_emp8 \G
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis数据加密解密

文章目录 Mybatis数据加密解密一、自定义注解二、自定义参数处理拦截器结果集拦截器加密解密 Mybatis数据加密解密 方案一&#xff1a;Mybatis拦截器之数据加密解密【Interceptor】 拦截器介绍 Mybatis Interceptor 在 Mybatis 中被当作 Plugin(插件)&#xff0c;不知道为什么…

ARM32开发——LED点灯

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 点灯的两种方式灌入电流法输出电流法扩展板点灯点灯方式点亮LED1-4完整实现 点灯的两种方式 不同颜色LED&#xff0c;达到相同亮度…

[数据集][目标检测]猫狗检测数据集VOC+YOLO格式8291张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8291 标注数量(xml文件个数)&#xff1a;8291 标注数量(txt文件个数)&#xff1a;8291 标注…

ETLCloud中如何使用Kettle组件

ETLCloud中如何使用Kettle组件在当今数据驱动的时代&#xff0c;数据处理和分析已成为企业决策的关键。为了更高效地处理海量数据&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;工具变得至关重要。而在众多ETL工具中&#xff0c;Kettle作为一款开源、灵活且…

攻防实战 | 邮件高级威胁检测与自动化响应

历经三个月的时间&#xff0c;年度重磅直播节目Fortinet 2024年度“Demo季”近日终于迎来了备受瞩目的压轴大戏——Demo Day第三期&#xff0c;主题为《新邮件安全下的高级威胁检测与自动化响应》。继成功举办了前两期《企业网络中的多源威胁情报自动化整合与集成》和《应急响应…

Pycharm使用时的红色波浪线报错——形如‘break‘ outside loop

背景&#xff1a; 我在一个方法中&#xff0c;写了一个if判断&#xff0c;写了一个break&#xff0c;期望终止这个函数&#xff0c;编辑器出现报错 形如下图 视频版问题教程&#xff1a; Pycharm下出现波浪线报错&#xff0c;形如break outside loop 过程&#xff1a; 很奇…

IDEA一键启动多个微服务

我们在做微服务项目开发的时候&#xff0c;每次刚打开IDEA&#xff0c;就需要把各个服务一个个依次启动&#xff0c;特别是服务比较多时&#xff0c;逐个点击不仅麻烦还费时。下面来说一下如何一键启动多个微服务。 操作步骤 点击Edit Configurations 2.点击“”&#xff0c;…

【设计模式】JAVA Design Patterns——Facade(外观模式)

&#x1f50d;目的 为一个子系统中的一系列接口提供一个统一的接口。外观定义了一个更高级别的接口以便子系统更容易使用。 &#x1f50d;解释 真实世界例子 一个金矿是怎么工作的&#xff1f;“嗯&#xff0c;矿工下去然后挖金子&#xff01;”你说。这是你所相信的因为你在使…

性价比为王,物流商怎么选择高效的国际物流管理平台

在全球化贸易日益繁荣的今天&#xff0c;国际物流行业作为链接国内商家和海外市场的重要桥梁&#xff0c;发挥着极其重要的作用。 然而&#xff0c;随着国际物流市场竞争的加剧&#xff0c;对物流商来说&#xff0c;也面临着成本管控和效率提升的双重挑战。今天我们会重点探讨…

解决 DataGrip 2024.1.3 连接 Tdengine 时timestamp字段显示时区不正确问题

设置中找到该设置&#xff0c;将原来的设置 yyyy-MM-dd HH:mm:ss 修改为: yyyy-MM-dd HH:mm:ss.SSS z 即可。 注意&#xff1a;只能修改第一个,修改后提示错误&#xff0c;但是查询数据时能成功格式化时间&#xff0c;修改第二个不生效&#xff0c;可能是 bug 具体格式见: Date…

Opera 浏览器与Google联手,推出由Gemini驱动的全新AI功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

富士摄像机X-H2S MOV格式化后重新写入后的恢复方法

X-H2S是富士数码的一款旗舰机型&#xff0c;支持4K/6K高清&#xff0c;视频编码为最新的HVC。下面我们来看下富士数码摄像机恢复案例。 故障存储:512G存储卡 Exfat文件系统 故障现象: 512G的卡误格式化后又进行了拍摄&#xff0c;卡使用了120G不到的空间&#xff0c;其它底…

【EFK日志系统】docker一键部署kibana、es-head

docker一键部署kibana、es-head kibana部署es-head部署 上一篇文章搭建了es集群 规划服务器是 es01:172.23.165.185 es02:172.23.165.186 es03:172.23.165.187 那么kibana就搭建在主节点es01:172.23.165.185 按照顺序参考&#xff1a; docker一键部署EFK系统&#xff08;elas…

详解生成式人工智能的开发过程

回到机器学习的“古老”时代&#xff0c;在您可以使用大型语言模型&#xff08;LLM&#xff09;作为调优模型的基础之前&#xff0c;您基本上必须在所有数据上训练每个可能的机器学习模型&#xff0c;以找到最佳&#xff08;或最不糟糕&#xff09;的拟合。 开发生成式人工智能…

【linux】线程同步和生产消费者模型

线程同步 当我们多线程访问同一个临界资源时&#xff0c;会造成并发访问一个临界资源&#xff0c;使得临界资源数据不安全&#xff0c;我们引入了锁的概念&#xff0c;解决了临界资源访问不安全的情况&#xff0c;对于线程而言竞争锁的能力有强有弱&#xff0c;对于之前就抢到…

系统架构设计师【第9章】: 软件可靠性基础知识 (核心总结)

文章目录 9.1 软件可靠性基本概念9.1.1 软件可靠性定义9.1.2 软件可靠性的定量描述9.1.3 可靠性目标9.1.4 可靠性测试的意义9.1.5 广义的可靠性测试与狭义的可靠性测试 9.2 软件可靠性建模9.2.1 影响软件可靠性的因素9.2.2 软件可靠性的建模方法9.2.3 软件的可靠性模…

实物资产的市场主线将逐步回归

民生证券认为&#xff0c;投资者逐渐意识到长期趋势并没有发生变化&#xff0c;这或许正是本周最大的变化。在预期博弈重回冷静期后&#xff0c;去金融化背景下实物资源占优的市场主线也将逐步回归。 1 高低切换后的冷静期 从4月下旬至上周&#xff0c;A股市场呈现出由高位资产…

用windows server backup备份文件夹到网络共享文件夹并恢复

一、备份 开始 运行windows server backup,在右边的窗格中点击“备份计划” 选择备份配置 因为我们要备份的是一个文件夹&#xff0c;所以&#xff0c;选“自定义”&#xff0c;卷即为磁盘分区。 选择要备份的项 点击添加项目&#xff0c;可依次添加多个备份项目。 勾选需要…

汽车MCU虚拟化--对中断虚拟化的思考(2)

目录 1.引入 2.TC4xx如何实现中断虚拟化 3.小结 1.引入 其实不管内核怎么变&#xff0c;针对中断虚拟化无非就是上面两种&#xff0c;要么透传给VM&#xff0c;要么由Hypervisor统一分发。汽车MCU虚拟化--对中断虚拟化的思考(1)-CSDN博客 那么&#xff0c;作为车规MCU龙头…

Open3D(C++) Ransac拟合多项式曲线

目录 一、算法原理一、代码实现三、结果展示本文由CSDN点云侠原创,Open3D(C++) Ransac拟合多项式曲线,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 RANSAC(Random Sample Consensus)是一种用于拟合模型的迭…