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

mysql数据库添加约束

基础概念

MySQL数据库中的约束(Constraint)是用来限制表中数据的规则,确保数据的完整性和一致性。约束可以在创建表时定义,也可以在表创建后添加。常见的约束类型包括:

  1. 主键约束(PRIMARY KEY):确保表中每一行数据的唯一性,并且不允许为空。
  2. 唯一约束(UNIQUE):确保列中的数据唯一,但可以为空。
  3. 外键约束(FOREIGN KEY):用于建立两个表之间的关系,确保引用完整性。
  4. 非空约束(NOT NULL):确保列中的数据不能为空。
  5. 检查约束(CHECK):确保列中的数据满足特定的条件(MySQL不直接支持CHECK约束,但可以通过触发器实现类似功能)。

相关优势

  • 数据完整性:通过约束可以确保数据的准确性和一致性,减少错误数据。
  • 简化查询:约束可以帮助优化查询性能,因为数据库引擎可以利用约束来优化索引和查询计划。
  • 数据安全性:通过外键约束等可以确保数据的引用完整性,防止数据不一致。

类型

  • 主键约束PRIMARY KEY
  • 唯一约束UNIQUE
  • 外键约束FOREIGN KEY
  • 非空约束NOT NULL
  • 检查约束CHECK(MySQL不直接支持)

应用场景

假设我们有一个学生表(students)和一个班级表(classes),我们希望在学生表中引用班级表的主键,以确保每个学生都属于一个有效的班级。

代码语言:txt
复制
CREATE TABLE classes (
    class_id INT PRIMARY KEY,
    class_name VARCHAR(50) NOT NULL
);

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(50) NOT NULL,
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES classes(class_id)
);

在这个例子中,students表中的class_id列通过外键约束引用了classes表的class_id列,确保每个学生记录都关联到一个有效的班级。

常见问题及解决方法

问题1:添加约束时遇到“Can't create table 'xxx' (errno: 150)”

原因:通常是由于外键约束引用的列没有索引,或者引用的列和被引用的列数据类型不匹配。

解决方法

  1. 确保引用的列有索引。
  2. 确保引用的列和被引用的列数据类型匹配。
代码语言:txt
复制
ALTER TABLE classes ADD INDEX idx_class_id (class_id);

ALTER TABLE students ADD FOREIGN KEY (class_id) REFERENCES classes(class_id);

问题2:添加约束时遇到“Data too long for column 'xxx' at row xxx”

原因:插入的数据超过了列定义的长度。

解决方法

  1. 检查插入的数据是否符合列的定义。
  2. 修改列的定义以适应插入的数据。
代码语言:txt
复制
ALTER TABLE students MODIFY COLUMN student_name VARCHAR(100);

问题3:添加约束时遇到“Duplicate entry 'xxx' for key 'xxx'”

原因:尝试插入的数据违反了唯一约束。

解决方法

  1. 检查插入的数据是否唯一。
  2. 如果需要允许重复数据,可以考虑移除唯一约束或使用其他约束类型。
代码语言:txt
复制
ALTER TABLE students DROP INDEX idx_student_name;

参考链接

通过以上内容,你应该对MySQL数据库添加约束有了全面的了解,并且能够解决常见的约束相关问题。

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

相关·内容

MySql数据库约束

当前几乎所有的关系型数据库都提供了约束(constraits)机制,该机制提供了一条强大而简易的途径来保证数据库中的数据完整性,一般来说,数据完整性有以下三种形式: (1)实体完整性保证表中有一个主键,...对错误数据的约束   在某些默认设置下,MySql数据库允许非法或不正确的数据的插入或更新,又或者可以在数据库内部将其转化为一个合法的值,如向not null的字段插入一个null值,MySql数据库会将其更改为...0再进行插入,因此数据库本身没有对数据的正确性进行约束。...数据库的输入值进行了约束,而且针对不同的错误提示错误内容也不同。...外键约束 外键用来保证参照完整性,MySQL数据库的MyIsAM存储引擎本身并不支持外键,对于外键的定义只是起到一个注释的作用,而InonoDB存储引擎则完整支持外键约束。

1.2K10

MySQL数据库约束

UNLL约束 创建表时,可以指定某列不为空: -- 重新设置学生表结构 DROP TABLE IF EXISTS student; CREATE TABLE student (   id INT...NOT NULL,   name VARCHAR(20)  NOT NULL); 从图片中可以看到ID 与name 在 null 这一列为No,表示不能为空,如果我们选择添加的数据为空则会报错. 2....UNIQUE:唯一约束 -- 重新设置学生表结构 DROP TABLE IF EXISTS student; CREATE TABLE student (   id INT NOT NULL,...name VARCHAR(20) ); 图中key下面的UNI指的是unique, 加上unique约束之后,每次插入或修改都需要先进行查询,如果发现重复数据则会报错. 3 DEFAULT:默认值约束...一个表只能有一个主键. 5.FOREIGN KEY:外键约束 CREATE TABLE class ( id INT  PRIMARY KEY auto_increment , name VARCHAR

13410
  • MYSQL数据库约束类型

    07.14自我总结 MYSQL数据库约束类型 一.主键约束(primary key) 主键约束要求主键列的数据唯一,并且不能为空。主键分为两种类型:单字段主键和多字段联合主键。...必须先创建主表再创建从表 创建从表的时候写法末尾处添加 foreign key (从表内的字段) references 主表名称(主表内字段) 如果表创建完毕后我们添加这个条件alter table 从表名称...add oreign key (从表内的字段) references 主表名称(主表内字段) 三.使用非空约束(Not Null) 非空约束指字段的值不能为空。...非空约束 语法规则:字段名 数据类型 not null 创建表格后 alter table test modify 段名 数据类型 not null; 四.唯一性约束(Unique) 指定唯一约束 唯一约束...) 默认约束指定某列的默认值。

    2.7K10

    MySQL数据库基础:约束

    我的主页:MySQL 1. 约束的概述 约束是作用于表中字段的规则,用于限制存储在表中的数据 目的:保证数据库中数据的正确性,有效性和完整性 2....约束的分类 2.1 非空约束 非空约束限制了该字段不能为null, -- 创建student表,约束条件:id不能为null create table student ( id bigint...key auto_increment, name varchar(50) default '张某' ); 2.4.1 全列插入: 设置自增类型,表示在当前表的上一条记录的基本上加1 之后再进行添加数据...,并且尝试向主键中添加一个null值 在上面的全列插入写入数据时,不具体指定主键列的值,用null代替,会自动生成id,虽然说,主键是非空且唯一的,但由于设置了自增类型,所以当添加为null时,数据库会根据自增原则...2.5.1 插入 外键约束语法: 外键约束用来将两张表的数据之间建立连接,从而保证数据的一致性和完整性 此时创建的两张表没有任何的主外键关系,所以说插入一条不存在的班级编号在学生表里也是可以添加成功的

    10810

    关于MySQL数据库约束

    数据库约束:      约束是在表上强制执行的数据校验规则,主要用于保证数据库里数据的完整性。      除此之外,当表中的数据存在相互依赖性时,可以保证相关的数据不被删除。...:              建表的同时为相应的数据列指定约束              创建表后,以修改表的方式来增加约束 大部分数据库支持下面5中完整性约束: 1.NOT NULL: 非空约束...虽然唯一约束的列不可以出现重复值,但可以出现多个null值,因为在数据库中null不等于null。...同一个表内可创建多个唯一约束,唯一约束也可有多列组合而成。 当为某列创建唯一约束时,MySQL会为该列创建唯一索引, 如果不给唯一约束起名,该唯一约束默认与列名相同。...上面的表级约束语法格式既可以放在create table语句中与列定义并列,也可以放在alter table语句中使用add关键字添加: #创建表时,使用表级语法创建唯一约束 create table

    97910

    MySQL数据库——数据约束

    概述 数据约束是可选参数,用于约束数据规范,用于保证数据的完整性和一致性。 类型 非空约束 not null,非空约束用于修饰字段不能为控制,不设置默认为null。...默认约束 default,默认约束用于插入值时设置默认值,如果没有值输入,就使用默认值。 主键约束(非空+唯一) primary key ,主键约束要求非空且不可以重复。...唯一约束 unique,唯一约束要求字段中的值不可以重复,'null’值可以重复。...自增约束 auto_increment,自增涨约束字段会自动约束,自增字段不用设置列的数据,会自动生成一个自增的值。...外键约束 foreign key,外键约束用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

    29.8K105

    MySQL 外码约束原理:如何解决数据库添加数据时产生的外码(外键)约束?

    总结 ---- 前言 我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...---- 说明:本次案例的案例情景是传统的数据库表:学生-课程数据库。 一、插入新数据时报错外键约束?...我们在 Course 表中插入课程号为 1 的数据时提示违反了外键约束,插入命令如下: insert into course(cno,cname,cpno,ccredit) values('1','数据库...三、对于外码约束的分析 我们根据数据库定义的参照完整性规则得知:外键 cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 在参照表中必须存在。...---- 总结 本文我们掌握了 MySQL 数据库如何在设计不合理时遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。

    3.2K20

    【MySQL数据库】数据库的约束

    ​ 目录Mysql约束(constraint)基本介绍主键约束(primary key)自增长约束(auto_increment)非空约束(not null)唯一性约束(unique)默认约束(default...)零填充约束(zerofill)----图片Mysql约束(constraint)基本介绍 MySQL数据库通过约束(constraints)防止无效的数据进入到数据库中,以保护数据的实体完整性...MySQL中主要有六种约束,分别是:主键约束(primary key),非空约束(not null),自增长约束(auto_increment),默认约束(default) ,零填充约束(zerofill...主键约束(primary key) 主键约束相当于唯一约束+非空约束。每个表只能有一个唯一索引。关键字primary key。...约束名>;默认约束(default) 默认约束用于给表中字段指定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,系统会自动为这个字段插入默认值。

    5.7K40

    MYSQL数据库-表的约束

    零、前言 本章主要讲解学习MYSQl数据库中的表的约束 表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性...索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序 数据库使用索引以找到特定值,然后顺指针找到包含该值的行。...这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息 7、唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题...示例: 8、外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入

    7.5K30

    MySQL数据库表约束详解

    1.表的约束的概念 表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。...反过来,站在MySQL的视角,凡是插进来的数据,都是符合数据约束的! 约束的最终目标:保证数据的完整性和可预期性! 下面来介绍一些主流的约束。...* from tt3; +------+------+ | a | b | +------+------+ | 1 | 2 | +------+------+ 但是对列添加了zerofill...对a列添加了zerofill属性,再进行查找,返回如下结果: mysql> select * from tt3; +-------+------+ | a | b | +-------+-----...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入 语法: foreign key (字段名)

    7300

    MySQL数据库:表的约束

    表的约束,实质上就是用数据类型去约束字段,但是数据类型的约束手法很单一,比如,我们在设置身份证号这个字段,数据类型唯一起的约束是它属于char类型或者varchar类型,不能是浮点型也不能是日期时间类型...数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...修改tt14表的属性:将字段a添加zerofill属性,添加新字段b来对比查看效果: mysql> alter table tt14 add b int(10) unsigned default 0;...添加主键 添加主键的方法:①创建表的时候直接在字段上指定主键。②当表创建好以后但是没有主键的时候,可以再次追加主键。...,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

    28230

    MySQL | 数据库表字段约束

    数据定义语言:字段约束 数据库的范式 构造数据库必须遵循一定的规则,这种规则就是范式 目前关系数据库有 6 种范式,一般情况下,只满足第三范式即可 第一范式:原子性 第一范式是数据库的基本要求,不满足这一点就不是关系数据库...MySQL 中的字段约束共有四种: 约束名称 关键字 描述 主键约束 PRIMARY KEY 字段值唯一,且不能为 NULL 非空约束 NOT NULL 字段值不能为 NULL 唯一约束 UNIQUE...字段值唯一,且可以为 NULL 外键约束 FOREIGN KEY 保持关联数据的逻辑性 外键约束是唯一不推荐使用的约束 主键约束 主键约束要求字段的值在全表必须唯一,而且不能为 NULL 值 建议主键一定要使用数据类型...唯一约束要求字段值如果不为 NULL,那么在全表必须唯一 CREATE TABLE t_teacher( .........(放弃) 外键约束用来保证关联数据的逻辑关系 外键约束的定义是写在字表上的 创建父表 CREATE TABLE t_dept( deptno INT UNSIGNED PRIMARY KEY, dname

    5.7K10

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

    key 1.1 非空约束:not null 1)在创建表时添加约束: CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空...NAME VARCHAR(20) 1.2 唯一约束:unique,值不能重复 1)创建表时添加唯一约束: CREATE TABLE stu( id INT, number VARCHAR(20)...UNIQUE ); 注意:MySQL中唯一约束限定的列的值可以有多个null 2)删除唯一约束: -- alter table stu modify number varchar(20); 不同于非空约束的删除方法...主键约束:primary key 1)注意: 若某一列添加了该约束,则代表了非空,且唯一; 一张表只能有一个字段为主键; 主键就是表中记录的唯一标识; 2)创建表时添加主键约束 CREATE TABLE...以上仍然存在一个问题,当在员工表中输入不存的部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用外键约束来解决。 【概念】什么是外键约束?

    14.6K21

    数据库-MySQL-基础(8)-约束

    目录 概述  约束演示 外键约束 删除/更新行为 ---- 概述  1、概念:约束是作用于表中字段上的规则,用于限制存储表中的数据 2、目的:保证数据库中数据的正确、有效性和完整性 3、分类: 4、...注意: 约束是作用表中字段上的,可以在创建表 / 修改表时候添加约束  ---- 约束演示 案例:根据需求完成表结构的创建 代码 create table user( id int primary...10500,'2004-09-07',3,1), (6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1);  注意:目前上述的俩张表,在数据库层面并未建立外键关联...语法 添加外键 CREATE TABLE 表名( 字段名 数据类型,  ......); ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);  代码案例(接上面的例子) --添加外键

    63320

    MySQL数据库基础(九):SQL约束

    SQL约束 一、主键约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。...last_name varchar(255), address varchar(255), city varchar(255) ) default charset=utf8; 向persons添加数据时...NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。...下面的 SQL 语句强制 "id" 列和 "last_name" 列不接受 NULL 值: 三、唯一约束 UNIQUE 约束唯一标识数据库表中的每条记录。...非空约束: NOT NULL 约束强制列不接受 NULL 值。 唯一约束: UNIQUE 约束唯一标识数据库表中的每条记录。

    14310

    MySQL数据库(四):约束条件

    安装环境: 操作系统版本:RHEL 6.5 版本:MYSQL 5.5 约束条件的作用: 限制如何给字段赋值,创建表的时候如果没有设置的话,就是mysql建表的默认设置包括表结构的后四列。...1、NULL 是否允许空值 在不设置的时候,默认允许字段值为空 mysql> desc yueshu; +-------+--------------------+------+-----+----...sex  | +------+------+------+ |      | NULL | boy  | +------+------+------+ 1 row in set (0.00 sec) mysql...> insert into yueshu(age) values(null); Query OK, 1 row affected, 1 warning (0.00 sec) 查询字段的值 mysql>...建表时,没有设置字段的默认值,mysql吧字段的默认值设置为空 例子: mysql> create table yueshu(     -> name varchar(20) not null,

    1.8K50

    MySQL 约束

    1.1 非空(not null) 1.1.1 概述   非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,用户在添加数据时没有指定值,数据库系统就会报错。...,若添加唯一约束前含有相同数据则必须先处理数据后才能添加 alter table tb_name modify col_name col_type unique; # 删除唯一约束 alter table...affected (0.06 sec) 1.4 自动增长(auto_increment) 1.4.1 概述   在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值...一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即自动增长只能给 primary key 或者 unique 添加,一张表中只能添加一个)。...自增长列当前值存储在内存中,数据库每次重启之后,会查询当前表中自增列的最大值作为当前值。  ♞ AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。

    3K31
    领券