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

mysql数据库的单表约束有哪些

MySQL数据库的单表约束主要包括以下几种:

1. 主键约束(PRIMARY KEY)

基础概念:主键约束用于唯一标识表中的每一行数据。一个表只能有一个主键,且主键的值必须是唯一的,不允许为空。

优势

  • 确保数据的唯一性和完整性。
  • 可以作为外键引用,用于建立表与表之间的关系。

应用场景

  • 用户表中的用户ID。
  • 订单表中的订单ID。

示例代码

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

2. 唯一约束(UNIQUE)

基础概念:唯一约束用于确保表中某一列或多列的值是唯一的,但允许为空值。

优势

  • 确保数据的唯一性。
  • 可以用于索引优化查询性能。

应用场景

  • 用户表中的电子邮件地址。
  • 产品表中的产品代码。

示例代码

代码语言:txt
复制
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_code VARCHAR(20) UNIQUE,
    product_name VARCHAR(100) NOT NULL
);

3. 非空约束(NOT NULL)

基础概念:非空约束用于确保表中某一列的值不能为空。

优势

  • 确保数据的完整性。
  • 避免插入无效数据。

应用场景

  • 用户表中的用户名。
  • 订单表中的订单日期。

示例代码

代码语言:txt
复制
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date DATE NOT NULL,
    customer_id INT
);

4. 外键约束(FOREIGN KEY)

基础概念:外键约束用于建立两个表之间的关系,确保引用完整性。

优势

  • 确保数据的引用完整性。
  • 维护表之间的关系。

应用场景

  • 订单表中的客户ID引用用户表中的用户ID。
  • 订单明细表中的订单ID引用订单表中的订单ID。

示例代码

代码语言:txt
复制
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(100) NOT NULL
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date DATE NOT NULL,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

5. 检查约束(CHECK)

基础概念:检查约束用于确保表中某一列的值满足特定的条件。

优势

  • 确保数据的合法性。
  • 避免插入不符合条件的数据。

应用场景

  • 用户表中的年龄必须在18到100之间。
  • 订单表中的订单金额必须大于0。

示例代码

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

常见问题及解决方法

问题1:主键约束冲突

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

解决方法

  • 确保插入的数据在主键列上是唯一的。
  • 使用AUTO_INCREMENT自动生成唯一的主键值。

示例代码

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

问题2:外键约束冲突

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

解决方法

  • 确保插入的外键值在引用表中存在。
  • 先插入引用表中的数据,再插入外键表中的数据。

示例代码

代码语言:txt
复制
INSERT INTO customers (customer_id, customer_name) VALUES (1, 'John Doe');
INSERT INTO orders (order_id, order_date, customer_id) VALUES (1, '2023-10-01', 1);

问题3:唯一约束冲突

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

解决方法

  • 确保插入的数据在唯一约束列上是唯一的。
  • 使用UNIQUE索引来优化查询性能。

示例代码

代码语言:txt
复制
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_code VARCHAR(20) UNIQUE,
    product_name VARCHAR(100) NOT NULL
);

通过以上介绍和示例代码,希望你能更好地理解MySQL数据库的单表约束及其应用场景和解决方法。

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

相关·内容

MySQL&约束&事务

DQL操作 排序 # 通过 ORDER BY 子句,可以将查询出结果进行排序(排序只是显示效果,不会影响真实数据) SELECT 字段名 FROM 名 [WHERE 字段 = 值] ORDER...违反约束不正确数据,将无法插入到中 常见约束 约束约束关键字 主键 primary key 唯一 unique 非空 not null 外键 foreign key 主键约束 特点:不可重复...,对自增没有影响,使用truncate 是将整个删除掉,然后创建一个新 自增主键,重新从 1开始 非空约束 非空约束特点: 某一列不予许为空 # 非空约束 CREATE TABLE emp2...ename VARCHAR(20) UNIQUE, sex CHAR(1) ); 主键约束与唯一约束区别: 主键约束 唯一且不能够为空 唯一约束,唯一 但是可以为空 一个中只能有一个主键 , 但是可以多个唯一约束...MySQL 事务隔离级别 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库相同数据可能被多个事务同时访问,如果不采取隔离措施,就会导致各种问题, 破坏数据完整性。

1.2K30

MYSQL数据库-约束

零、前言 本章主要讲解学习MYSQl数据库约束 约束 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性...在关系数据库中,索引是一种单独、物理数据库中一列或多列值进行排序一种存储结构,它是某个中一列或若干列值集合和相应指向中物理标识这些值数据页逻辑指针清单 索引作用相当于图书目录...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 7、唯一键 一张中有往往很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...,不创建外键约束,就正常建立学生,以及班级,该有的字段我们都有,在实际使用时候,可能会出现有没有可能插入学生信息中有具体班级,但是该班级却没有在班级中,这很明显是问题 因为此时两张在业务上是相关性...解决方案就是通过外键完成。建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入

7.5K30
  • MySQL数据库约束

    约束,实质上就是用数据类型去约束字段,但是数据类型约束手法很单一,比如,我们在设置身份证号这个字段,数据类型唯一起约束是它属于char类型或者varchar类型,不能是浮点型也不能是日期时间类型...自增长特点: ⭐任何一个字段要做自增长,前提是本身是一个索引(key一栏值)。 ⭐自增长字段必须是整数。 ⭐一张最多只能有一个自增长。...2 | +------------------+ 1 row in set (0.00 sec) 唯一键 一张中有往往很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。...综合案例: 一个商店数据,记录客户及购物情况,以下三个组成: 商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商

    26930

    MySQL约束

    所谓约束,就是避免犯一些低级错误,比如类似于语法错误,编译器编译失败实际上也算是一种约束中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期。...约束本质: 通过技术手段倒逼程序员插入正确数据。反过来站在mysql视角,凡是插入进来数据,都是符合数据约束约束最终目标: 保证数据完整性和可预期性。 为什么数据库这么严格?...数据库作为维护用户数据最后一道防线,必须要保证数据库数据是满足预期,因此数据库约束必须严格。为了更好约束,就需要更多约束条件,这也是这一节内容。...二.非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应计算操作中。...2.空属性null 在这个约束中,两个选择: null(默认) not null(不为空) 数据库默认字段基本都是字段允许为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

    21950

    MySQL约束

    约束 约束中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期约束本质是通过技术手段,倒逼用户,插入正确数据。...反过来,在 mysql 角度,凡是插入进来数据,都是符合数据约束约束最终目的就是保证数据完整性和可预期性。因此我们需要更多约束条件!...七、唯一键 唯一键:unique;一张中有往往很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键;唯一键就可以解决中有多个字段需要唯一性约束问题。...所以以上两张表现在只有关联关系,却没有约束关系,是问题!外键就很好地解决了这个问题,外键就是为这两张建立外键约束。 那么我们要为哪个添加外键约束呢?...建立外键本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql 不允许你插入。

    14610

    MYSQL约束

    我们看到zerofill关键字在有效数据前会用0来填充,直至设定宽度。...自增长特点: 任何一个字段要做自增长,前提是本身是一个索引(key一栏值) 自增长字段必须是整数 一张最多只能有一个自增长 关键字:auto_increament 案例: create table...索引: 在关系数据库中,索引是一种单独、物理数据库中一列或多列值进行排序一种存储结 构,它是某个中一列或若干列值集合和相应指向中物理标识这些值数据页逻辑指针清单。...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 七、唯一键 一张中有往往很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯一键。

    24440

    MySql约束

    中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期约束本质是通过技术收到逼迫程序员插入正确数据,反过来,站在mysql视角,凡是插入进来数据,都是符合数据约束。...站在正常业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库时候,一定要在中进行限制,满足上面条件数据就不能插入到中。...OK, 1 row affected (0.00 sec) 唯一键unique 一张中有往往很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...因为此时两张在业务上是相关性,但是在业务上没有建立约束关系,那么就可能出现问题。 解决方案就是通过外键完成。...建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。

    20630

    数据库技术:MySQL 基础和 SQL 入门,约束和事务

    MySQL 中管理着很多数据库,在实际开发环境中 一个数据库一般对应了一个应用,数据库当中保存着多张,每一张对应着不同业务,中保存着对应业务数据。...Show Database -- 切换数据库 从db1 切换到 db1_1 USE db1_1; -- 查看当前正在使用数据库 SELECT DATABASE(); -- 查看Mysql中有哪些数据库...查看当前正在使用数据库 show databases; -- 查看 MySQL 中都有哪些数据库 show create database 数据库名; -- 查看一个数据库定义信息 Alter Database...违反约束不正确数据,将无法插入到中。 Primary Key -- 主键约束 主键约束是不可重复、唯一、非空,用来表示数据库每一条记录。...主键约束与唯一约束区别:1. 主键约束是唯一且不能够为空,唯一约束是唯一但可以为空;2. 一个中只能有一个主键,但是可以多个唯一约束

    1.5K20

    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,但是不能是不存在外键值。 ?...employee (NAME, age, dep_id) VALUES ('小王', 18, 2); SELECT * FROM employee; SELECT * FROM department; 因为外键约束

    14.3K21

    MySQL约束

    一 介绍 约束条件与数据类型宽度一样,都是可选参数 作用:用于保证数据完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该主键,可以唯一标识记录 FOREIGN...,被约束字段必须同时被key约束 #不指定id,则自动增长 create table student( id int primary key auto_increment, name varchar(...:工号  姓名  部门 公司3个部门,但是1个亿员工,那意味着部门这个字段需要重复存储,部门名字越长,越浪费 解决方法: 我们完全可以定义一个部门 然后让员工信息关联该,如何关联,即foreign...id外键到丈夫id #多对多 三张:出版社,作者信息,书 多对多:一个作者可以写多本书,一本书也可以多个作者,双向一对多,即多对多    关联方式:foreign key+一张新 ===...,一个客户可能变成一个学校,即一对一关系 关联方式:foreign key+unique #一定是student来foreign keycustomer,这样就保证了: #1 学生一定是一个客户

    4.8K60

    MySQL完整性约束

    概览   为了防止不符合规范数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定约束条件对数据进行监测,使不符合规范数据不能进入数据库,以确保数据库中存储数据正确、有效...约束条件与数据类型宽度一样,都是可选参数,主要分为以下几种: # NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY...AUTO_INCREMENT 约束字段为自动增长,被约束字段必须同时被key约束 ? ?...返回顶部 FOREIKEY 多表 : 假设我们要描述所有公司员工,需要描述属性有这些 : 工号 姓名 部门 公司3个部门,但是1个亿员工,那意味着部门这个字段需要重复存储,部门名字越长,越浪费...Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 父变更时,子表将外键列设置成一个默认值 但Innodb不能识别

    3.5K20

    MySQL 学习(二)常见数据库哪些

    那我们再来看下其他几款数据库管理软件。 排名第一 Oracle,它是一个商业关系型数据库管理软件,公司名字也叫做 Oracle。Oracle 功能丰富,但是收费也比较高。...排名第四是 PostgreSQL,稳定性极强,最符合 SQL 标准,和 MySQL 一样,开放源码,现在也是非常流行数据库。...关系型数据库英文名是 RDBMS,R 代表 Relationship,从之前 数据库 排名中,我们可以看出来,关系数据库绝对是数据库管理系统主流,使用最多 Oracle、MySQL、SQL Server...关系型数据库模型就是把 复杂数据结构归结为 简单二元关系,类似图中 excel 表格。 关系型数据库以 行和 列形式来存储数据,我们查询出来数据其实就是一个列表,包含了列名和行数据。...关系型数据库很多好处,比如支持非常复杂关联查询,就是说可以用 SQL 语句来支持查一张或多张有关联关系。 还支持事务,就是说 关系型数据库可用性和稳定性得到了保证。

    2.5K40

    mysql常见选项和约束

    约束主要是防止非法数据进入中,保证数据正确性和一致性,统称为数据完整性 约束也可以防止一个被删除 MySQL约束保存在information_schema.table_constraints中...主键是用来唯一标识每一行,类型一般为整型或者字符串 具有主键约束列不允许null值,不允许重复值 每个最多只允许一个主键,可定义联合主键,主键名总是PRIMARY 联合主键 用几个列来进行唯一标识一行...参照完整性约束,保证一个或两个之间参照完整性,外键是构建于一个两个字段或者是两个两个字段之间参照关系 注意: 具有外键约束值不能随便给,必须满足外键所引用主键取值 一张中可以定义多个外键...MySQl中可以使用check约束,但是check约束对数据验证没有任何作用。...Oracle中国可以使用check约束相应作用 mysql> create table test_ck( -> id int check(id>0) -> ); mysql

    14510

    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...一个中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键一部分)。...当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值2倍,例如,符号为-128~+127,无符号为0~256。

    5.7K40

    MySql学习笔记(一)- 类型哪些,怎么用?

    天天在用mysql,你说sql什么学,但是面试官说你学都是皮毛。怎么样?...所以说一张就是一棵树,那么这个树类型哪些?这也就是我们标题所示类型。 那么具体类型哪些?...mysql基本类型MyISAM、InnoDB、DBD、MEMORY、MERGE、EXAMPLE、NDB CLUSTER、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。...使用命令:show engines可以查看当前数据库支持类型,从下图可以看出,我这个数据库不支持BDB,也就是说事务型库也之后InnoDB了。 ?...因为membory是内存,所以重启服务之后数据就没有了。在mergeDB上其实是一种逻辑,相当于将myisam联合到了一起,其优点是可以改善限制。

    2.4K30
    领券