mysql 约束和外键约束实例
1、约束保证数据的完整性和一致性。
2、约束分为表级约束和列级约束。(根据约束所针对的字段的数目的多少来决定)
列级约束:对一个数据列建立的约束
表级约束:对多个数据列建立的约束
列级约束即可以在列定义时声明,也可以在列定义后声明,
表级约束只能在列定义后声明,表级约束很少用到。
3、按照功能来划分,约束类型包括
NOT NULL(非空约束)
PRIMARY KEY(主键约束)
UNIQUE KEY(唯一约束)
DEFAULT(默认约束)
FOREIGN KEY(外键约束)
4、外键约束
保持数据一致性,完整性。
实现一对一或者一对多的关系。

实例
1、首先创建一个父表
mysql> CREATE TABLE provinces(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> pname VARCHAR(20) NOT NULL
-> );
Query OK, 0 rows affected (0.24 sec)
2、查看创建父表用的指令
mysql> SHOW CREATE TABLE provinces;
+----------+-------------------------------------------------------
-------------------------------------------------------------------
----------------------+
| Table | Create Table
|
+----------+-------------------------------------------------------
-------------------------------------------------------------------
----------------------+
| province | CREATE TABLE `province` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`pname` varchar(20) NOT NULL,
PRIMARY KEY (`id`) #主键在创建的同时会自动的创建索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |(满足第一个要求)
+----------+-------------------------------------------------------
-------------------------------------------------------------------
----------------------+
1 row in set (0.02 sec)
3、创建子表
mysql> CREATE TABLE users(
-> id SMALLINT PRIMARY KEY AUTO_INCREMENT,
->
-> username VARCHAR(10) NOT NULL,
-> pid BIGINT,
-> FOREIGN KEY(pid) REFERENCES provinces (id) #外键pid参照provinces表中的id
-> );
ERROR 1005 (HY000): Can't create table 'test.users' (errno: 150) #外键列必须与子键列有相似的数据类型
mysql>
mysql> CREATE TABLE users(
-> id SMALLINT PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(10) NOT NULL,
-> pid SMALLINT UNSIGNED,
-> FOREIGN KEY(pid) REFERENCES province (id)
-> );
Query OK, 0 rows affected (0.17 sec)
有外键的数据表称为子表,子表参照的表称为父表。pid为外键列,id为参照列。
4、显示参照列的索引
mysql> SHOW INDEXES FROM provinces;
+----------+------------+----------+--------------+-------------+-----------+--
----------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | C
rdinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------+------------+----------+--------------+-------------+-----------+--
----------+----------+--------+------+------------+---------+---------------+
| province | 0 | PRIMARY | 1 | id | A |
0 | NULL | NULL | | BTREE | | |
+----------+------------+----------+--------------+-------------+-----------+--
----------+----------+--------+------+------------+---------+---------------+
1 row in set (0.07 sec)
mysql> SHOW INDEXES FROM province\G; #以网格的形式显示
*************************** 1. row ***************************
Table: province
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
ERROR:
No query specified
5、显示外键列的索引
mysql> SHOW INDEXES FROM users\G;
*************************** 1. row ************************* #两个索引,一个主键索引
Table: users
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row *************************
Table: users
Non_unique: 1
Key_name: pid #在pid字段上,系统自动创建索引
Seq_in_index: 1
Column_name: pid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
2 rows in set (0.00 sec)
ERROR:
No query specified
mysql 约束和外键约束实例的更多相关文章
- SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束。
SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束.
- SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束
Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构. 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导 ...
- MySQL truncate含有外键约束的条目报错
1.报错信息: Cannot truncate a table referenced in a foreign key constraint 2.出现错误操作: truncate table a1; ...
- MySQL系列(十一)--外键约束foreign key的基本使用
有些时候,为了保证数据的完整性,我们会选择的使用外键约束,例如教师对应的表和课程表中老师的id,这种时候就要使用外键约束了. PS:这里不考虑表结构设计,三范式与反范式等设计问题,基于MySQL8.0 ...
- MySQL基础9-主键约束、外键约束、等值连接查询、一对一和多对多关系
1.主键约束和外键约束 外键约束 * 外键必须是另一表的主键的值(外键要引用主键!) * 外键可以重复 * 外键可以为空 * 一张表中可以有多个外键! 概念模型在数据库中成为表 数据库表中的多对一关系 ...
- 如何在MySQL中设置外键约束
引用:http://blog.sina.com.cn/s/blog_53729e4601011wja.html MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是 ...
- MySQL数据库有外键约束时使用truncate命令的办法
MySQL数据库操作中,Delete与Truncate两个命令都可以删除一个数据表中的全部数据,使用办法分别是: DELETE FROM t_question TRUNCATE TABLE t_que ...
- mysql数据库导入外键约束问题
在网站搬迁过程中,很重要一点是数据的迁移.你的数据库可能已经包含了一个设计良好的数据表集合,并且在网站运营过程中,产生了重要的数据.这时你必须做好包含数据表schema以及数据本身的迁移. 完成上述数 ...
- mysql关闭/启用外键约束
1.有时为了导入数据方便,需要临时关闭外键约束mysql>SET FOREIGN_KEY_CHECKS=0; 2.打开外键约束mysql>SET FOREIGN_KEY_CHECKS=1; ...
随机推荐
- Testlink解决大用例导入问题
最近公司同事需要将别的testlink的用例迁移过来,由于现在新的服务器也在使用,不能使用数据库导入的办法,只能用xml文件进行导入,不过在导入的时候出现了个没遇到的问题,报错文件太大,无法上传. 解 ...
- ELK日志系统安装、配置
1.关闭SELINUX: [root@ELK /]# vim /etc/selinux/config 将SELINUX=enforcing修改为SELINUX=disabled 2.关闭防火墙: [r ...
- bzoj2554: Color
Description 有n个球排成一列,每个球都有一个颜色,用A-Z的大写字母来表示,我们每次随机选出两个球ball1,ball2,使得后者染上前者的颜色,求期望操作多少次,才能使得所有球的颜色都一 ...
- System.Web.Optimization对脚本和样式表的压缩操作
1 是否允许样式表压缩 BundleTable.EnableOptimizations = true; 在MVC项目中的 BundleConfig操作中是微软已经给我们准备好的CSS和JS压缩,我们可 ...
- touch-paint
效果如下 代码如下: //index.html <!DOCTYPE html> <html lang="zh-CN"> <head> <m ...
- 【译】7. Java反射——私有字段和私有方法
原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...
- Solr7.1--- 指定ConfigSets
我们都知道Solr提供了一个默认的配置,以及一个demo 但是实际场景是我们需要自己独立配置,不用默认的,主要为了方便管理. 进入目录: D:\solr-7.1.0\server\solr\confi ...
- 第一个java程序的编译
import java.io.*; public class EmployeeTest{ public static void main(String args[]){ /* 使用构造器创建两个对象 ...
- 【清北学堂2018-刷题冲刺】Contest 7
Task 1:小奇采药 [问题描述] 小奇是只天资聪颖的喵,他的梦想是成为世界上最伟⼤的医师. 为此,他想拜喵星球最有威望的医师为师. 医师为了判断他的资质,给他出了⼀个难题. 医师把他带到⼀ ...
- (基础 输入方法 栈)P1427 小鱼的数字游戏 洛谷
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...