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. workerman连接失败方法

    workerman链接失败方法 1 防火墙关闭 2 端口开启 3 改成websocket协议

  2. JAVA CST时间 转换成Date

    Mybatis中处理Oracle时间类型是个比较麻烦的问题,特别是需要用到时间做比较的,可参考以下代码与思路: 格式化CST时间 SimpleDateFormat sdf = new SimpleDa ...

  3. Python笔记:设计模式之状态模式

    状态模式可以看做是在运行时改变对象行为的一种方式.状态模式允许对象在其内部状态变化时改变其行为,此时感觉就像对象本身已经改变了一样. 参与者: State接口:State基类,定义不同状态共同需要执行 ...

  4. webpack + typescript + babel打包*.min.js文件的环境配置

    将多个*.ts文件打包成一个*.min.js文件的开发配置 1.初始化 npm init 新建以下文件目录: 2.安装依赖: "devDependencies": { " ...

  5. vue-cli引用vant使用rem自适应

    摘要 由于需要用到弹出层但是懒得造轮子所以使用vant 介绍 使用的node包管理器为yarn vue-cli版本4 rem计算方式为index.html的js脚本计算 安装vant yarn add ...

  6. Android 单选列表对话框 setSingleChoiceItems

    private Button button; private final CharSequence[] items = { "北京", "上海", " ...

  7. sync.Map与Concurrent Map

    1. sync.Map 1.1. map并发不安全 go1.6以后map有了并发的安全检查,所以如果在并发环境中读写map就会报错 func unsafeMap() { // 创建一个map对象 m ...

  8. 执行 Run manage.py Task 报 AttributeError: 'Command' object has no attribute 'usage'?

    这个问题,是python与Pycharm不兼容导致,解决办法将Pycharm升级最新版本

  9. 缺少控制文件备份时如何还原数据库 (Doc ID 1438776.1)

    How to restore database when controlfile backup missing (Doc ID 1438776.1) APPLIES TO: Oracle Databa ...

  10. java 通过Qrcode生成二维码添加图片logo和文字描述

    /** * 二维码创建 * @author yhzm * */ public class printServiceImpl extends BaseService { public void barC ...