您的位置:首页 > 数据库 > MySQL

MySQL数据库实操教程(07)——表的约束

2019-07-21 20:42 1251 查看

自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理

探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制

Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南

Android程序员C语言自学完备手册
讲给Android程序员看的前端系列教程(图文版)
讲给Android程序员看的前端系列教程(视频版)

版权声明

为防止错误的数据被插入到数据表,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为表的约束。常见约束如下:

以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说,表的约束实际上就是表中数据的限制条件。

主键约束

主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。这点类似于我们每个人都有一个身份证号,并且这个身份证号是唯一的。

主键约束基本语法:

字段名 数据类型 primary key;

设置主键约束(primary key)的第一种方式

CREATE TABLE student(
id int primary key,
name varchar(50)
);

在该方式中将id字段设置为主键,请参见第2行代码

设置主键约束(primary key)的第二种方式

CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);

在该方式中,先定义了字段id,然后设置该字段为主键,请参见第4行代码。
若采用该方式非常便于设置联合主键,请看如下示例:

CREATE TABLE student(
classid int,
studentid int,
name varchar(50),
primary key(classid,studentid)
);

在该示例中,将classid和studentid定义为联合主键,请参见第5行代码。

请注意:不要把联合主键理解成两个主键;它们是以两个字段联合的形式作为主键。也就是说:这两者共同决定了数据的唯一性。例如,在该实例student表中任意两条数据的classid可能相同或者studentid相同;但是,不允许两条数据的classid和studentid都相同。

设置主键约束(primary key)的第三种方式

CREATE TABLE student(
id int,
name varchar(50)
);
ALTER TABLE student  ADD  PRIMARY  KEY (id);

在该示例中,先创建了表,然后利用ALTER语句设置id字段为主键.

非空约束

非空约束即 NOT NULL指的是字段的值不能为空,基本的语法格式如下所示:

字段名 数据类型 NOT NULL;

示例如下:

CREATE TABLE student(
id int PRIMARY KEY,
name varchar(50) NOT NULL,
gender varchar(10)
);

在该示例中设定name字段为NOT NULL,所以在插入数据时必须为该字段设值。

唯一性约束

唯一性约束即UNIQUE用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,其基本的语法格式如下所示:

字段名 数据类型 UNIQUE;

示例如下:

CREATE TABLE student(
id int primary key,
name varchar(50) unique
);

在该示例中利用unique关键字为字段name添加唯一约束,请参见第3行代码。

AUTO_ INCREMENT约束

在实际开发过程中,常有这样的需求:希望某个字段的值自动生成并且是唯一的。也就是说:想为表中插人的新记录自动生成唯一的ID。此时,可采用AUTO_ INCREMENT约束来实现。AUTOJNCREMENT约束的字段可以是任何整数类型。 默认情况下,该字段的值是从1开始自增的。在执行插入语句时候不必为AUTO_ INCREMENT约束的字段赋值,它会自动增加;其基本的语法格式如下所示:

字段名 数据类型 AUTO_ INCREMENT;

示例如下:

CREATE TABLE student(
id int primary key auto_increment,
name varchar(50)
);

在该示例中将主键id设置为auto_increment,那么该字段的值会自动地增长。执行插入:

insert into student (name) values('lucy');
insert into student (name) values('tom');

图示如下:

默认值约束

默认值约束即DEFAULT用于给数据表中的字段指定默认值,即当在表中插入一条新记录时若未给该字段赋值,那么,数据库系统会自动为这个字段插人默认值;其基本的语法格式如下所示:

字段名 数据类型 DEFAULT 默认值;

示例如下:

CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE,
gender VARCHAR(10) DEFAULT '女'
);

在该示例中为gender字段设值了默认值,所以可以用如下方式插入数据:

insert into student(id,name) values(1,'toc');
insert into student(id,name,gender) values(2,'jok','男');
insert into student(id,name,gender) values(3,'jerry',default);

外键约束

外键约束即FOREIGN KEY常用于多张表之间的约束。基本语法如下:

CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);

外键名常用命名方式:

fk_从表名_从表外键字段

外键

外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约 束。外键用于建立和加强两个表数据之间的连接。为了更好地理解外键的定义及其作用,我们来看如下两张表:

student表

CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) DEFAULT '男'
);

score表

CREATE TABLE score(
scoreid INT PRIMARY KEY,
studentid INT ,
scoreresult INT
);

score表中的studentid学生编号表示成绩是属于哪个学生,该值必须是student表中id列里的值。这种情况下:学生表student被称为主表,分数表score被称为从表。所以,我们可利用外键FOREIGN KEY将score中的studentid与student表中id建立起联系;代码如下:

student表

CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) DEFAULT '男'
);

score表

CREATE TABLE score(
scoreid INT PRIMARY KEY,
studentid INT ,
scoreresult INT,
CONSTRAINT fk_score_studentid FOREIGN KEY (studentid) REFERENCES student(id)
);

当然,也可利用SQL语句设置外键,代码如下:

ALTER TABLE score ADD CONSTRAINT fk_score_studentid FOREIGN KEY(studentid) REFERENCES student(id);

现在,我们再来执行:

show create table score;

图示如下:

从这里可以看出:studentid为表score的外键;并且studentid依赖于student表的id

测试数据:

INSERT INTO student(id,name,gender) VALUES(1,'tome',DEFAULT);
INSERT INTO student(id,name,gender) VALUES(2,'lucy','女');
INSERT INTO student(id,name,gender) VALUES(3,'jocy','女');
INSERT INTO student(id,name,gender) VALUES(4,'mimu',DEFAULT);
INSERT INTO score(scoreid,studentid,scoreresult) VALUES(200,1,98);
INSERT INTO score(scoreid,studentid,scoreresult) VALUES(201,2,97);
INSERT INTO score(scoreid,studentid,scoreresult) VALUES(202,3,93);
INSERT INTO score(scoreid,studentid,scoreresult) VALUES(205,4,69);

数据一致性

大家知道:建立外键是为了保证数据的完整和统一性。但是,如果主表中的数据被删除或修改从表中对应的数据该怎么办呢?很明显,从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。

删除外键约束

语法如下:

alter table 从表名 drop foreign key 外键名;

示例如下:

alter table score drop foreign key fk_score_studentid;

然后执行:

 show create table score;

图示如下:

由此可见,从表score的外键约束已被删除。

外键约束小结

  • 从表里的外键通常为主表的主键
  • 从表里外键的数据类型必须与主表中主键的数据类型一致
  • 主表发生变化时应注意主表与从表的数据一致性问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: