首页
学习
活动
专区
圈层
工具
发布

mysql查询约束名

基础概念

MySQL中的查询约束(Constraint)是用于限制表中数据的规则,以确保数据的完整性和一致性。约束可以应用于单个列或多个列,主要有以下几种类型:

  1. 主键约束(PRIMARY KEY):确保每行数据的唯一性,并且不允许为空。
  2. 唯一约束(UNIQUE):确保列中的数据唯一,但允许为空。
  3. 外键约束(FOREIGN KEY):用于建立两个表之间的关系,确保引用完整性。
  4. 检查约束(CHECK):用于限制列中的数据必须满足特定条件。
  5. 默认约束(DEFAULT):为列提供默认值。

相关优势

  • 数据完整性:约束确保数据的准确性和一致性,减少数据错误。
  • 数据安全性:通过约束限制数据的输入,提高数据的安全性。
  • 简化查询:约束可以帮助优化查询性能,减少不必要的数据过滤。

类型

  • 主键约束PRIMARY KEY
  • 唯一约束UNIQUE
  • 外键约束FOREIGN KEY
  • 检查约束CHECK
  • 默认约束DEFAULT

应用场景

假设我们有一个用户表 users,其中包含以下列:

  • id (主键)
  • username (唯一)
  • email (唯一)
  • age (检查约束:年龄必须在0到120之间)
  • created_at (默认值:当前时间)
代码语言:txt
复制
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE,
    email VARCHAR(100) UNIQUE,
    age INT CHECK (age >= 0 AND age <= 120),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

常见问题及解决方法

问题:为什么会出现“违反主键约束”的错误?

原因:尝试插入重复的主键值。

解决方法:确保插入的数据在主键列上是唯一的。

代码语言:txt
复制
-- 错误示例
INSERT INTO users (id, username, email) VALUES (1, 'user1', 'user1@example.com');

-- 正确示例
INSERT INTO users (id, username, email) VALUES (2, 'user2', 'user2@example.com');

问题:为什么会出现“违反唯一约束”的错误?

原因:尝试插入重复的唯一列值。

解决方法:确保插入的数据在唯一列上是唯一的。

代码语言:txt
复制
-- 错误示例
INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com');

-- 正确示例
INSERT INTO users (username, email) VALUES ('user3', 'user3@example.com');

问题:为什么会出现“违反外键约束”的错误?

原因:尝试插入的外键值在引用表中不存在。

解决方法:确保插入的外键值在引用表中存在。

代码语言:txt
复制
-- 错误示例
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

INSERT INTO orders (order_id, user_id) VALUES (1, 999);

-- 正确示例
INSERT INTO orders (order_id, user_id) VALUES (1, 1);

参考链接

希望这些信息对你有所帮助!如果有更多具体问题,欢迎继续提问。

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

相关·内容

Mysql约束、分组查询

tip: 通过 desc 表名命令查看当前表信息 tip2: as 关键字可以为我们的字段或者表取别名 Mysql约束 顾名思义就是对表中的数据进行限定, 目的是保证数据的正确性, 有效性和完整性 主键约束...NOT NULL 只能约束程序层面上没有操作该表中的某个字段, 不能约束人行为上对其赋值为空白字符....唯一约束 UNIQUE NULL可以重复 比如统计店铺业绩, 该店铺不可以重复, 那就可以使用唯一约束 外键约束foreign key 外键的作用 保持数据的一致性和完整性, 通过外键来表达主表和从表的关系...维护成本 需要有专业DBA来维护庞大的数据库关系 default 默认约束, 默认会填充当前字段....如果我们没有给一个有默认约束的字段create_time值, 那么该字段会默认填充CURRENT_TIMESTAMP 分组查询GROUP BY 将数据按某个字段进行分组, 配合SUM, AVG, COUNT

5.2K30

Linux——MySQL约束与查询

表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合 法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。...删除主键:因为只有一个主键,所以不用写字段列表 alter table 表名 drop primary key; 当表创建好以后但是没有主键的时候,可以再次追加主键: alter table 表名...当然,唯一键也可以在建表之后设置: 外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...查询同学及总分,由高到低 – ORDER BY 子句中可以使用列别名 这里为什么可以使用别名了呢? 因为要排序肯定是现有需要排序的数据,需要先给mysql要排序的数据才会进行排序。...(条件筛选的阶段是不同的) 并且,不是只有磁盘上的表结构导入到mysql的才是表,虽然这才是真实存在的表,但是在逻辑上,中途筛选出来的,包括最终结果,全都是表,MySQL下,一切皆表。

56500
  • 探讨MySQL中 “约束“ 下的查询

    数据库约束: 1.约束类型汇总: 约束类型 说明 NULL约束 使用NOT NULL指定列不为 空 UNIQUE唯一约束 指定列为唯一的、不重复的 DEFAULT默认值约 束 指定列为空时的默认值 主键约束..., sn INT, name VARCHAR(50), qq_mail VARCHAR(50) ); 1.2 DEFAULT:默认值约束: mysql> CREATE TABLE student...笛卡尔积其实是个全排列的过程 语法: select * from 表名 表名 如图: 上面有很多无用数据,我们可以通过连接条件过滤 2.内连接: 写法一:select...如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完 全显示我们就说是右外连接  语法: -- 左外连接,表1完全显示 select 字段名  from 表名1 left join 表名...2 on 连接条件; -- 右外连接,表2完全显示 select 字段 from 表名1 right join 表名2 on 连接条件; 如果是left join,就以左边的表为基准显示; 如果是

    2.4K10

    【MySQL】SQL语句查询、约束、备份与恢复

    SQL语句查询 排序 通过order by语句,可以将查询出的结果排序。放置在select语句的最后。...格式: SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC; ASC 升序 (默认) DESC 降序 题干: #1.使用价格排序(降序) #2.在价格排序(升序)的基础上,以...关键字:group by 格式: SELECT 字段1,字段2… FROM 表名GROUP BY分组字段 HAVING 条件; 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用有点像...by page having page>18; -- 小技巧, 统计出每种XX有多少个  查询就按照XX进行分组  ==> select XX ,count(XX) from 表名 group by...8)查询英语成绩大于90分的同学信息 9)查询总分大于200分的所有同学信息 11)查询数学分数为89 90 91 的同学信息 13)查询数学分高于80并且语文分高于82的同学信息 14)查询英语80

    3K20

    MySQL约束

    varchar(25) unique -- 给id_number设置唯一约束 - ); 查看唯一约束:show index from 表名; 删除唯一约束:alter table 表名 drop index...字段名; 创建表之后添加唯一约束:alter table 表名 modify 字段名 数据类型 unique; 主键约束 (primary key 同时保证了唯一和非空) - 创建表时添加主键约束...表名 drop primary key; 添加主键约束:alter table 表名 modify 字段名 数据类型 primary key; 自动增长 (auto_increment) 一个表中有且只能有一个自增长列...外键约束 (foreign key , 让多个表之间关联,从而保证数据的正确性) - 创建表时添加外键约束: - 删除键外键约束:alter table 表名 drop foreign key 外键名称...; - 添加外键:alter table 表名 add [constraint 外键名称] foreign key (外键字段名称) references 关联的主表名(字段名); * 注:外键名称可以不指定

    2.6K20

    MySQL 约束

    ); 创建检查约束 在 MySQL 8.0.16 之前,CREATE TABLE 仅允许以下有限版本的表 CHECK 约束语法,该语法将被解析并忽略: CHECK (expr) 从 MySQL 8.0.16...如果省略,MySQL 会根据表名、_chk_ 和序数 (1, 2, 3, …) 生成一个名称。约束名称的最大长度为 64 个字符。 它们区分大小写,但不区分重音符号。...的 information_schema 数据库里的 table_constraints 表保存了该数据库实例中所有的约束信息,用户可以通过查询该表获取该数据库的约束信息。...在 MySQL 中,通常情况下,这个值通常为 def,因为 MySQL 不使用目录的概念。 CONSTRAINT_SCHEMA:这是包含约束的数据库的名称。它指定了约束所属的数据库。...5.删除约束 要删除 MySQL 表中的约束,可以使用 ALTER TABLE 语句并指定要删除的约束类型和名称。

    4.6K10

    MySQL 约束

    核心目标: 学习如何使用约束来强制执行 MySQL 表中数据的完整性和规则,确保数据的准确性、一致性和可靠性。 什么是约束? 约束是在表的数据列上强制执行的规则。...当插入新行时,如果未指定该列的值,MySQL 会自动为其生成一个比当前最大值大 1 的唯一序列号。...NO ACTION: 同 RESTRICT (标准 SQL 的概念,MySQL 中行为类似)。 SET DEFAULT: 父表记录删除/更新时,将子表中相应的外键列设置为其默认值。...(MySQL 8.0.16+ 才真正强制执行) 语法 (建表时 - 列级): column_name data_type CHECK (condition) 语法 (建表时 - 表级): CONSTRAINT...答案: ALTER TABLE employees DROP FOREIGN KEY fk_emp_dept; -- 如果不确定约束名,可以先用 SHOW CREATE TABLE employees;

    66110

    初识MySQL · 约束

    前言: 对于约束来说,是一种限制数据的方式,这里的约束和生活中的约束是差不多的,比如数据来说,生活中的语文成绩在150以内,0分以上,如果有谁给你说我语文考了151分,那指定是扯淡,同样的,拿我们班级中的学号来举例...在MySQL中就可以通过主键或者是唯一键来约束数据不能重复,等等等等。 说白了,我们学习这里的约束和结合生活中的场景是非常容易理解的,那么话不多说,我们直接进入主题。...那么我们就将该学生的属性和班级表联系在了一起: create table myclass ( id int primary key, name varchar(30) not null comment'班级名'...comment '学生名', class_id int, foreign key (class_id) references myclass(id) ); 当我们往从表里面插入数据的时候,发现主键没有这个值...,那么就报错了,同学们试试~ 以上就是关于约束的基本内容。

    1.5K00

    【MySQL】约束类型

    ,应优先为关键业务字段添加 对于可选信息(如用户的昵称、备注)不应设置非空约束 MySQL中,字符串类型的非空列如果未指定默认值,插入时必须显式提供值 2....,提升查询效率 联合唯一约束中,只有所有列的值都相同才判定为重复 3...., '女')), -- 性别只能是男女 ); 数据库兼容性: MySQL 5.7及之前版本:会解析CHECK约束但不生效(忽略检查) MySQL 8.0及以上版本:完全支持CHECK约束 PostgreSQL...查看表中的约束 通过数据库系统表可以查询表中已定义的约束: -- MySQL中查看约束 SELECT CONSTRAINT_NAME, COLUMN_NAME, CONSTRAINT_TYPE...外键使用准则 中小型应用可以使用外键保证数据完整性 高并发、大数据量系统建议在应用层实现参照校验 外键命名应遵循fk_从表名_主表名规则,便于识别 合理设置ON DELETE和ON UPDATE策略,避免意外数据丢失

    48310

    MySQL 约束介绍

    唯一性约束允许列值为空。 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引。...字段名 数据类型; 5、外键约束 限定某个表的某个字段的引用完整性 从表的外键列,必须引用/参考主表的主键或唯一约束的列 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名...(例如student_ibfk_1;),也可以指定外键约束名。...从表”中指定外键约束,并且一个表可以建立多个外键约束 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引,索引名是外键的约束名,删除外键约束后,必须手动删除对应的索引 CREATE TABLE...>] FOREIGN KEY(从表的某个字段) REFERENCES 主表名(被参考字段) ); #(从表的某个字段)的数据类型必须与主表名(被参考字段)的数据类型一致,逻辑意义也一样 #(从表的某个字段

    3K41

    MySQL-约束

    概述 概念 约束是作用在表中字段的规则 目的 保证数据库中数据的正确、有效和完整性 分类 约束是作用在表中字段上的,可以再创建表/修改表的时候添加约束 约束演示 请按照一下要求完成数据表结构的创建...), ('吴九', 50, '1', '男'), ('郑十', 27, '1', '女'), ('钱伯', 42, '1', '男'), ('孔仲', 33, '1', '女'); 接着我们来试验一下约束的效果...INSERT INTO yonghu (name, age, status, gender) value ('小昭', 132, '1', '女'); 系统依然报错: 存在check约束函数 当然约束函数在一些软件中实现了可视化操作...,下面以GataGrip为例: 在创建表时,可以使用图形化界面添加字段,并且点击相应的选项实现约束函数。...外键约束 概念 使用外键来建立两张表之间的连接,从而保证数据的一致性和完整型性。

    39110

    MySQL(条件约束)

    id int not null , name varchar(20)); 2:unique 保证某列的每一行必须有唯一的值,后续再插入数据的时候,都会先进行查询表里是否已经存在这个数据了 应用:create...这里递增是不会重复利用之前的值的 这里插入了100,101后,再想在(4,100)这个区间自增插入id数值就不可以了 注:①unique可以为空,但是主键不能为空 ②如果数据库是由多个mysql...服务器构成的“集群”,此时自增主键就无法生效了 6:foreign key(外键约束) (保证一个表中的数据匹配另一个表中的数据的参照完整性) 所以引入外键约束(被约束的表叫“子表”,约束别人的表...) references class(classId)); 注:前面几个约束关键字,都是哪一列需要约束,就在该列的后面加上约束条件,而foreign key是在列定义完成之后,加在最后最后面。...约束是相互的:在删除“父表”中的数据的时候,如果子表中有数据受该父表此数据的约束的话,是删不掉的,要确保子表中没有数据引用父表的记录,才能删除父表上的该数据 关于外键约束还有一个应用场景 应用场景:现在订单表中把商品

    3.2K10

    mysql的约束

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

    3.1K10

    MySQL约束详接

    为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。 从以下四个方面考虑: 什么是约束 约束是表级的强制规定。...唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许列值为空。在创建唯一约束的时候, 如果不给唯一约束命名,就默认和列名相同。...MySQL会给唯一约束的列上默认创建一个唯一索引。 添加唯一约束 举例:    删除唯一约束 添加唯一性约束的列上也会自动创建唯一索引。 删除唯一约束只能通过删除唯一索引的方式删除。...删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中排在第一个的列名相同。也可以自定义唯一性约束名。... 建表后 alter table 表名称 modify 字段名 数据类型 auto_increment;  MySQL 8.0将自增主键的计数器持久化到重做日志中。

    2.7K10
    领券