约束是添加在列上, 用来约束列的!

1. 主键约束(表中的某行的唯一标识)

主键的特点:

非空

唯一

被引用

创建表时, 指定主键的两种方式:

// 需求: 指定 sid 列为主键列, 即为 sid 列添加主键约束

// 第一种方式:

CREATE TABLE stu(

sid CHAR(6) PRIMARY KEY,

sname VARCHAR(20),

age INT,

gender VARCHAR(10)

);

// 第二种方式:

CREATE TABLE stu(

sid CHAR(6),

sname VARCHAR(20),

age INT,

gender VARCHAR(10),

PRIMARY KEY(sid)

);

修改表时,指定主键: ALTER TABLE stu ADD PRIMARY KEY(sid);

删除主键: ALTER TABLE stu DROP PRIMARY KEY;

2. 主键自增长

因为主键列的特性是: 必须唯一, 不能为空, 所以我们通常会指定主键类型为整型, 然后设置其自动增长,

这样可以保证在插入数据时, 主键列的唯一和非空特性.

创建表时,指定主键自增长

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20),

age INT,

gender VARCHAR(10)

);

修改表时, 设置主键自增长: ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;

修改表时, 删除主键自增长: ALTER TABLE stu CHANGE sid sid INT;

3. 非空约束

因为某些列不能设置为 NULL 值, 所以可以对列添加非空约束.

// 示例: 对 sname 列设置非空约束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) NOT NULL,

age INT,

gender VARCHAR(20)

);

4. 唯一约束

数据库某些值不能设置重复的值, 所以可以对列添加唯一约束.

// 示例: 对 sname 列设置唯一约束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) UNIQUE,

age INT,

gender VARCHAR(20)

);

5. 概念模型

当我们要完成一个软件体统时, 需要把系统中的实体抽取出来, 形成概念模型.

例如部门, 员工都是系统中的实体. 概念模型中的实体最终都会称为 JAVA 中的 domain类(对象模型), 数据库中的表(关系模型).

5.1 实体之间的关系有三种:

1 对多: 例如每个员工都从属一个部门, 而一个部门可以有多个员工, 其中员工是多方, 而部门是一方;

1 对 1 : 例如老公和老婆就是一对一的关系.(不常见)

多对多 : 老师和学生的关系就是多对多, 一个老师可以有多个学生, 一个学生可以有多个老师.

5.2 对象模型和关系模型

对象模型(Java 中的类): 可以双向关联, 而且引用的是对象, 而不是一个主键!

关系模型(数据库中的表): 只能多方引用一方, 而且引用的只是主键, 而不是一整行记录.

java 中的类,使用成员变量来完成关系, 一般都是双向关联!!

// 实体之间的关系, java 代码体现

// 多对一关系:

class Employee{ // 多方关联一方, 即员工关联部门

...

private Department department;

}

class Department{ // 一方关联多方, 即部门关联员工

...

private List employee;

}

// 多对多

class Student{ // 学生关联老师

...

private List teacher;

}

class Teacher{

...

private List student;

}

6. 外键约束

外键特点:

外键必须是另一张表的主键的值(即外键要引用主键)

外键可以重复

外键可以为空

一张表中可以有多个外键!!

创建表时, 指定外键约束:

CREATE TABLE emp(

empno INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(50),

dno INT,

CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)

)

// fk_emp_dept : 约束名称

// fk, 表示 foreign key;

// emp, 表示从表, 即多方;

// dept, 表示主表, 即一方

// dno: 表示本表中作为外键的列

// dept(deptno): 表示引用的是 dept表的 deptno列

修改表时, 添加外键约束:

ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno);

修改表时, 删除外键约束:

ALTER TABLE emp DROP FOREIGN KEY fk_emp_deptno;

7. 数据库中一对一关系

// 在表中建立一对一关系比较特殊, 需要让从表的主键, 也是外键.

CREATE TABLE husband(

hid INT PRIMARY KEY,

...

);

CREATE TABLE wife(

wid INT PRIMARY KEY,

...

CONSTRAINT fk_wife_hid FOREIGN KEY(wid) REFERENCES husband(hid)

);

/*

* 其中, wife 表的 wid 键既是主键,又是相对 husband 表的外键!

* husband.hid 是主键, 不能重复!

* wife.wid 是主键,不能重复, 又是外键, 必须来自 husband.hid.

* 所以如果 wife 表中有一条记录的 wid 为 1, 那么 wife 表中的其他记录的 wid 就不能再是1了,因为它是主键.

* 同时, 在 husband.hid 中必须存在 1 这个值, 因为 wid 是外键, 这就完成了一对一关系.

*/

8. 数据库中多对多关系

在表中建立多对多关系需要使用中间表, 即需要三张表, 在中间表中使用两个外键, 分别引用其他两个表的主键.

CREATE TABLE student( // 学生表

sid INT PRIMARY KEY,

...

);

CREATE TABLE teacher( // 教师表

tid INT PRIMARY KEY,

...

);

CREATE TABLE stu_tea(

sid INT,

tid INT,

CONSTRAINT fk_student FOREIGN KEY(sid) REFERENCES student(sid),

CONSTRAINT fk_teacher FOREIGN KEY(tid) REFERENCES teacher(tid)

);

// 这时, 在 stu_tea 这个中间表中的每条记录都是说明 student 和 teacher 表的关系.

// 例如, stu_tea 表中的记录: sid 为100, tid 为 201, 说明编号为 100 的学生有一个编号为 201 的老师.

参考资料:

mysql约束深入了解_MySQL 的约束相关推荐

  1. MySQL中字段约束有哪些_mysql字段约束

    为了确保数据的完整性和唯⼀性,关系型数 据库通过约束机制来实现目. 一. unique 唯一性约束 值不可重复: 二. not null 非空约束 值不可为空: 三. default  默认值约束 当 ...

  2. mysql后台修改表_mysql之约束以及修改数据表

    数据约束的分类: ---------------------------------------------------- 外键约束的要求解析: //在my文件中的这句话代表着搜索引擎,如果不是的就需 ...

  3. mysql的check约束怎么设置_MySQL检查约束(CHECK)

    MySQL 检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.设置检查约束时要根据实际情况进行设置,这样能够减少 ...

  4. mysql约束日期_MySQL的约束、事务、字符串、日期、数学相关及其他补充

    MySQL共有5个约束 1 主键约束 primary key(id) 2 外键约束 3 唯一约束 unique 4 非空约束 not null 5 默认约束 default 其他: auto_incr ...

  5. mysql sql 语句事务_MySQL: 3、SQL语言 ②约束、事务

    一.SQL 约束 1.约束的作用: 对表中的数据进行进一步的限制,从而保证数据的正确性.有效性.完整性.违反约束的不正确数据将无法插入到表中 2.常见的约束: 3.主键约束: -- 特点: 不可重复. ...

  6. mysql约束添加删除数据_mysql中约束的添加,修改,与删除

    MySQL中的约束,添加约束,删除约束,以及其他的一些修饰: 一.NOT NULL(非空约束) 添加非空约束 1)建表时直接添加 CREATE TABLE t_user(user_id INT(10) ...

  7. mysql cluster 外键_Mysql外键约束

    Mysql集群创建外键,分为四种约束:no action,restrict,cascade,set null.如果表A的主关键字是表B中的字段,则该字段称为B的外键,表A称为主表,表B称为从表.外键是 ...

  8. mysql 多行唯一_mysql – 具有唯一约束的原子多行更新

    我有一个以排序顺序显示的标签表.为了确保没有两行可以具有相同的排名,它们的值是唯一的: create table label ( id_label serial not null, rank inte ...

  9. mysql删除表外键_MySQL删除所有表的外键约束、禁用外键约束

    数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能.在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加可读性,会创建表与表之间的关联关 ...

最新文章

  1. 排序算法有哪些_超强整理,科班算法岗的秋招之路
  2. 对tensorflow 的BatchNormalization的坑的理解与测试
  3. (转)好的投资应当是:善良为先,智慧为道,奋斗为本
  4. VMWare虚拟机服务器设置固定ip,切换网络后不用重新设置服务器ip
  5. 计算机专业y9000x,LEGION Y9000X笔记本U盘一键重装Win10专业版的教程
  6. 博客在六个方面降低网络营销费用
  7. 诚风老师-十年了,当年那帮做直销的穷小子都成了富豪
  8. 身份实名认证API开发文档
  9. 全球及中国有机莴笋种子行业供给需求与十四五产能规模预测报告2022版
  10. 为服务器选择固态硬盘的一个优点和缺点
  11. ZLMediaKit源码分析 - NotifyCenter
  12. phpstudy启动MySQL服务遇到的问题及解决过程
  13. 滴滴拼车变绿:下沉、烧钱、焦虑
  14. 漫鸽爬虫实例 - 采集信用中国的数据
  15. C++ 动态库导出函数名乱码及解决
  16. 禁止App字体随系统字体变化而变化的问题
  17. BIM一级考试复习视频
  18. 基于FPGA的键盘扫描程序的设计
  19. 鸿蒙电视安装当贝,无需U盘,乐视电视通过手机/电脑安装当贝市场方法
  20. 【转】ECharts各种图表文字样式修改大全

热门文章

  1. 用Middleware给ASP.NET Core Web API添加自己的授权验证
  2. 单元测试01:nunit 安装与代码测试
  3. 目前市场上用于个人计算机的硬盘尺寸是,第5章-硬盘(计算机组装与维护).docx
  4. Markdown编辑器模板
  5. ASP.NET MVC入门---实例演示:通过ContentResult实现主题定制
  6. C和指针之字符串实现strrstr函数
  7. C++之namespace和::使用总结
  8. git之Pushing to the remote branch is not fast-forward错误解决
  9. 怎样理解Linux的文件系统
  10. python在web可以开发吗_Python Web开发