MySQL学习——约束

摘要:本文主要学习了数据库的约束。

primary key(主键)

定义

主键约束是一个列或者多个列,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

主键约束相当于唯一约束和非空约束的组合,主键约束列不允许重复,也不允许出现空值。

每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。

当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

主键自增

MySQL数据库提供了一个自增的数字,专门用来自动生成主键值,主键值不用用户维护,自动生成,自增数从1开始,以1递增。

使用方式是在主键后面添加 auto_increment 选项。

实例

在创建表时添加单列主键约束,主键自增:

 create table test (
id int(11) primary key auto_increment,
phone int(11),
name varchar(50)
);

在创建表时添加复合主键约束:

 mysql> create table test (
-> id int(11),
-> phone int(11),
-> name varchar(50),
-> primary key(id, phone)
-> );
Query OK, 0 rows affected (0.00 sec) mysql>

在修改表时添加主键约束:

 mysql> alter table test add primary key(id, phone);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql>

在修改表时删除主键约束:

 mysql> alter table test drop primary key;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql>

foreign key(外键)

定义

外键约束用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。

外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。

外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。

外键的主要作用是保持数据的一致性、完整性。

主表和子表

主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。

从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。

实例

创建父表并定义主键约束:

 mysql> create table man (
-> id int(11) primary key,
-> phone int(11),
-> name varchar(50)
-> );
Query OK, 0 rows affected (0.01 sec) mysql>

在创建表时添加外键约束:

 mysql> create table child (
-> id int(11) primary key,
-> manid int(11),
-> phone int(11),
-> name varchar(50),
-> constraint fk_man_id foreign key(manid) references man(id)
-> );
Query OK, 0 rows affected (0.00 sec) mysql>

在修改表时添加外键约束:

 mysql> alter table child add constraint fk_man_id foreign key(manid) references man(id);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql>

在修改表时删除外键约束:

 mysql> alter table child drop foreign key fk_man_id;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql>

unique key(唯一)

定义

唯一约束要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。

实例

在创建表时添加单列唯一约束:

 mysql> create table test (
-> id int(11) primary key,
-> phone int(11) unique,
-> name varchar(50)
-> );
Query OK, 0 rows affected (0.00 sec) mysql>

在创建表时添加多列唯一约束:

 mysql> create table test (
-> id int(11) primary key,
-> phone int(11),
-> name varchar(50),
-> unique(phone, name)
-> );
Query OK, 0 rows affected (0.00 sec) mysql>

在修改表时添加唯一约束:

 mysql> alter table test add unique uk_test_phone(phone);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql>

在修改表时删除唯一约束:

 mysql> alter table test drop index uk_test_phone;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql>

default constraint(默认值)

定义

默认值约束用来指定某列的默认值。

实例

在创建表时添加默认值:

 mysql> create table test (
-> id int(11) primary key,
-> phone int(11),
-> name varchar(50) default 'Test'
-> );
Query OK, 0 rows affected (0.01 sec) mysql>

在修改表时修改默认值:

 mysql> alter table test change column name name varchar(30) default 'none';
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0 mysql>

not null constraint(非空)

定义

非空约束可以用来约束该列的取值不能为空,对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。

实例

在创建表时添加非空约束:

 mysql> create table test (
-> id int(11) primary key,
-> phone int(11),
-> name varchar(50) not null
-> );
Query OK, 0 rows affected (0.00 sec) mysql>

在修改表时修改非空约束:

 mysql> alter table test change column name name varchar(30) null;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql>

MySQL学习——约束的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  3. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  4. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  5. 我的MYSQL学习心得(九) 索引

    我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  6. 我的MYSQL学习心得(十) 自定义存储过程和函数

    我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...

  7. 我的MYSQL学习心得(十六) 优化

    我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  8. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  9. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

随机推荐

  1. css 揭秘-读书笔记

    css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...

  2. Java生鲜电商平台-SpringCloud分布式请求跟踪系统设计与实践

    Java生鲜电商平台-SpringCloud分布式请求跟踪系统设计与实践 Java生鲜电商平台微服务现状 某个服务挂了,导致上游大量报警,如何快速定位哪个服务出问题? 某个核心挂了,导致大量报错,如何 ...

  3. Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限

    场景 Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  4. SAP会计年度变式

       会计年度变式用来确定SAP系统中每个公司的会计记账期间的变式.顾名思议,每个公司的会计年度变式必须与其实际使用的会计年度匹配.     在SAP系统中,每个会计年度最多允许有16个记账期间,其中 ...

  5. java 读取 excel 表格内容

    一.添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...

  6. Spark中持久化和序列化学习

    一.cache和persisit的对比 -rw-r--r--@ 1 hadoop staff 68M 5 17 07:04 access.log    cache/persitence是 laz ...

  7. Fiddler 过滤图片

    fiddler过滤无用图片操作步骤1.在右侧Filters中勾选 Hide if URL contains 2.在 Hide if URL contains 中加入下面一行过滤图片代码 REGEX:( ...

  8. Comet OJ - Contest #8

    Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...

  9. sqlite3 国产化如何添加密码

    sqlite3 国产化如何添加密码 sqlite3 国产化如何添加密码sqlite3 国产化如何添加密码

  10. 图书分享 -《Natural Language Processing with Python》

    -<Natural Language Processing with Python> 链接:https://pan.baidu.com/s/1_oalRiUEw6bXbm2dy5q_0Q ...