MySQL约束类型及举例介绍

约束

  • 约束保证数据的完整性和一致性
  • 约束分为表级约束和列级约束
  • 约束类型包括:NOT NULL (非空约束),PRIMARY KEY(主键约束),UNIQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN(外键约束)

1.主键约束

  • PRIMARY KEY
  • 每张数据表只能存在一个主键
  • 主键保证记录的唯一性,主键的值不重复
  • 主键自动为 NOT NULL

举例,创建一张student表,将学号设置为主键创建完表之后,通过SHWO COLUMNS FROM student查看表结构

CREATE TABLE student(
id int PRIMARY KEY,
stu_name varchar(20)
);

2.唯一约束

  • UNIQUE KEY
  • 唯一约束可以保证记录的唯一性
  • 唯一约束的字段可以为空值(NULL)
  • 每张数据表可以存在多个唯一约束

举例,创建一个teacher表,id字段自增,tea_name唯一

CREATE TABLE teacher(
id int AUTO_INCREMENT PRIMARY KEY,
tea_name varchar(20) NOT NULL UNIQUE KEY
);

3.默认约束

  • DEFAULT
  • 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值

举例,创建一张course表,默认上课时间为40分钟

CREATE TABLE course(
id int AUTO_INCREMENT PRIMARY KEY,
cou_name varchar(20) NOT NULL UNIQUE KEY,
time int DEFAULT 40
);
INSERT INTO course(cou_name) values('语文');

4.非空约束

  • NOT NULL
  • 强制列不能为 NULL 值,约束强制字段始终包含值。
  • 这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

举例,在 "Persons" 表创建时在 Id列、name列创建 not null 约束:

create table Persons(
id int not NULL,
p_name varchar(20) not null,
deparment varchar(20),
address varchar(20),
telNum varchar(20)
)
DESC Persons;

5.外键约束

  • FOREIGN KEY
  • 保持数据的一致性,完整性
  • 实现1对1或1对n关系

1.父表与子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能是InnoDB
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

CREATE TABLE school(
id int AUTO_INCREMENT PRIMARY KEY,
sname varchar(20) NOT NULL
);
CREATE TABLE student2(
id int AUTO_INCREMENT PRIMARY KEY,
sid int,
FOREIGN KEY (sid) REFERENCES school(id)
);

外键约束的参照操作

  • CASCADE : 从父表删除或更新且自动删除或更新子表中匹配的行
  • 父表中被引用的列删除了某个数据,子表中删除对应数据的行
CREATE TABLE student3(
id int AUTO_INCREMENT PRIMARY KEY,
sid int,
FOREIGN KEY (sid) REFERENCES school(id) ON DELETE CASCADE
);
  • SET NULL:从父表删除或更新行,并设置子表的外键列为NULL。如果使用该项,必须保证子表列没有指定NOT NULL
  • 父表中删除数据,将子表中的引用设置为NULL
  • RESTRICT:拒绝对父表的删除或更新操作
  • NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • MySQL外键约束常见操作方法示例【查看、添加、修改、删除】

    本文实例讲述了MySQL外键约束常见操作方法.分享给大家供大家参考,具体如下: 1. 查看数据库表创建的sql语句 show create table vip 2. 查看外键的约束名 CREATE TABLE `vip` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(255) DEFAULT NULL, `code` varchar(255) DEFAULT NULL, `mobile` varchar(255) DEFAUL

  • 详解MySQL中的外键约束问题

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. MySQL外键约束条件

  • MySQL导出所有Index和约束的方法

    本文汇总了MySQL导出所有Index 和 约束的方法,提供给大家以方便大家查询使用.具体如下: 1. 导出创建自增字段语句: SELECT CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', 'MODIFY COLUMN `', COLUMN_NAME, '` ', IF(UPPER(DATA_TYPE) = 'INT', REPLACE( SUBSTRING_INDEX( UPPER(COLUMN_TYPE), ')', 1 ), 'INT', 'INTEG

  • MySQL 添加、修改、删除表的列及约束等表的定义

    ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_stude

  • 基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. #数据约束 #五种完整性约束: #NOT NULL :非空约束,指定某列不能为空: #UNIQUE : 唯一约束,指定某列或者几列组合不能重复 #PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 #FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完

  • MySQL删除有外键约束的表数据方法介绍

    在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...) 这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. 禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0; 然后再删除数据 启动外键约束,我们可以使用: SETFOREIG

  • MySQL中的唯一性约束与NULL详解

    前言 之前做的一个需求,简化描述下就是接受其他组的 MQ 的消息,然后在数据库里插入一条记录.为了防止他们重复发消息,插入多条重复记录,所以在表中的几个列上加了个唯一性索引. CREATE UNIQUE INDEX IDX_UN_LOAN_PLAN_APP ON testTable (A, B, C); 这时 A,B,C 三列都是不允许 NULL 值的,唯一性约束也是 work 的. 后来由于需求的变化,修改了以前的唯一性约束,又多加了一列.(至于为什么加就不赘述了). ALTER TABLE

  • MySQL中主键为0与主键自排约束的关系详解(细节)

    前言 本文主要介绍了关于MySQL主键为0与主键自排约束的关系,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 开始不设置主键表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增: Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样: 现在主键是没有0的,如果把某个id改成0的话,0不会变!直接会进行排序: 再insert一个id=0的看看,居然还是跟刚才一样直接跟行数相关! 再重置一下自动排序,看看这个0会不

  • MySQL删除表的时候忽略外键约束的简单实现

    删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心.但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情:另外在测试的时候,也有需要重新创建数据库的所有表.当然很多自动化工具也可以做这样的事情. 删除表的时候有时会遇到这样的错误消息: ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 这是因为你尝试删除的表中的

  • MySQL学习笔记4:完整性约束限制字段

    完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果比如字段含有默认值,不能是NULL等 直观点说:如果插入的数据不满足限制要求,数据库管理系统就拒绝执行操作 设置表的主键 主键能够标识表中每条信息的唯一性,如同身份证号码和人的关系 人可以同名,但是身份证号码却是唯一的, 创建主键的目的在于快速查找到表中的某一条信息 单字段主键 复制代码 代码如下: mysql> create table student( -> id int primary key, -> name varch

随机推荐