1 默认值deafult:在建表的时候字段后使用 default ,默认值字段允许为null。

2 非空 not null:在建表的时候字段后使用  not null。

非空字段必须赋值,并且不能是null。

3 唯一:主键和unique 字段必须唯一。

注意:unique 对 null 值不起作用。只对有值的字段数据进行约束。

4 主键primary key:就是not null 和 nuique的联合。

5 自增长auto_increment:

6 外键:约束两张表,主要是解决数据冗余。

alter table tablename1

add foreign key column name1

references tablename2 column name2

on delete restrict/cascade/set null;

在建表的时候创建外键,在添加完字段后 foreign key(column ame) reference table name2  (column name2) on delete cascade/restrict/set null。

注意:

1)被约束的表为附表,约束别人的表是主表,外键设置在附表上。

2)添加数据是先添加主表数据,再添加附表数据

3)不能直接修改主表,先修改附表数据。

4)删除数据,先删除附表数据,再删除主表数据。

二、数据库表的设计原则,三大范式

第一范式:要求表中的每个字段必须是不可分割的独立单元,第一范式(确保每列保持原子性)

第二范式:要求每张表表达一个思想,表的每个字段都和主键有依赖,第二范式(确保表中的每列都和主键相关)

第三范式:要求每张表主键之外的每个字段都只能和主键有直接依赖关系,第三范式(确保每列都和主键列直接相关,而不是间接相关)

三、关联查询

查询规则:1)确定查询那些表 2)确定查询哪些字段 3)表与表之间的连接条件

例如:

表1: student

CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR() NOT NULL,
sgender CHAR() NOT NULL,
sage SMALLINT NOT NULL,
sphone VARCHAR(),
address VARCHAR());

表2:englishScore

CREATE TABLE englishScore(
id INT PRIMARY KEY AUTO_INCREMENT,
sscore SMALLINT,
sid INT NOT NULL,
FOREIGN KEY(sid) REFERENCES student(id) ON DELETE CASCADE
);

查询学生姓名和成绩

3.1 内连接查询,两张表或多张表的连接条件都非空

SELECT sname, sscore
FROM student S, englishScore ES
WHERE S.id = ES.sid;

相当于是使用下面语句执行查询

SELECT sname, sscore
FROM student S
INNER JOIN englishScore ES
ON S.id = ES.sid;

3.2 左外连接

SELECT S.sname, ES.sscore
FROM student S
LEFT JOIN englishScore ES
ON S.id = ES.sid;

3.3 右外连接

SELECT S.sname, ES.sscore
FROM student S
RIGHT JOIN englishScore ES
ON S.id=ES.sid;

MySQL数据约束和关联查询的更多相关文章

  1. MYSQL基础操作之数据约束与关联查询

    一.MYSQL约束 1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值. 默认值的字段允许为空. 对默认值字段也可以插入null. CREATE TABLE STUDENT( I ...

  2. mysql 数据操作 单表查询 where 约束 目录

    mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...

  3. mysql 数据操作 单表查询 目录

    mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...

  4. mysql 数据操作 多表查询 目录

    mysql 数据操作 多表查询 准备 多表连接查询介绍 mysql 数据操作 多表查询 多表连接查询 笛卡尔积 mysql 数据操作 多表查询 多表连接查询 内连接 mysql 数据操作 多表查询 多 ...

  5. mysql 数据操作 单表查询 group by 分组 目录

    mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...

  6. MySQL数据和索引占用空间查询

    MySQL数据和索引占用空间查询 查询所有数据库占用磁盘空间大小的SQL语句 SELECT table_schema, -- 数据库名称 concat( TRUNCATE ( sum( data_le ...

  7. mysql 数据操作 多表查询 准备

    为什么需要多表查询: 因为我们不可能把所有数据都放在一张表里 我们把不同数据存储 放在一张一张不同表 方便管理,但我们为了方便管理,把数据拆分到一张一张表去存储. 但是数据还是一个整体,数据之间是有关 ...

  8. 基于EF的数据外键关联查询

    现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦.而我现在要做的就是基于EF的外键关联查询.很方便的. 首先,创建基础查询的BaseS ...

  9. mysql 数据操作 多表查询 子查询 介绍

    子查询就是: 把一条sql语句放在一个括号里,当做另外一条sql语句查询条件使用 拿到这个结果以后 当做下一个sql语句查询条件mysql 数据操作  子查询 #1:子查询是将一个查询语句嵌套在另一个 ...

随机推荐

  1. mysql 实验

    http://yangyaru0108.blog.51cto.com/6616699/1205001

  2. Java ClassLoader加载机制理解

    今天看到了一篇介绍Java ClassLoader加载机器的文章, 才发觉一直来自己的肤浅, 好好地给补了一课, 不得不存档! 原文地址: http://www.blogjava.net/lhulcn ...

  3. Eclipse里web的依赖工程部署的简便方法

    用Eclipse开发项目,曾经为依赖工程的部署问题头疼过,用了MyEclipse之后就没有仔细去研究,最近研究了下,还真找到了比较简便的方法,之前都是采用Ant打jar包,copy到web工程,或者通 ...

  4. PHP:面向对象学习笔记,重点模拟Mixin(掺入)

    背景 相对于Python.Node和Ruby来说PHP算是一门容易学习和使用的语言,因为这个特点也使其成为WEB开发领域的佼佼者,本文记录一下我对PHP面向对象部分的学习笔记. 先来一个复杂的例子:M ...

  5. [Android Pro] Android 必知必会-使用 supportV4 的 RoundedBitmapDrawable 实现圆角

    RoundedBitmapDrawable 是 supportV4 下的一个类,有了它,显示圆角和圆形图片的情况下就不需要额外的第三方类库了,还能和各种图片加载库配合使用. 背景 今天无意间看到一段实 ...

  6. iOS:上线的基本流程

    1.创建唯一标书符App ID 首先打开开发者网站,进入证书页面,我们点击Identifiers下边App IDs选项,然后点击右上角加号,如图: 2.申请发布证书 我们点击Certificates下 ...

  7. C语言指针加1问题以及字节对齐问题

    今天早上自己写了一段代码,然后测试的时候发现结果总是和预期的不一样,而且偏差的有点离谱,冥思苦想了将近五个小时,最后在我要开始怀疑人生的时候,发现原来是自己犯了一个极其低级但又容易被忽略的问题.好吧, ...

  8. js定义对象并赋值

    1.可以通过  var ratio = {}; ratio.low = 70; ratio.high = 90; ratio.scale = 0.2; 2.可以通过 var obj = new Obj ...

  9. Python基础(12)--模块

    本文地址:http://www.cnblogs.com/archimedes/p/python-modules.html,转载请注明源地址. 模块简介 如果你退出 Python 解释器重新进入,以前创 ...

  10. vi命令整理

    vi命令整理 u 撤销上一次操作 ctrl+r 恢复上一次操作 : 跳转至第1行 :$ 跳转至最后一行 ctrl+f 向文章末尾翻页 ctrl+b 向文章开始翻页 yy 复制一行 p 粘贴刚刚复制第一 ...