首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql定义表的约束

MySQL中的表约束是用来保证数据完整性和一致性的规则。它们可以应用于单个列或整个表。以下是一些常见的MySQL表约束类型及其优势、应用场景:

1. 主键约束(PRIMARY KEY)

优势:确保每行数据的唯一性,用于快速查找和访问记录。 应用场景:通常用于标识表中的每一条记录,如用户ID、订单号等。 示例

代码语言:txt
复制
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

2. 唯一约束(UNIQUE)

优势:确保列中的值唯一,但允许NULL值。 应用场景:用于确保某些字段的唯一性,如电子邮件地址、电话号码等。 示例

代码语言:txt
复制
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);

3. 外键约束(FOREIGN KEY)

优势:确保引用完整性,即外键列的值必须匹配另一个表的主键值。 应用场景:用于建立两个表之间的关系,如用户和订单之间的关系。 示例

代码语言:txt
复制
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

4. 非空约束(NOT NULL)

优势:确保列中的值不为空。 应用场景:用于确保某些关键字段必须有值,如用户名、密码等。 示例

代码语言:txt
复制
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

5. 检查约束(CHECK)

优势:确保列中的值满足特定条件。 应用场景:用于限制列中的值范围,如年龄必须在0到120之间。 示例

代码语言:txt
复制
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    age INT CHECK (age >= 0 AND age <= 120)
);

常见问题及解决方法

问题:外键约束失败

原因:插入或更新的数据违反了外键约束。 解决方法

  • 确保引用的主键存在。
  • 检查数据类型和值是否匹配。
  • 如果需要,可以先删除或更新相关记录。

问题:唯一约束冲突

原因:插入的数据违反了唯一约束。 解决方法

  • 检查插入的数据是否已经存在。
  • 使用INSERT IGNOREON DUPLICATE KEY UPDATE语句处理冲突。

问题:非空约束违反

原因:插入或更新的数据为空。 解决方法

  • 确保所有非空字段都有值。
  • 使用默认值或触发器处理空值情况。

参考链接

通过合理使用这些约束,可以有效提高数据库的数据完整性和一致性,减少数据错误和不一致的情况。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySql约束

中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期约束本质是通过技术收到逼迫程序员插入正确数据,反过来,站在mysql视角,凡是插入进来数据,都是符合数据约束。...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯一键。...外键foreign key 外键用于定义主表和从之间关系:外键约束主要定义在从上,主表则必须是有主键约束或unique约束。...当定义外键后,要求外键列数据必须在主表主键列存在或为null foreign key (字段名) references 主表(列) 创建student: mysql> create table if...建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。

20930

MySQL约束

约束 约束中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期约束本质是通过技术手段,倒逼用户,插入正确数据。...反过来,在 mysql 角度,凡是插入进来数据,都是符合数据约束约束最终目的就是保证数据完整性和可预期性。因此我们需要更多约束条件!...id 会报错,因为 id 字段具有唯一键: 但是可以插入空: 八、外键 外键用于定义主表和从之间关系:外键约束主要定义在从上,主表则必须是有主键约束或 unique 约束。...当定义外键后,要求外键列数据必须在主表主键列存在或为 null....建立外键本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql 不允许你插入。

14710
  • MYSQL约束

    前言 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性。比如有一个字段是email,要求是唯一。...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 七、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯一键。...int auto_increment primary key, name varchar(5) unique ); 八、外键 外键用于定义主表和从之间关系:外键约束主要定义在从上,主表则必须是有主键约束或...当定义外键后,要求外键列数据必须在主表主键列存在或为null 关键词:foreign key (字段名) references 主表(列) 案例: 我们可以看到,学生信息是和班级有关系:某个班还有学生时候我们不能直接删除这个班数据

    24540

    MySQL约束

    所谓约束,就是避免犯一些低级错误,比如类似于语法错误,编译器编译失败实际上也算是一种约束中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期。...约束本质: 通过技术手段倒逼程序员插入正确数据。反过来站在mysql视角,凡是插入进来数据,都是符合数据约束约束最终目标: 保证数据完整性和可预期性。 为什么数据库这么严格?...二.非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应计算操作中。...因此,为了避免这种情况,最好在创建时一并添加主键约束。 2.复合主键 回到上述定义,一张中最多只能有一个主键,但这并不意味着一个主键只能添加到一列。...外键是用于定义主表和从之间关系 外键约束主要定义在从上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表主键列存在或为null。

    21950

    MySQL约束

    一 介绍 约束条件与数据类型宽度一样,都是可选参数 作用:用于保证数据完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该主键,可以唯一标识记录 FOREIGN...,被约束字段必须同时被key约束 #不指定id,则自动增长 create table student( id int primary key auto_increment, name varchar(...:工号  姓名  部门 公司有3个部门,但是有1个亿员工,那意味着部门这个字段需要重复存储,部门名字越长,越浪费 解决方法: 我们完全可以定义一个部门 然后让员工信息关联该,如何关联,即foreign...  分析步骤: #1、先站在左角度去找 是否左多条记录可以对应右一条记录,如果是,则证明左一个字段foreign key 右一个字段(通常是id) #2、再站在右角度去找 是否右多条记录可以对应左一条记录...如果步骤1和2同时成立,则证明这两张时一个双向多对一,即多对多,需要定义一个这两张关系来专门存放二者关系 #一对一: 如果1和2都不成立,而是左一条记录唯一对应右一条记录,反之亦然

    4.8K60

    MySQL&约束&事务

    违反约束不正确数据,将无法插入到中 常见约束 约束约束关键字 主键 primary key 唯一 unique 非空 not null 外键 foreign key 主键约束 特点:不可重复...=100; 使用DELETE只是删除中所有数据,对自增没有影响,使用truncate 是将整个删除掉,然后创建一个新 自增主键,重新从 1开始 非空约束 非空约束特点: 某一列不予许为空...) NOT NULL, sex CHAR(1) ); 唯一约束 唯一约束特点: 某一列值不能重复( 对null不做唯一判断 ) CREATE TABLE emp3( eid INT PRIMARY...一个中只能有一个主键 , 但是可以有多个唯一约束 默认值 默认值约束 用来指定某列默认值 -- 创建带有默认值 CREATE TABLE emp4( eid INT PRIMARY KEY...MySQL 事务隔离级别 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库相同数据可能被多个事务同时访问,如果不采取隔离措施,就会导致各种问题, 破坏数据完整性。

    1.2K30

    MySQL数据库:约束

    约束,实质上就是用数据类型去约束字段,但是数据类型约束手法很单一,比如,我们在设置身份证号这个字段,数据类型唯一起约束是它属于char类型或者varchar类型,不能是浮点型也不能是日期时间类型...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯 一键。...:外键约束主要定义在从上,主表则必须是有主键约束或unique约束。...当定义外键后,要求外键列数据必须在主表主键列存在或为null。...,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。

    26930

    MySQL完整性约束

    约束条件与数据类型宽度一样,都是可选参数,主要分为以下几种: # NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY...DEFAULT 我们约束某一列不为空,如果这一列中经常有重复内容,就需要我们频繁插入,这样会给我们操作带来新负担,于是就出现了默认值概念。...AUTO_INCREMENT 约束字段为自动增长,被约束字段必须同时被key约束 ? ?...解决方法: 我们完全可以定义一个部门 然后让员工信息关联该,如何关联,即foreign key ?...Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 父有变更时,子表将外键列设置成一个默认值 但Innodb不能识别

    3.5K20

    MYSQL数据库-约束

    零、前言 本章主要讲解学习MYSQl数据库中约束 约束 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 7、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...示例: 8、外键 外键用于定义主表和从之间关系:外键约束主要定义在从上,主表则必须是有主键约束或unique约束。...当定义外键后,要求外键列数据必须在主表主键列存在或为null 语法: foreign key (字段名) references 主表(列) 示例: 如何理解外键约束: 首先我们承认,这个世界是数据很多都是相关性...解决方案就是通过外键完成。建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入

    7.5K30

    mysql常见选项和约束

    engine:指定使用存储引擎 存储引擎:决定了数据如何存储以及如何访问,还有事务如何处理 show engines 用来查询所有支持存储引擎 CREATE TABLE约束 作用:可以为列定义约束...约束主要是防止非法数据进入中,保证数据正确性和一致性,统称为数据完整性 约束也可以防止一个被删除 MySQL约束保存在information_schema.table_constraints中...主键是用来唯一标识每一行,类型一般为整型或者字符串 具有主键约束列不允许有null值,不允许有重复值 每个最多只允许一个主键,可定义联合主键,主键名总是PRIMARY 联合主键 用几个列来进行唯一标识一行...参照完整性约束,保证一个或两个之间参照完整性,外键是构建于一个两个字段或者是两个两个字段之间参照关系 注意: 具有外键约束值不能随便给,必须满足外键所引用主键取值 一张中可以定义多个外键...MySQl中可以使用check约束,但是check约束对数据验证没有任何作用。

    14610

    MySQL数据库——约束(非空约束、唯一约束、主键约束、外键约束)

    目录 1 约束 约束,是对表中数据进行限定,保证数据正确性、有效性和完整性,约束分为以下几类: 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign...UNIQUE ); 注意:MySQL中唯一约束限定值可以有多个null 2)删除唯一约束: -- alter table stu modify number varchar(20); 不同于非空约束删除方法...主键约束:primary key 1)注意: 若某一列添加了该约束,则代表了非空,且唯一; 一张只能有一个字段为主键; 主键就是中记录唯一标识; 2)创建时添加主键约束 CREATE TABLE...以上仍然存在一个问题,当在员工中输入不存部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用外键约束来解决。 【概念】什么是外键约束?...外键,就是从中与主表主键对应那一列,如:员工dep_id,其中,主表是一方,用来约束别人,从可以是多方,被别人约束。 注意:外键可以为NULL,但是不能是不存在外键值。 ?

    14.3K21

    mysql创建数据约束

    MySQL中,是存储数据基本单位,每张有若干列,每一行代表一条数据记录。在MySQL中,数据是按行存储。...创建数据基本语法如下 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name( 列名1 数据类型 [约束条件] [默认值], 列名2 数据类型 [约束条件...] [默认值], ............. ) [约束条件]; 使用主键约束 主键由一列或者多列组合而成。...主键约束要求主键列数据唯一,且不能为空。主键可以标识唯一一条记录。主键相当于目录。为创建主键后,使用主键列作为查询条件可以大大加快查询速度。...create table user_tmp4(id int, name varchar(20) not null); 使用默认约束 默认约束作用是为某列指定默认值,在向中插入数据时,如果不指定该列

    3.7K40

    mysql约束

    mysql设计中,有个概念叫做约束 什么是约束 约束英文:constraint 约束实际上就是中数据限制条件 约束种类 mysql约束大概分为以下几种: 非空约束(not null) 唯一性约束...(unique) 主键约束(primary key) PK 外键约束(foreign key) FK 检查约束(目前MySQL不支持、Oracle支持,本文不做介绍) 为了能继续看下去,打开mysql,...(非空约束,主键约束,唯一性约束);在后面会使用到外键约束 非空约束 非空约束是我们最常见一种约束方式,它规定了我们插入数据不允许为空(在mysql中,''不是空,null才是),例如以下插入语句:...,这里就不多做介绍了 外键约束 若有两个A、B,id是A主键,而B中也有id字段,则id就是B外键,外键约束主要用来维护两个之间数据一致性。...:子表 创建先创建父 删除先删除子表数据 插入先插入父数据 外键约束将会让mysql在插入,删除,更新会增加额外判断,严格来说,不允许使用外键约束,如果需要限制,请在代码层限制

    2.1K10

    MySQL探索之旅】MySQL数据增删查改——约束

    数据库约束类型 not null :不允许某列存储空值(非空); unique :不允许你某列存储重复值(唯一); default :没有赋值列存储默认值; primary key:主键约束,not...null 和unique 结合,确保某列(或两个列多个列结合)有唯一标 识,有助于更容易更快速地找到一个特定记录。...foreign key:外键约束,保证一个数据匹配另一个参照完整性。..., foreign key (classId) references class(id)); 在这个语句中, 定义一个外键实际作用是,在这条语句执行后,确保 MySQL 插入外键中每一个非空值已经在被参照表中作为主键出现...这意味着,对于student 每一个 classId ,都执行一次检查,看这个编号是否出现在 class id 列(主键)中。如果不存在,则出现出错信息。

    9310

    MYSQL约束及修改数据

    MYSQL约束及修改数据 28:约束 约束保证数据完整性和一致性 约束分为约束和列级约束 约束类型包括:     NOT NULL(非空约束)     PRIMARY KEY(主键约束)     ...30:删除数据 DELETE FROM 数据名 WHERE 条件; 31:外键约束参照操作(外键约束要求解析) 外键约束保证数据一致性,完整性,实现一对多或者一对一关系 (含有外键称为子表...如果外键列不存在索引的话,MYSQL将自动创建索引 ? ?...34:约束和列级约束 对一个数据列建立约束,称为列级约束《实际开发中多用》 对多个数据列建立约束,称为约束 列级约束既可以在列定义时声明,也可以在列定义后声明, 约束只能在列定义后声明。...修改列定义 ? ? 修改列名称 ? ? 修改数据名字 ? ? ? ?

    3.2K80
    领券