首页 > 数据库 >MySQL19 - 4大约束

MySQL19 - 4大约束

时间:2023-01-08 15:45:23浏览次数:48  
标签:name MySQL19 约束 vip id TABLE 主键 255

约束

什么是约束?约束的作用

在表的创建时,加入约束对表中数据进行规范,确保数据完整性、有效性

常见约束

  • 非空约束 NOT NULL -- 不能为NULL

    • DROP TABLE IF EXISTS t_vip;
      CREATE TABLE t_vip(
      	id INT,
      	name VARCHAR(255) NOT NULL
      );
      
  • 唯一性约束 UNIQUE -- 不能重复但可以为NULL

    • DROP TABLE IF EXISTS t_vip;
      CREATE TABLE t_vip(
      	id INT UNIQUE NOT NULL,  // 同时被UNIQUE 和 NOT NULL 约束,自动成为主键
      	name VARCHAR(255) UNIQUE,
      	email VARCHAR(255)
      );
      INSERT INTO t_vip
      	(id, name, email)
      VALUES
      	(1, NULL,'aaa@aaa');
      INSERT INTO t_vip
      	(id, name, email)
      VALUES
      	(2, NULL,'aaa@aaa');
      
    • MySQL中,同时被UNIQUE 和 NOT NULL 约束,自动成为主键 (Oracle中不一样)

    • 两个或多个字段联合判断唯一性 UNIQUE(字段1 , 字段2 , ... )

    • DROP TABLE IF EXISTS t_vip;
      CREATE TABLE t_vip(
      	id INT,
      	name VARCHAR(255),
      	email VARCHAR(255),
          UNIQUE(name, email)
      );
      INSERT INTO t_vip
      	(id, name, email)
      VALUES
      	(1, 'zhangsan','aaa@aaa');
      INSERT INTO t_vip
      	(id, name, email)
      VALUES
      	(2, 'lisi','aaa@aaa');
      INSERT INTO t_vip
      	(id, name, email)
      VALUES
      	(2, 'zhangsan','bbb@bbb');
      
  • 主键约束 PRIMARY KEY

  • 外键约束 FOREIGN KEY

  • 检查约束 CHECK(MySQL不支持,Oracle支持)


主键约束 PRIMARY KEY 简称PK

  • 添加主键约束的字段称为主键字段

  • 主键字段中的值称为主键值

  • 主键值是每一条记录的唯一标识

  • 主键 = NOT NULL + UNIQUE 不能为空不能重复

  • DROP TABLE IF EXISTS t_vip;
    CREATE TABLE t_vip(
    	id INT PRIMARY KEY,  // 列级约束
    	name VARCHAR(255) UNIQUE,
    	email VARCHAR(255)
    );
    
  • DROP TABLE IF EXISTS t_vip;
    CREATE TABLE t_vip(
    	id INT,
    	name VARCHAR(255) UNIQUE,
    	email VARCHAR(255),
        PRIMARY KEY(id)   // 表级约束
    );
    
  • 表级约束可用于多字段联合主键

    • DROP TABLE IF EXISTS t_vip;
      CREATE TABLE t_vip(
      	id INT,
      	name VARCHAR(255),
      	email VARCHAR(255),
          PRIMARY KEY(id, name)   // 表级约束 联合主键
      );
      
    • 但开发中不建议使用复合主键,更多使用单一主键

  • 主键值建议使用 INT BIGINT CHAR,主键值一般都为定长

  • 自然主键

    • 主键值是一个自然数,与业务无关
  • 业务主键

    • 主键值与业务关联,例如:学号、银行卡号等特殊唯一标识做主键
    • 在实际开发中,自然主键使用更多,因为主键不需要有意义,只用来确保记录不重复即可
    • 主键一旦和业务挂钩,但业务发生变动时,可能影响主键值,因此业务主键不推荐使用
  • AUTO_INCREMENT -- MySQL中,采用自增可以自动维护一个主键值

    • DROP TABLE IF EXISTS t_vip;
      CREATE TABLE t_vip(
      	id INT PRIMARY KEY AUTO_INCREMENT,
      	name VARCHAR(255),
      	email VARCHAR(255)
      );
      
    • 插入数据时,无需再传入 id 值


外键约束 FOREIGN KEY 简称FK

  • 添加外键约束的字段称为外键字段

  • 外键字段中的值称为外键值

  • 使用规则:

    • 表A中的 t字段是表B的主键,则表A 必须?将 t字段设置为外键,以此约束 t字段的内容从而符合表B

    • 或者 t字段在表B中是 UNIQUE字段,具有唯一标识的字段,则也可以设置为外键

  • SQL语句:表A的表级约束中 FOREIGN KEY (字段a) REFERENCES 表B (字段b)

  • 表A从表B继承字段b,命名为字段a,因此表A为“子表”,在建表时,表A一定在表B之后创建

  • DROP TABLE IF EXISTS t_student;
    DROP TABLE IF EXISTS t_class;
    CREATE TABLE t_class(
    	classno INT PRIMARY KEY,
    	classname VARCHAR(255)
    );
    CREATE TABLE t_student(
    	no INT PRIMARY KEY,
    	name VARCHAR(255),
    	cno INT,
    	FOREIGN KEY(cno) REFERENCES t_class(classno)
    );
    
  • 表A在插入数据时,字段a 的内容会有和 字段b 相同的约束

  • 父表中被引用的字段必须是主键吗?

    • 不一定是主键,外键可以为NULL,但必须具有唯一性 UNIQUE
  • 一个表的字段是另一个表的主键,一定要建立外键关系吗?

    • 一定要建立外键关系,否则两张表没有关联

标签:name,MySQL19,约束,vip,id,TABLE,主键,255
From: https://www.cnblogs.com/Ashen-/p/17034739.html

相关文章

  • postgresql字段新增、删除、增删约束、字段和表重命名
    转载:postgresql字段新增、删除、增删约束、字段和表重命名 新增字段在t_test表里添加名为t1,类型为VARCHAR(10)的列ALTERTABLEt_testADDCOLUMNt1VARCHAR(10......
  • Mysq - 基本数据类型,约束,表的修改,删除表,清空表
    1.基本数据类型整数类型:bit,bool,tinyint,smallint,mediumint,int,bigint浮点数类型:float,double,decimal字符串类型:char,varchar,tinytext、text,mediumtext,longtext,tinyblob,blob,m......
  • 第5节-MySQL表的约束
    1、约束关键字介绍 约束条件------说明PRIMARYKEY------主键约束,用于唯一标识对应的记录FOREIGNKEY------外键约束NOTNULL------非空约束UNIQUE------唯一性......
  • 数据库(约束)
    概述1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。2.目的:保证数据库中数据的正确、有效性和完整性。3.分类:约束描述关键字非空约束限制该字段的数据不能为......
  • 重磅直播|视觉惯性SLAM之多约束扩展卡尔曼滤波
    主讲人对该领域的核心和主流技术进行了详解,干货满满,线下的答疑更是赢得了同学们的好评。本期由东南大学仪器科学与技术博士魏宏宇分享,分享的主题为《视觉惯性SLAM之多约束扩......
  • MySQL约束条件介绍
    无符号、零填充unsigned #因为正负值符号会占用一个比特位,使用此约束条件可以去掉数字类型里面的正负值符号,之后相同数字类型会支持的正数范围会更大 idintunsigne......
  • RP 点归入Set And Coupling 约束创建
    想用python脚本创建一个耦合coupling关系,需要定义controlpiont和被控制的surfaces.两者都可以先分别归入到set和surface里,最后用set和surface作为coupling创建时的参数。......
  • 约束
    约束  *概念:对表中的数据进行限定,保证数据的正确性,有效性,完整性。  *分类:    1.主键约束:primarykey      1.注意:        1.含义:非空且唯一 ......
  • 约束的概念
    1,约束的概念*约束是作用于表中列上的规则,用于限制加入表的完整性*约束的存在保证了数据库中数据的正确性,有效性和完整性2,约束的分类   tips:MySQL不......
  • .net core web api 路由约束
    路由约束在传入URL发生匹配时执行,URL路径标记为路由值。路径约束通常检查通过路径模板关联的路径值,并对该值是否为可接受做出对/错决定。某些路由约束使用路由值以外......