MySQL数据库约束操作示例讲解

目录
  • 一、约束是什么
  • 二、约束的具体操作
    • Not NULL
    • UNIQUE
    • 约束的组合使用
    • PRIMARY KEY
    • DEFAULT
    • FOREIGN KEY

一、约束是什么

约束就是,在创建表的时候,对表设置一些规则,只有满足这些规则,才可以插入数据,我们把这些规则叫做约束

常见的约束有:

约束类型 规则
Not Null 指定某列不能存储NULL值
UNIQUE 保证某列的每行必须有唯一的值
DEFAULT 给没有赋值的列赋默认值
PRIMARY KEY Not NULL 与 UNIQUE的结合,一个表的特定记录
FOREIGN KEY 保证一个表匹配另一个表的值,遵守参照完整性
CHECK 保证列符合指定条件

数据库约束是数据库的一个重要功能,数据的 “完整性”(正确的数据)可以通过人工的方式进行确定,但人工还是有一点的缺陷,约束,就是让数据库帮助我们更好的检查数据是否正确

二、约束的具体操作

Not NULL

 create table stu(
 id int,
 name varchar(50),
 sex char(3)
 );

当我们建一个表时,是允许为NULL的,如果我们不允许这一列为空时,我们就需要加上Not NULL约束。

 create table stu(
 id int not null,
 name varchar(50),
 sex char(3)
 );

当我们加上约束时,可以发现id这一列不允许为空,我们试着插入一个为NULL的id试一下。

当我们插入的id为空时,系统会报id 这一列不能为空的错误。

当我们插入一个非NULL的数据时,可以成功插入。

UNIQUE

在我们某些业务需要中某些列的数据不能够重复,比如: 我们每个人的身份证号,大学生的学号,这些数据是唯一标识性的不能够重复。

 create table stu(
 id int unique,
 name varchar(50),
 sex char(3)
 );

这里的UNI == unique.

我们试着插入一下数据看看。

我们可以发现再插入不同的id数据时是可以正常插入的,当我们再次插入已经出现过的id时,系统会报一个重复条目的错误。

一个小小的思考,数据库是如何判断你当前这一条记录是否为重复的?

当然是先去查找,然后再去插入。

有的同学肯定会说,加上约束之后,数据库的执行速度不就大大的下降了,这里的查找是(借助索引进行查找的,效率相对比较高,后面我们会介绍索引的相关知识),执行效率确实受到了一定的影响,但比起手工去检查,代价小的很多。

约束的组合使用

约束不仅可以单独使用,而且可以多个组合起来对某一列进行约束。

比如同时加上: Not NULL 和 unique(这里注意的是多个约束之间用空格间隔开,而不是逗号).

我们可以发现约束之间用逗号间隔会报错。

我们可以发现当我们同时使用 Not NULL 和 unique约束时,出现了一个PRI,PRI == primary key,这是什么我们往下看。

PRIMARY KEY

主键约束就是: not null + unique.

我们试着插入几组数据。

我们可以发现主键列不能插入NULL类型的数据。

我们可以发现主键列插入不同的数据是OK的,如果插入相同的数据,就会报错。

主键也同样是在插入记录的时候,先查询,在插入:

正因为主键和unique都有先查询的过程,mysql就会默认给这些列添加索引,提高查询速度。

我们可以简单来验证一下,我们可以发现id列确实存在索引。

主键的注意事项:

1.在开发过程中,大部分的表都会存在一个主键,逐渐往往是一个整数类型的id.

2.在mysql中,一个表里,只能存在一个主键,不能多个。

3.mysql允许将多个列共同作为一个主键(联合主键)

4.mysql有自带的"自增主键"(主键需要保证不重复,如果我们手动生成的话比较困难,这时我们就可以让mysql自动帮我们生成。

-- 设置自增主键
create table stu(id int primary key auto_increment);

当我们将某一列设置为自增主键时,如果需要系统自动生成的话,我们插入null即可, 这里的null不是说把这个值设置为Null,而是交给数据库使用自增主键。

每一个插入数据时,mysql都会找到上一条记录,自增。

我们也可以插入指定值。

我们可以发现,当我们指定值插入后,在使用自增主键,并不会去利用中间空余的间隙,而是参照最大值进行自增。(这里其实是我们很常见的一个用空间换取时间的行为).

如果mysql的数据量非常大时,自增主键还可以使用吗?如果可以使用,又是如何分配呢?

当我们数据量较小时,所有的数据都在mysql服务器当中存储。

但是如果mysql的数据量很大时,一台主机可能放不下,就需要进行分库分表的操作。

当数据过多时,就需要分库分表,实际上就是把一个大的表分为多个小的表,每个服务器存取一部分数据。

这里我们就分为三个服务器进行存储,每个服务器的表占各自的比例,三个服务器中的主键值是不能重复的。

三个服务器中的表的自增主键id是如何分配?

这里涉及到"分布式系统唯一id生成算法"

大概公式是: 时间戳 + 主机编号 + 随机因子 > 这三部分得到一个全局唯一的id

DEFAULT

在某些情况下,有些列的值大多数都是重复的,比如一个班的30个人,28个是男生,只有两个女生,那么我们就可以把性别列默认值设置为"男".

create table stu(id int primary key,name varchar(50),sex char(3) default '男');

我们可以看到性别这一列默认为男。

我们可以发现当我们没有插入sex这一列,自动为默认值’男’.

FOREIGN KEY

外键约束是建立在两张表之间的约束。

比如每个班的同学的班级号都是一样的,我们就可以用班级号来建立班级表和学生表之间的约束.

create table class(classId int primary key,name varchar(50));

我们先创建一个班级表,插入一组数据。

create table stu(id int primary key,name varchar(50),classId int,foreign key(classId) references class(classId));

这个是外键约束的语法。

外键约束的含义时,stu表中的classId必须在class表中是存在的。

当我们插入class存在的classid为001的数据可以成功插入。

当我们插入的classId在class中不存在时,就会插入失败。

此处起到约束的class表是"父表(parent)",被约束的表叫做"子表(child).

实则不然,我们子表对父表也产生了一定的约束。

我们可以发现,无法删除外键约束的父表。

这也很好理解,如果父表删除了,子表的数据去哪里参考,如果想删除,可以先删除子表,在删除父表。

我们可以发现当父表相应列不是主键时,无法建立外键约束,这是为什么呢?

因为每次再给子表插入时,都会先在父表先查询这个id是否存在,如果表的数据十分大时,效率十分地低,要使用索引。

要想创建外键,就要求父类相应的列,有primary 或者 unique约束

到此这篇关于MySQL数据库约束操作示例讲解的文章就介绍到这了,更多相关MySQL数据库约束内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL 数据库的约束及数据表的设计原理

    目录 1. 数据库的约束 1.1 介绍 1.2 约束类型 1.3 not null 1.4 unique 1.5 default 1.6 primary key 1.7 foreign key 1.8 check 2. 数据库表的设计 2.1 一对一关系 2.2 一对多关系 2.3 多对多关系 1. 数据库的约束 1.1 介绍 数据库中的约束 ,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性. 这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用

  • Mysql关于数据库是否应该使用外键约束详解说明

    一.前言 对于[是否使用外键约束]这个话题已经是老生常谈的了.在学校中,老师交给我们的大多是需要我们建立外键约束,但进入了实际工作很多时候并不会使用外键,而是通过代码逻辑来控制.包括在阿里的JAVA规范中也明确规定:[强制]不得使用外键与级联,一切外键概念必须在应用层解决. 为什么要做这样的规定呢?到底该不该使用外键约束呢?我们可以举一个例子来说明 二.举例说明 现在我们在数据库中建立了两张表:[product和project],[project]的porduct字段,关联Product,他们之

  • MySQL学习之数据库表五大约束详解小白篇

    目录 1.约束概念和分类 2.五大约束的添加和删除 2.1添加约束的六种方法 2.2三种删除约束的方式 2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2) 2.4对于创建约束的总结 2.5对于主键和唯一的区别 3.自增长列 3.1概念 3.2在创建表的时候添加主键约束,并且完成主键自增长的例子 3.3自增长的添加和删除 3.4设置自增长步长 1.约束概念和分类 1.1约束的概念: 对表中的数据进行限定,保证数据的正确性,有效性,完整性 1.2约束分类 1.主键约束(primary k

  • MySQL数据库多表操作通关指南(外键约束和多表联合查询)

    目录 1 多表关系 2 外键约束(FOREIGN KEY) 2.1 外键约束说明 2.2 外键约束的创建 2.3 外键约束实操:一对多关系 2.4 删除外键约束 2.5 外键约束实操:多对多关系 3 多表联合查询 3.1 联合查询的简介和分类 3.2 联合查询数据准备 3.3 交叉联合查询 3.4 内连接查询 3.5 外连接查询 3.6 子查询 3.6.1 子查询说明与实操 3.6.2 子查询中的关键字 3.7 自关联查询 写在最后 1 多表关系 一对一关系 比如:一个人有一个身份证,一个身份证

  • MySQL示例讲解数据库约束以及表的设计

    目录 数据库约束 not null unique default primary key 主键 foreign key 外键 check 表的设计 一对一 一对多 多对多 数据库约束 not null 指定某列的存储不能为null值 create table student (id int not null,name varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> desc student; +-------+---------

  • MySQL数据库约束详解

    目录 基本介绍 1.primary key(主键) 细节说明 2.not null(非空) 3.unique(唯一) unique细节 4.foreign key(外键) foreign key(外键) 语法 外键细节说明 5.check check 6.练习 7.自增长 基本介绍 约束用于确保数据库的数据满足特定的商业规则 在mysql中,约束包括:not null,unique,primary key,foreign key 和check 5种 1.primary key(主键) 字段名 字

  • MySQL数据库表约束讲解

    目录 MySQL数据库表约束 一.主键约束 二.外键约束 三.非空约束 四.唯一约束 五.默认约束 六.自增约束 数据库建表的约束条件 常用约束条件及简单介绍 MySQL数据库表约束 为了防止往数据表中插入错误的数据,在MySQL中,定义了一些维护数据库完整性的规则,即表的约束. 常见的表的约束: 上表中列举的约束条件都是针对表中字段进行限制, 从而保证数据表中数据的正确性和唯一性. 一.主键约束 在MySQL中,为了快速查找表中的某条信息,可以通过设置主键来实现.主键约束是通过PRIMARY

  • MySQL数据库如何给表设置约束详解

    目录 一.PK(主键约束) 1.什么是主键? 2.怎么设置主键? 二.FK(外键约束) 1.什么是外键 2.怎么设置外键 三.unique(唯一约束) 1.什么是唯一约束? 2.如何设置唯一约束 四.notnull(非空) 五.default(默认值) 六.auto_increment(自增) 一.PK(主键约束) 1.什么是主键? 在了解主键之前,先了解一下什么是关键字 关键字:在表中具有唯一性的字段,比如一个人的身份证号,学号.一个表中可以有多个关键字. 主键也叫主关键字,就是由一个或多个关

  • MySQL数据库的约束限制详解

    目录 一.介绍 二.操作 添加 删除 外键联级操作 一.介绍 数据库的约束是对表中数据进行的一种限制,为了保证数据的正确性.有效性.完整性. 无论是在添加数据还是在删除数据的时候,都能提供帮助.所有的关系型数据库都支持对数据表的约束. 主键:唯一标识一条记录,不能重复,不允许为空.主要用来保证数据的完整性. 外键: 表的外键是另一表的主键,外键可以有重复,可以为控制.主要用来和其他表建立联系. 二.操作 添加 添加主键: // 一般设置id为主键 CREATE TABLE student( id

  • MySQL数据库约束操作示例讲解

    目录 一.约束是什么 二.约束的具体操作 Not NULL UNIQUE 约束的组合使用 PRIMARY KEY DEFAULT FOREIGN KEY 一.约束是什么 约束就是,在创建表的时候,对表设置一些规则,只有满足这些规则,才可以插入数据,我们把这些规则叫做约束 常见的约束有: 约束类型 规则 Not Null 指定某列不能存储NULL值 UNIQUE 保证某列的每行必须有唯一的值 DEFAULT 给没有赋值的列赋默认值 PRIMARY KEY Not NULL 与 UNIQUE的结合,

  • MySQL数据库事务transaction示例讲解教程

    目录 1.什么是事务? 2.和事务相关的语句只有这3个DML语句:insert.delete.update 3.假设所有的业务都能使用1条DML语句搞定,还需要事务机制吗? 4.事务的原理 5.事务的四大特性:ACID 6.关于事务之间的隔离性 1)第一级别:读未提交(read uncommitted) 2)第二级别:读已提交(read committed) 3)第三级别:可重复读(repeatable read) 4)第四级别:序列化读/串行化读(serializable) 7.演示事务的隔离

  • Android连接MySQL数据库并进行增删改查操作示例讲解

    1.Android 连接MySQL数据库 public class DBOpenHelper { private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动 private static String url = "jdbc:mysql://IP:3306/数据库";//MYSQL数据库连接Url private static String user = "root";//用

  • MySQL数据管理操作示例讲解

    目录 外键 DML语言 添加 insert 修改 update 删除 delete 外键 方式一:在创建表的时候,增加约束 删除有外键的表的时候,要先删除引用外键的表 物理外键:不建议使用,数据库级别的外键,不建议使用!(避免数据库过多造成困扰) 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段) 我们想使用多张表的数据,想使用外键,用程序去实现即可 DML语言 数据库的意义:数据管理,数据存储 DML语言:数据操作语言 insert  update  delete 添加 insert

  • ASP.NET操作MySql数据库的实例代码讲解

    一.把MySql.Data.dll放到BIN目录下. 二.这是aspx.cs的全部源码,修改参数直接运行即可!   using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; publ

  • MySQL transaction事务安全示例讲解

    目录 事务安全 transaction 事务基本原理 自动事务 手动事务 事务的使用 回滚点 事务的特点 事务安全 transaction 事务 transaction 访问可能更新数据库中各种数据项的一个程序执行单元unit 事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成 事务基本原理 MySQL允许将事务统一进行管理(存储引擎innodb),将用户所做的操作,暂时保存起来,不直接放到数据表(更新),等到用户确认结果之后再

  • MySQL六种约束的示例详解(全网最全)

    目录 一.概述 二.约束演示 三.外键约束 1. 什么是外键约束 2. 不使用外键有什么影响 3. 添加外键的语法 4. 删除/更新行为 5. 演示删除/更新行为 四.主键id到底用自增好还是uuid好 五.实际开发尽量少用外键 一.概述 概念: 约束是作用于表中字段上的规则,用于限制存储在表中的数据. 目的: 保证数据库中数据的正确.有效性和完整性. 分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束. 二.约束演示 上面我们介绍了数据库中常见的约束,以及约束涉及到的关

  • MySQL数据库常用操作技巧总结

    本文实例总结了MySQL数据库常用操作技巧.分享给大家供大家参考,具体如下: 一.查询不同表中同名字段(表连接查询条件神器) use information_schema; select * from columns where column_name='字段名'; 二.查询记录总数 SELECT SQL_CALC_FOUND_ROWS * FROM TABLE WHERE 1=1; 即可得出总数据行数 SET @RowCount=found_rows(); 三.存储过程数据查询分页 预定义变量

  • python实现与Oracle数据库交互操作示例

    目录 1.安装准备 2.instantclient的安装说明 3.instantclient安装步骤 4.还有几个需要注意的地方 1)设置NLS_LANG环境变量:解决中文乱码 2)关于TNS_ADMIN环境变量的说明 3)关于python中,cx_Oracle驱动包的安装 5.python操作Oracle数据库 1)python连接数据库的3种方式 2)查询数据-查 1.安装准备 ① 正确安装好Oracle数据库(我的电脑是64位的,但是我最开始安装的是Oracle32.因此,你要是有64位的

  • MySQL数据分析存储引擎示例讲解

    目录 1.引入案例 2.查看系统默认的存储引擎和默认字符集 3.常见的存储引擎 1)MyISAM:不支持事务.(张马虎) MyISAM的优缺点: 2)InnoDB:支持事务.(李小心) InnoDB的优缺点: 3)MEMORY(这个了解一下就行了) MEMORY的优缺点: 4.下面这张图了解就行 今天我们来说说MySQL存储引擎,作为从事数据分析行业的朋友老说,我们不必细究MySQL存储引擎到底什么,我们了解就行了. 1.引入案例 有张马虎.李小心两个人,都是地铁口的自行车管理员,每天都有很多人

随机推荐