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. npm与cnpm的区别

    NPM(Node Package Manager,节点包管理器)是NodeJS的包管理器,用于节点插件的管理(包括安装,卸载和管理依赖等).NPM是随同新版的NodeJS一起安装的包管理工具,所以我们 ...

  2. golang 处理 json 结构体

    首先 我们来看一下这个json 字串 { "resp": { ", "respMsg": "成功", "app" ...

  3. 深入selenium三种等待方式使用

    深入selenium三种等待方式使用 处理由于网络延迟造成没法找到网页元素 方法一 用time模块不推荐使用 用time模块中的time.sleep来完成等待 from selenium import ...

  4. git如何合并远程2个分支

    1,先检出项目到一个文件夹git clone 2,你检出的项目默认是master,所以现在要查看远程全部分支git branch -a * master remotes/origin/HEAD -&g ...

  5. [browser window窗口大小 算是screen补充吧]主要因为移动IE游览器 写了个兼容

    先上图吧 来上代码 console.log(window.outerWidth + '--' + window.outerHeight);//只读的整数,声明了整个窗口的XY //IE 不支持此属性, ...

  6. [browser srceen]、很多未知望大神告知、简单写了个拖拽

    未知作用的有.如果也有像我1样好奇的小伙伴了解了麻烦告知 // console.log(window.screen.availWidth);//未知效果 // console.log(window.s ...

  7. 77777 77777(2) WriteUp 绕waf技巧学习

    两个题的代码都是一样的 只是waf不一样 贴出代码 <?php function update_point($p,$point){ global $link; $q = sprintf(&quo ...

  8. pymysql增删改查操作

    表结构 CREATE TABLE `students` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFA ...

  9. 'Specifying a namespace in include() without providing an app_name '

    'Specifying a namespace in include() without providing an app_name ’ 从include()函数可以看出来,这个函数有两个参数,一个a ...

  10. Navicat Premium 破解方法

    最新Navicat Premium12 破解方法,亲测可用 1.下载Navicat Premium 官网https://www.navicat.com.cn/下载最新版本下载安装(文末,网盘地址有64 ...