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

mysql表级约束语句

基础概念

MySQL中的表级约束(Table-Level Constraints)是指对表中的数据施加的一系列规则和限制,以确保数据的完整性和一致性。这些约束可以在创建表时定义,也可以在表创建后添加。

类型

  1. 主键约束(PRIMARY KEY):确保表中每一行都有一个唯一的标识符。
  2. 唯一约束(UNIQUE):确保表中的某一列或多列的值是唯一的。
  3. 外键约束(FOREIGN KEY):确保引用完整性,即表中的值必须匹配另一个表的主键值。
  4. 检查约束(CHECK):确保列中的值满足特定的条件。
  5. 非空约束(NOT NULL):确保列中的值不能为空。

应用场景

  • 主键约束:通常用于标识表中的每一行,例如用户ID、订单ID等。
  • 唯一约束:用于确保某些列的值是唯一的,例如电子邮件地址、用户名等。
  • 外键约束:用于维护两个表之间的关系,例如订单表和用户表之间的关系。
  • 检查约束:用于确保数据的合法性,例如年龄必须在0到120之间。
  • 非空约束:用于确保某些列必须有值,例如用户名不能为空。

示例代码

代码语言:txt
复制
-- 创建表时定义约束
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) UNIQUE,
    age INT CHECK (age >= 0 AND age <= 120),
    country_id INT,
    FOREIGN KEY (country_id) REFERENCES countries(country_id)
);

-- 表创建后添加约束
ALTER TABLE users
ADD CONSTRAINT chk_age CHECK (age >= 0 AND age <= 120);

ALTER TABLE users
ADD CONSTRAINT fk_country FOREIGN KEY (country_id) REFERENCES countries(country_id);

遇到的问题及解决方法

问题1:主键冲突

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

解决方法

代码语言:txt
复制
-- 检查是否存在重复的主键值
SELECT user_id FROM users WHERE user_id = 1;

-- 如果存在重复值,可以选择删除重复记录或更新主键值
DELETE FROM users WHERE user_id = 1;

-- 或者更新主键值
UPDATE users SET user_id = 2 WHERE user_id = 1;

问题2:外键约束失败

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

解决方法

代码语言:txt
复制
-- 检查引用表中是否存在该外键值
SELECT country_id FROM countries WHERE country_id = 1;

-- 如果不存在,可以选择插入缺失的值或更新外键值
INSERT INTO countries (country_id, country_name) VALUES (1, 'China');

-- 或者更新外键值
UPDATE users SET country_id = 2 WHERE country_id = 1;

问题3:唯一约束冲突

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

解决方法

代码语言:txt
复制
-- 检查是否存在重复的唯一值
SELECT username FROM users WHERE username = 'admin';

-- 如果存在重复值,可以选择删除重复记录或更新唯一值
DELETE FROM users WHERE username = 'admin';

-- 或者更新唯一值
UPDATE users SET username = 'admin2' WHERE username = 'admin';

参考链接

希望这些信息对你有所帮助!

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

相关·内容

MySql约束

中一定要有各种约束,通过约束,让我们未来插入数据库中的数据是符合预期的。约束的本质是通过技术收到逼迫程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。...而对于not null,非空约束,下面的这些都不能插入: mysql> insert into myclass (class_name) values ('六年1班'); ERROR 1364 (HY000...列描述comment 列描述:comment,没有实际含义,专门用来描述字段,会根据创建语句保存,用来给程序员或DBA来进行了解,。...外键foreign key 外键用于定义主表和从之间的关系:外键约束主要定义在从上,主表则必须是有主键约束或unique约束。...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

20930

MySQL约束

反过来,在 mysql 角度,凡是插入进来的数据,都是符合数据约束的!约束的最终目的就是保证数据的完整性和可预期性。因此我们需要更多的约束条件!...三、列描述 列描述:comment,没有实际含义,专门用来描述字段,会根据创建语句保存,用来给程序员或 DBA 来进行了解。...通过 show 看看 t3 的建表语句: 可以看到 int(10),这个代表什么意思呢?整型不是 4 字节吗?这个 10 又代表什么呢?...这样可以使对应于的 SQL 语句执行得更快,可快速访问数据库中的特定信息。 我们会在后面详细讲索引的概念。...建立外键的本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql 不允许你插入。

14710
  • MYSQL约束

    三、列描述 没有实际含义,专门用来描述字段(相当于注释),会根据创建语句保存,用来给程序员或DBA来进行了解。...五、主键 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张中最多只能有一个主键;主键所在的列通常是整数类型。...这样可以使对应于的SQL语句执行得更快,可快速访问数据库中的特定信息 七、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束的问题...而我们设计员工工号的时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司的业务上不能重复,我们设计的时候,需要这个约束,那么就可以将员工工号设计成为唯一键。...:外键约束主要定义在从上,主表则必须是有主键约束或unique约束

    24540

    MySQL约束

    所谓约束,就是避免犯一些低级错误,比如类似于语法错误,编译器的编译失败实际上也算是一种约束中一定要有各种约束,通过约束,让我们未来插入数据库中的数据是符合预期的。...约束的本质: 通过技术手段倒逼程序员插入正确的数据。反过来站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。 约束的最终目标: 保证数据的完整性和可预期性。 为什么数据库这么严格?...二.的非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同的,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应的计算操作中。...1.唯一主键 创建约束某一字段为主键。 为了保证不能重复,不能为空,相应的创建语句在mysqld中也会添加not null,Key也会标记PRI保证不能重复。...如果在学生中插入class_id=3的学生,虽然可以插入,但是class中并没有对应的班级;如果操作delete from class where id=1;让通信101班不存在,但学生仍有通信

    21950

    MySQL约束

    一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该的主键,可以唯一的标识记录 FOREIGN...---+ | egon | 18 | male | play,music | +------+-----+------+------------+ 三 unique ============设置唯一约束...nginx'); ERROR 1062 (23000): Duplicate entry '172.16.45.10-3306' for key 'PRIMARY' 五 auto_increment 约束字段为自动增长...,被约束的字段必须同时被key约束 #不指定id,则自动增长 create table student( id int primary key auto_increment, name varchar(...比起delete一条一条地删除记录,truncate是直接清空,在删除大时用它 mysql> truncate student; Query OK, 0 rows affected (0.01 sec

    4.8K60

    MySQL&约束&事务

    违反约束的不正确数据,将无法插入到中 常见的约束 约束约束关键字 主键 primary key 唯一 unique 非空 not null 外键 foreign key 主键约束 特点:不可重复...), sex CHAR(1) ) - -- 创建的时候不指定主键,然后通过 DDL语句进行设置 ALTER TABLE emp2 ADD PRIMARY KEY(eid); -- 使用DDL语句 删除中的主键...,对自增没有影响,使用truncate 是将整个删除掉,然后创建一个新的 自增的主键,重新从 1开始 非空约束 非空约束的特点: 某一列不予许为空 # 非空约束 CREATE TABLE emp2...); 唯一约束 唯一约束的特点: 中的某一列的值不能重复( 对null不做唯一的判断 ) CREATE TABLE emp3( eid INT PRIMARY KEY AUTO_INCREMENT,...ename VARCHAR(20) UNIQUE, sex CHAR(1) ); 主键约束与唯一约束的区别: 主键约束 唯一且不能够为空 唯一约束,唯一 但是可以为空 一个中只能有一个主键 , 但是可以有多个唯一约束

    1.2K30

    MySQL数据库:约束

    约束,实质上就是用数据类型去约束字段,但是数据类型的约束手法很单一,比如,我们在设置身份证号这个字段,数据类型唯一起的约束是它属于char类型或者varchar类型,不能是浮点型也不能是日期时间类型...通过show看看tt14的建表语句mysql> show create table tt14\G *************************** 1. row **************...:外键约束主要定义在从上,主表则必须是有主键约束或unique约束。...> ); Query OK, 0 rows affected (0.04 sec) 再建从,在从中形成外键约束 mysql> create table stu( -> id int primary...,提前告诉mysql之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

    26930

    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的完整性约束

    约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: # NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY...主键可以在建置新表格时设定 (运用 CREATE TABLE 语句),或是以改变现有的表格架构方式设定 (运用 ALTER TABLE)。...AUTO_INCREMENT 约束字段为自动增长,被约束的字段必须同时被key约束 ? ?...on update cascade # 连更新 )engine=innodb; #先往父department中插入记录 insert into department values (1,'教质部...Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 父有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别

    3.5K20

    MYSQL数据库-约束

    零、前言 本章主要讲解学习MYSQl数据库中的约束 约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性...才可以在插入值的时候,对列进行省略 not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空 3、列描述 列描述:comment,没有实际含义,专门用来描述字段,会根据创建语句保存...这样可以使对应于的SQL语句执行得更快,可快速访问数据库中的特定信息 7、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束的问题...示例: 8、外键 外键用于定义主表和从之间的关系:外键约束主要定义在从上,主表则必须是有主键约束或unique约束。...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入

    7.5K30

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

    SQL语句查询 排序 通过order by语句,可以将查询出的结果排序。放置在select语句的最后。...16)对总分排序,降序输出,显示时只有两列,列名是姓名和总分 17)对姓李的学生信息按照总分降序的方式输出 显示姓名和总分 单练习强化 数据准备 部门Dept 建表语句: CREATE TABLE...引用完整性: 外键约束 主键约束 PRIMARY KEY 约束唯一标识数据库中的每条记录。...请注意,每个可以有多个 UNIQUE 约束,但是每个只能有一个 PRIMARY KEY 约束。...唯一约束与主键约束的区别: 主键:唯一、不能为空、一个只能有一个主键,非业务数据 唯一:唯一、可以有空值,但只能有一个空值。一个可以有多个唯一约束

    2K20

    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支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。...约束 1.约束   1.1 主键约束(PRIMARY KEY)     主键约束:唯一、不重复、不为空;每个都应该有一个主键,并且每一个只能有一个主键。    ...    外键约束:外键创建在从(副)中,从中的FOREIGN KEY指向主表中的PRIMARY KEY。    ...    非空值约束:用于确保当前列的值不为空值,非空约束只能出现在对象的列上。    ...数据类型,        ...           );     2.2 修改结构(增删改表列字段)     注:ALTER TABLE 语句用于在已有的中添加、修改或删除列。

    4.8K20

    MYSQL约束及修改数据

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

    3.2K80
    领券