数据库的完整性约束用来防止对数据的意外破坏,来保证数据的安全性和一致性。

主键

1.创建表时候指定主键

创建表user(id, username, age),并且id字段非空自增。

CREATE TABLE user(
id BIGINT(20) NOT NULL AUTO_INCREMENT
,username VARCHAR(16) NOT NULL
,age TINYINT
,PRIMARY KEY(id)
);

给数据库插入3条字段。

2.修改表中字段为主键

创建表user1(id, username),不设置主键,通过修改设置主键。

CREATE TABLE user1(
id BIGINT(20)
,username VARCHAR(16) NOT NULL
);
ALTER TABLE user1
ADD PRIMARY KEY(id)
,MODIFY id BIGINT(20) AUTO_INCREMENT;

通过SHOW INDEX FROM user1查看表user1的主键,可以看到有一个名字为PRIMARY的主键索引。

3.删除主键

删除表user1中的主键,如果主键为自增,那么还需要将自增去掉。

ALTER TABLE user1
DROP PRIMARY KEY
,MODIFY id BIGINT(20);

外键

外键用来指定参照完整性约束,被指定为外键的列必需要有索引,外键参考列必需为另一个表的主键。

1.创建表的时候指定外键

创建表article(id, u_id, article_name),u_id为该表的外键,引用user表中的id。

CREATE TABLE article(
id BIGINT(20) NOT NULL AUTO_INCREMENT
,u_id BIGINT(20) NOT NULL
,article_name VARCHAR(16) NOT NULL
,PRIMARY KEY(id)
,CONSTRAINT fk_user_article_uid FOREIGN KEY (u_id) REFERENCES user(id)
);

通过SHOW INDEX FROM article查看索引,可以看到该表中有两个索引。

2.修改表时添加外键约束

修改的时候表中如果有记录就会出错。

ALTER TABLE article
ADD CONSTRAINT fk_user_article_uid FOREIGN KEY(u_id) REFERENCES user(id);

添加了外键之后,再插入不存在user的id值的u_id字段就会出错。

3.删除外键

ALTER TABLE article
DROP FOREIGN KEY fk_user_article_uid;

通过SHOW INDEX FROM article可以看到,虽然外键被删除,但是之前设置为外键的列依然有索引。



这时再进行插入操作,插入在user表中不存在的u_id值,这时可以成功地进行插入。

INSERT INTO article(u_id, article_name)
VALUES (4, 'article4');

唯一

1.创建表的时候创建唯一约束条件

第一种方法,这种方法不能指定唯一索引的名字。

CREATE TABLE test1(
id BIGINT(20) NOT NULL AUTO_INCREMENT
,test1 INT UNIQUE KEY
,PRIMARY KEY(id)
);

查看索引,可以看到唯一索引的名字与字段名相同。



如果插入相同的test1,就会报错。

第二种方法,可以制定唯一索引的名字

CREATE TABLE test1(
id BIGINT(20) NOT NULL AUTO_INCREMENT
,test INT
,PRIMARY KEY(id)
,UNIQUE KEY uk_test(test)
);

通过查看索引可以看到,非空索引的名称是设定的名称。

2.修改表时添加

ALTER TABLE test1
ADD UNIQUE uk_test(test);

3.删除

ALTER TABLE test1
DROP INDEX uk_test;

非空

1.创建表的时候指定

CREATE TABLE test(
id BIGINT(20) NOT NULL AUTO_INCREMENT
,test1 INT NOT NULL
,PRIMARY KEY(id)
);

2.修改删除

删除非空

ALTER TABLE test
MODIFY test1 INT;

添加非空

ALTER TABLE test
MODIFY test1 INT NOT NULL;

总结

上述的四种约束性添加中,主键、外键、唯一在创建时就直接建立了该列的索引,非空是与索引无关的,不过非空字段也是可以建立索引的。

MySQL中的完整性约束条件(主键、外键、唯一、非空)的更多相关文章

  1. EF中主表和附表一起提交的话,如果主附表的主键外键已经设定。

    EF中主表和附表一起提交的话,如果主附表的主键外键已经设定,如果新增同时新增主表和附表的记录,那么在EF同时提交时,不需要人为的设定附表的主表的主键值,EF会自动为附表添加外键值.

  2. 通过 jdbc 分析数据库中的表结构和主键外键

    文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hib ...

  3. java面试一日一题:mysql中的自增主键

    问题:请讲下mysql中的自增主键 分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置 回答要点: 主要从以下几点去考虑 1.什么自增主键 2.使用场景是什么: 3.innodb_a ...

  4. Sql Server 主键 外键约束

    主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如果为 ...

  5. 第15课-数据库开发及ado.net-数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库

    第15课-数据库开发及ado.net 数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库 1.  学习方法 2.  多涨见识 3.  比自己强的人一起,学习更强:比自己更聪明的人 ...

  6. 关系型数据库——主键&外键的

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  7. PowerDesigner中CDM和PDM如何定义外键关系

    有A.B两张表(实体),各自有id作为主键,两表是一一对应关系.但略有不同: A表一条记录可以对应0或1条B表记录,B表一条记录必须对应唯一条A表记录. 这样的关系如何在CDM或PDM中定义? 在最后 ...

  8. Django笔记&教程 4-3 模型(models)主键外键

    Django 自学笔记兼学习教程第4章第3节--模型(models)主键外键 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref/models ...

  9. Mysql主键外键操作

    外键: ·一对多 ·多对多 ·一对一 ·修改表 ·复制表   主键:   rimary key auto_increment(primary key是主键通常和auto_increment自动增加混合 ...

随机推荐

  1. QT第六天学习

    基本事件: 鼠标事件 键盘事件 绘制事件 1.QT中的事件: 事件是对各应用程序需要知道的由应用程序内部或外部产生的事情或动作的通称. QT中事件的处理: 在QT中使用一个对象来表示一个事件,继承自Q ...

  2. iOS 登陆之界面设置

    1.界面构成 1.1. 效果图 1.2. 元素 背景图 用户名的输入框 密码的输入框 登陆按钮 忘记密码 用户注册 第三方登陆 两个分割线

  3. JavaWeb三层结构---课设02

    收获总结 1三层架构模式 区分层次的目的即为了“高内聚,低耦合”的思想 分层介绍: Javaweb设计分为三层:数据访问层,业务逻辑层和表示层. 数据访问层:只提供对基本数据的访问,不涉及任何的业务逻 ...

  4. JSP EL表达式 获得 request的GET/POST方法

    JSP EL表达式 获得 request的GET/POST方法: 不在requestScopse中: <p>得到request的方法</p> <p>pageCont ...

  5. OpenCV框架介绍

    OpenCV框架介绍 概述 OpenCV是一个开放源代码的计算机视觉应用平台,由英特尔公司下属研发中心俄罗斯团队发起该项目,开源BSD证书,OpenCV的目标是实现实时计算机视觉,,是一个跨平台的计算 ...

  6. salesforce 零基础学习(六十五)VF页面应善于使用变量和函数(一)常用变量的使用

    我们在使用formula或者validation rules等的时候通常会接触到很多function,这些函数很便捷的解决了我们很多问题.其实很多函数也可以应用在VF页面中,VF页面有时候应该善于使用 ...

  7. windows visual studio 2015安装

    下载 首先到微软官方下载在线安装文件 https://www.microsoft.com 运行安装 点击运行后选择 自定义 选择安装功能,把sql server去掉,是数据库插件 点击下一步,中途会提 ...

  8. 对JavaScript中this的理解

    JavaScript中的this其实没传说中的那么难,也没那么乱. 我们来分析下,this主要是跟它的执行环境有关. 而通常情况下,this都是放在函数体中或可执行的JS代码中(函数体除外). 至于J ...

  9. Unity编程标准导引-1.2官方资源介绍

    1.2.官方资源介绍 Unity官方提供了丰富的学习和参考资源,有以下类别: Unity手册以及API文档 Unity的官方教程 AssetStore 1.2.1 Unity手册以及API文档 前述文 ...

  10. 获取url地址参数值

    获取url地址参数值方法: function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + &q ...