MySQL数据库的完整性约束
来源:互联网 发布:linux 卸载 编辑:程序博客网 时间:2024/05/08 05:32
1.完整性约束
1.1 主键(primary key)
主键约束相当于not null 和 唯一性约束。
创建表时添加主键约束的多种方式1. create table tmp( num int primary key, name varchar(20), sex char(2));2. create table tmp( num int, name varchar(20), sex char(2), primary key (name));3. create table tmp ( num int, name varchar(20), sex char(2), constraint PK_NAME primary key(name));修改表添加主键约束alter table tmp add constraint PK_SEX primary key(sex);SHOW CREATE TABLE tmp;//查看创建tmp表的语句,可以看到已经有了PRIMARY KEY (`num`)CREATE TABLE `tmp` ( `num` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, `sex` char(2) DEFAULT NULL, PRIMARY KEY (`num`)
测试主键约束效果:
表的结构:
mysql> desc tmp;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| num | int(11) | YES | | NULL | || name | varchar(20) | YES | | NULL | || sex | char(2) | NO | PRI | NULL | |+-------+-------------+------+-----+---------+-------+
插入数据:
mysql> insert into tmp values(9527, 'mike', 'm');Query OK, 1 row affected (0.04 sec)mysql> insert into tmp values(9528, 'lilei', 'm');ERROR 1062 (23000): Duplicate entry 'm' for key 'PRIMARY'mysql> insert into tmp values(9528, 'lilei', NULL);ERROR 1048 (23000): Column 'sex' cannot be null//因为sex字段有主键约束,所以不能输入相同的值并且不能为NULL
主键约束和自动增长类型
test表的id字段为自动增长,age字段为默认字段20create table test(id int auto_increment primary key, name varchar(2), age int default 20);默认字段:当插入数据没有指定默认字段,则设置为20,否则设置为指定的数据自动增长类型:测试:insert into test values(NULL, 'li', 10);//age将被设置为10,id增长为1insert into test(name) values('zh');//age为默认值20,id增长为2insert into test values(5, 'mi', NULL);//age为NULL,id增长为5insert into test values(NULL, 'xu', NULL);//age为NULL,id接着上衣条记录增长为6
1.2 外键(foreign key)
1. 创建student表添加主键约束 create table student (num int, name varchar(20), sex char(2)); alter table student add PK_NUM primary key(num); 2. 创建num_t表添加主键约束careate table num_t(num int, high int);alter table num_t add constraint PK_NUM primary key(num);3. 给student表创建外键约束,使student的num字段引用num_t的num字段alter table student add constraint FK_NUM foreign key(num) references num_t(num);4. 查看SHOW CREATE TABLE student,可以查看到外键约束 CREATE TABLE `student` ( `num` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, `sex` char(2) DEFAULT NULL, PRIMARY KEY (`num`), CONSTRAINT `FK_NUM` FOREIGN KEY (`num`) REFERENCES `num_t` (`num`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
student表可以称为主表,num_t可以称为从表,student的num字段类型必须与引用从表字段类型一致,名称可以不相同。
测试外键约束:
1. 先为num_t插入数据:insert into num_t values(1000, 2000);insert into num_t values(1001, 2001);2. 为student插入数据:insert into student values(1000, 'mike', 'm');//插入num字段的数据来自num_t的num字段insert into student values(1001, 'lilei', 'm');//因为主键约束插入失败ERROR 1062 (23000): Duplicate entry '1001' for key 'PRIMARY'insert into student values(1002, 'zhangfei', 'm');//插入的num字段1002在num_t中没有,因为外键约束插入失败ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`menwen`.`student`, CONSTRAINT `FK_NUM` FOREIGN KEY (`num`) REFERENCES `num_t` (`num`))
1.3 用户自定义完整性约束(check)
设置test表的age字段必须大于等于1,小于等于18alter table test add constraint CC_AGE check (age >= 1 and age <= 18);不过MySQL数据库并不支持,插入一个age=30的数据insert into test (age) values(30);select显示仍然插入成功:+----+------+------+| id | name | age |+----+------+------+| 1 | NULL | 30 |+----+------+------+
0 0
- MySQL数据库的完整性约束
- MySQL数据库:完整性约束
- 数据库的完整性约束
- 数据库的完整性约束
- 数据库---表的完整性约束
- 五种完整性约束分别是什么——基于MySQL数据库的数据约束实例
- MySQL的完整性约束之:域(字段)完整性
- 数据库的安全和完整性约束
- sql server 2008 数据库的完整性约束
- 数据库的完整性约束及触发器
- Oracle数据库完整性约束
- 数据库完整性约束
- 数据库完整性约束
- 数据库完整性约束
- 数据库完整性和约束
- 数据库完整性约束
- 数据库完整性及约束
- 数据库完整性及约束
- Struts2的常用注解
- 开发的TCP/IP的分析比较
- A query was run and no Result Maps were found for the Mapped Statement
- python笔记(七)
- hive 配置参数说明大全
- MySQL数据库的完整性约束
- RESTful API 设计指南
- 用位操作求加法
- Vue.js 小应用使用总结
- python 字典 键值 交集
- ASP.NET弹窗+跳转链接写法+常用邮箱跳转判断方法
- 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
- AndroidKnife/RxBus详细说明
- ftp常用命令