约束

约束
*约束是添加在列上的,用来约束列的! 1.主键约束(唯一标识) ***非空***
***唯一***
***被引用*** *当表的某一列被指定为主键后,该列就不能为空,不能有重复值出现。
*创建表时指定主键的两种方式:
>CREATE TABLE stu(
sid CHAR(6) PRIMARY KEY,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
指定sid列为主键列,即为sid列添加主键约束
>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值,所以可以对列添加非空约束。
*例如:
>CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
age INT,
gender VARCHAR(10)
);
*NOT NULL是对sname列设置了非空约束 4.唯一约束 *数据库中的某些列不能设置重复的值,所以可以对列添加唯一约束。
*例如:
>CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL UNIQUE,
age INT,
gender VARCHAR(10)
);
*UNIQUE是对sname列设置了唯一约束 5.概念模型 当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。
例如部门、员工都是系统中的实体,概念模型中的实体最终会成为Java中的类、数据库中的表。
实体之间还存在着关系,关系有三种:
*1对多:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多,部门是1。
*1对1:例如老公和老婆是一对一的关系,一个老公和只能有一个老婆,一个老婆只能有一个老公。
*多对多:老师和学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师。 6.外键约束 *外键必须是另一个表的主键的值
*外键可以重复
*外键可以为空
*一张表可以有多个外键!
>CREATE TABLE emp(
empno INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50),
dno INT,
CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno)
);
id_fk是外键约束名,FOREIGN KEY(dno)表示这张表的外键是dno,REFERENCES dept(deptno)表示dept表中deptno是主键。
也可以在创建好两张表后再添加外键约束
ALTER TABLE emp ADD CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno); 7.数据库一对一关系
在表中建立一对一关系比较特殊,需要让其中一张表的主键,既是主键又是外键。
CREATE TABLE husband(
hid INT PRIMARY KEY,
...
);
CREATE TABLE wife(
wid INT PRIMARY KEY,
...
CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid)
);
其中wife表wid既是主键,又是相对husband表的外键。
所以如果在wife表中有一条记录wid为1,那么wife表中的其他记录的wid就不能再是1了,因为wid是主键。
同时husband.hid中必须存在1这个值,因为wid是外键,这样就完成了1对1的关系了。 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_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),
CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES student(tid)
);
这时在stu_tea这个中间表中的每条记录都是来说明student和teacher表的关系的。

MySQL学习笔记7——约束的更多相关文章

  1. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  2. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  3. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  4. MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  5. MySql学习笔记三

    MySql学习笔记三 4.DML(数据操作语言) 插入:insert 修改:update 删除:delete 4.1.插入语句 语法: insert into 表名 (列名1,列名2,...) val ...

  6. 一千行MySQL学习笔记 (转)

    出处:  一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...

  7. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  8. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  9. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

随机推荐

  1. acwing 17. 从尾到头打印链表

    题目地址 https://www.acwing.com/problem/content/description/18/ 来源:剑指Offer 输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值. ...

  2. 2019-2020-1 20199305《Linux内核原理与分析》第三周作业

    操作系统的秘密 (一)计算机的三大法宝 存储程序计算机: 函数调用堆栈机制: 中断机制. (二)堆栈 (1)堆栈的作用 记录函数调用框架: 传递函数参数: 保存返回值的地址: 提供局部变量存储空间. ...

  3. Java编译器的2点优化

    优化1 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char). 如果没有超过左侧的范围 ...

  4. Sigma Function (LightOJ - 1336)【简单数论】【算术基本定理】【思维】

    Sigma Function (LightOJ - 1336)[简单数论][算术基本定理][思维] 标签: 入门讲座题解 数论 题目描述 Sigma function is an interestin ...

  5. ajax成功请求到后台(进断点),但是浏览器控制台报404错误!

    向Controller发送请求,进入断点且走到最后一步,中间也没有报错.但是,结果没有成功响应,浏览器控制台报404. 原因:忘记加@ResponseBody,spring对返回值映射时找不到对应的视 ...

  6. node 下载 md5.js

    命令:npm install js-md5

  7. php 压缩字符串

    压缩字符串: base64_encode(gzcompress(serialize($data))) 解压字符串: unserialize(gzuncompress(base64_decode($se ...

  8. 第一章 1.18 re模块

    方法使用 1. compile(正则表达式) - 编译创建正则表达式对象 re_obj = re.compile(r'\d{3}') re_obj.fullmatch('234') re.fullma ...

  9. 项目中出现多个域名下的Cookie

    前言:我们在查看一个项目的Cookie时,有时会看到多个域名下的Cookie,如下图: 其中一种常见的原因是:因为我们在项目中引用了另一个项目的资源.如下图: 重点:浏览器的一种默认机制:如果我们引用 ...

  10. Python 3 行代码 5 秒抠图的 AI 神器,根本无需 PS

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 苏克1900 PS:如有需要Python学习资料的小伙伴可以加点击下 ...