【无标题】

一.约束

(一)约束概述

1.约束的概念:约束时作用与表中字段上的规则,用于限制储存在表中的数据。

2.目的:保证数据库中数据的正确,有效性和完整性。
3.分类:

          非空约束    限制该字段的数据不能为null   关键字: NOT NULL

          唯一约束    保证该字段的所有数据都是唯一,不重复的。   UNIQUE

          主键约束    主键是一行数据的唯一标识,要求非空且唯一。       PRIMARY KEY

          默认约束    保存数据时,如果未指定该字段的值,则采用默认值   DEFAULT

          检查约束    保证字段值满足某一个条件          CHECK

          外键约束    用来让两张表

之间的数据之间建立起链接,保证数据的一致性和完整性。 

         FOREIGN KEY

        例如:

create  table  tdada(
    id int auto_increment primary key comment 'ID唯一标识',
    name varchar(10) not null  unique comment '姓名',
    age int check ( age>0&&age<120 ) comment '年龄'
);

(二)外键约束

1.添加外键: CREATE TABLE 表名(

字段名  数据类型

......

CONSTRAINT [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)

);

表名 TABLE ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列表)

2.删除或更新行为

NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否右对应外键,如果有则不允许删除或更新

RESTRICT  当在父表中删除或更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除或修改

CASCADE  当在父表中删除或更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除或更新外键在子表中的记录/

SET NULL  当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置字段中该外键值为null(只要求该外键允许取null)

SET DEFAULT  当父表发生变更时,子表将外键列设置成一个默认值(lnnodb不支持)

语法: ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE ACSCADE

约束总结:

二.多表查询

1.多表关系

一对多:在多的一方设置外键,关联一的一方的主键

多对多:建立中间表,中间表包含两个外键,关联两张表的主键

一对一:用于表结构拆分,在其中任何一方设置外键(UNIQUE),关联另一个的主键。

2.多表查询

内连接

           隐式: SELECT...FROM 表A,表B WHERE 条件...

           显示: SELECT...FROM 表A INNER JOIN 表 条件....

外连接

           左边: SELECT...FROM 表A LEFT JOIN 表B ON  条件...

           右边: SELECT...FROM 表A RIGHT JOIN 表 BON 条件...

自链接:SELECT...FROM 表A 别名1,表A 别名2 WHERE 条件...

子查询:标量子查询,列子查询,行子查询,表子查询

3.多表查询概述

概述:指从多张表中查询数据。

笛卡尔积:笛卡尔积式指在数学中,两个集合A集合B和B集合的所有组合情况(在多表查询中,需要消除无效的笛卡尔积)

4.多表查询概述

多表查询分类

       链接查询

          内链接:相当于查询A,B交集部分数据

          外连接:

                 左外链接:查询左表所有数据,以及两张表交集部分数据

                 右外链接:查询右表所有数据,以及两张表交集部分数据

          自链接:当前表和自身的连接查询,自链接必须使用表别名。

子查询

          

5.连接查询-内连接

内连接查询语法:

隐式内连接

SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

显示内连接

SELECT 字段列表 FROM 表1 [INNER] ON 表2 ON 连接条件...;

6.连接查询-外连接

外连接查询语法:

左外连接

SELECT 字段列表 FROM   表1 LEFT [OUTER] OIN 表2 ON 表...;

相当于查询表1(左表)的所有数据包含 表1和表2交集的部分的数据

右外连接

SELECT 字段列表 FROM 表1 RIGHT[OUTER] JOIN 表2 ON 条件...;

相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据

7.连接查询-自查询

自连接查询语法:

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;

自连接查询,可以式内连接查询,也可以是外连接查询。

8.联合查询-union,union all

对于union查询,就是把多次查询额结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A...

UNION [ALL]

SELECL 字段列表 FROM 表B...;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

UNION ALL 会将全部的数据直接合并在一起,union会对合并之后的数据去重。

9.子查询

概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称为子查询。

SELCET * FROM, t1 WHERE column1= (SELECT column1 FROM t2);

子查询外部的语句可以式INSERT /UPDATE/ DELETE/SELECT的任何一个。

根据查询结果不同,分为:

标量子查询(子查询结果为单个值)

列子查询(子查询结果为一列)

行子查询(子查询结果为一行)

表子查询(子查询结果式多行多列)

根据子查询的位置,分为WHERE 之后,FROM 之后,SELECT之后。

  • 30
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值