数据库基础02-数据库的简单设计和多表联查

目录

一、约束

1.概念

2.作用

3.SQL约束分类

(1)非空约束(NOT NULL)

(2)唯一约束(UNIQUE)

(3)主键约束(PRIMARY KEY)

(4)默认约束(DEFULT)

(5)检查约束(CHECK)

(6)外键约束(FOREIGN KEY)

二、数据库设计

1.软件研发(概况)

(1)需求分析----->产品原型

(2)设计

(3)编码

(4)测试

(5)发布

2.数据库设计概述

3.数据库设计步骤

(1)需求分析(根据产品原型分析)

(2)逻辑分析:

(3)物理分析:

(4)维护分析:

4.表关系

(1)一对一:

(2)一对多/多对一:

(3)多对多:

5.建表规范

三、多表查询

1.笛卡尔积查询

2.连接查询

(1)内连接:查询A和B的交集

(2)外连接

3.子查询

(1)单行单字段:作为条件值,使用= ,!=,<,>等判断

(2)多行单字段:作为条件值,使用in等关键字进行条件判断

(3)多行多字段:作为虚拟表

四、事务

1.概述

2.事务的使用

(1)开始事务(二选一)

(2)回滚事务

(3)提交事务

3.事务的四大特征


一、约束

1.概念

约束是作用于表中字段上的规则,用于限制加入表的数据

2.作用

  • 约束的存在保证了数据库中数据的正确性、有效性和完整性

3.SQL约束分类

(1)非空约束(NOT NULL)

保证字段中所有数据不能有null值

#创建表时添加非空约束
CREATE TABLE 表名(
   字段名 数据类型 NOT NULL,
   …
); 
​
#建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
​
#删除约束
ALTER TABLE 表名 MODIFY 字段名 数据类型;

(2)唯一约束(UNIQUE)

保证字段中所有数据各不相同

#创建表时添加唯一约束
#方式1
CREATE TABLE 表名(
   字段名 数据类型 UNIQUE [AUTO_INCREMENT],
   -- AUTO_INCREMENT: 当不指定值时自动增长
   …
); 
#方式2
CREATE TABLE 表名(
   字段名 数据类型,
   …
   [CONSTRAINT] [约束名称] UNIQUE(字段名)
); 
​
#建完表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
​
#删除约束
ALTER TABLE 表名 DROP INDEX 字段名;

(3)主键约束(PRIMARY KEY)

主键是一行数据的唯一标识,要求非空且唯一

mysql拓展约束:自增约束(AUTO_INCREMENT)

  • 该字段是数字类型,且唯一

#创建表时添加主键约束
CREATE TABLE 表名(
   字段名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
   …
); 
CREATE TABLE 表名(
   字段名 数据类型,
   [CONSTRAINT] [约束名称] PRIMARY KEY(字段名)
); 
​
#建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
​
#删除约束
ALTER TABLE 表名 DROP PRIMARY KEY;

(4)默认约束(DEFULT)

保存数据时,未指定值则采用默认值

#创建表时添加默认约束
CREATE TABLE 表名(
   字段名 数据类型 DEFAULT 默认值,
   …
); 
​
#建完表后添加默认约束
ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
​
#删除约束
ALTER TABLE 表名 ALTER 字段名 DROP DEFAULT;

(5)检查约束(CHECK)

保证字段中的值满足某一条件

mysql不支持检查约束!

(6)外键约束(FOREIGN KEY)

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

#创建表时添加外键约束
#添加完外键约束后,该表会成为主表的从表
CREATE TABLE 表名(
   字段名 数据类型,
   …
   [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名) 
); 
​
#建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表字段名称);
​
#删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

约束到后期基本不会手敲的,都有可视化工具完成~

二、数据库设计

1.软件研发(概况)

(1)需求分析----->产品原型
(2)设计
  • 软件结构设计

    • 软件功能

    • 软件模块

    • 模块间关系

    • ...

  • 数据库设计

    • 表数据

    • 表字段

    • 表关系

    • ...

  • 接口设计

    • 具体功能

    • 功能参数,返回值

    • 接口访问方式

    • ...

  • 过程设计

    • 如何开发

    • 时间安排

    • 功能实现流程

    • ...

(3)编码
  • 功能具体实现

(4)测试
  • 验证功能是否符合预期

  • 检查程序是否有严重bug

  • 测试软件性能

  • 测试软件抗压性

  • ...

(5)发布
  • 软件维护

  • 软件运营

  • ...

2.数据库设计概述

数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型 建立数据库中的表结构以及表与表之间的关联关系的过程

3.数据库设计步骤

(1)需求分析(根据产品原型分析)
  • 需要什么数据

  • 数据有哪些属性

  • 数据/属性特点

(2)逻辑分析:

通过E(实体)R(关系)图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统

(3)物理分析:

根据数据库自身的特点把逻辑设计转换为物理设计

(4)维护分析:
  • 需求建表

  • 表优化

4.表关系

(1)一对一:
  • 人-身份证

一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)

(2)一对多/多对一:
  • 老师-学生

  • 员工-部门

实现方式:在多的一方建立外键,指向一的一方主键

(3)多对多:
  • 商品-订单

实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

5.建表规范

具体参考

数据库设计规范-阿里云开发者社区 (aliyun.com)

三、多表查询

1.笛卡尔积查询

#笛卡尔积 : 有A,B两个集合 取A,B所有的组合情况
select * from 表1,表2;

2.连接查询

(1)内连接:查询A和B的交集
#隐式内连接
select (要查询的字段) from 表1,表2 where 表1某一字段 = 表2某一字段;
​
#显式内连接(inner可省略)
select (要查询的字段) from 表1 inner join 表2 on where 表1某一字段 = 表2某一字段;
select (要查询的字段) from 表1 join 表2 on where 表1某一字段 = 表2某一字段;
(2)外连接
  • 左外连接:相当于查询A表所有数据和交集部分数据

select (要查询的字段) from 表1 left [outer可省略] join 表2 on where 表1某一字段 = 表2某一字段;
  • 右外连接:相当于查询B表所有数据和交集部分数据

select (要查询的字段) from 表1 right [outer可省略] join 表2 on where 表1某一字段 = 表2某一字段;

3.子查询

查询中嵌套查询,称嵌套查询为子查询

(1)单行单字段:作为条件值,使用= ,!=,<,>等判断
select score from user where score > (select score form user where name = '小明'); 
select 要查询的字段 from 表名 条件(子查询);
(2)多行单字段:作为条件值,使用in等关键字进行条件判断
select name,score from user where name in (select name form user where class = 1); 
select 要查询的字段 from 表名 条件 in(子查询);
(3)多行多字段:作为虚拟表
select name,score,class from (select * from user where score > 85) where class = 2;
select 要查询的字段 from (子查询) 条件;

四、事务

1.概述

  • 数据库的事务 (Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令

  • 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败

  • 事务是一个不可分割的工作逻辑单元

2.事务的使用

#开始事务
#业务操作01
#业务操作02
#业务操作03
...
#业务操作n
#提交事务
#如果业务操作其中有任何一项操作出现异常,会将状态回滚到业务开启前的状态
(1)开始事务(二选一)
  • START TRANSACTION;

  • BIGIN;

(2)回滚事务
  • ROLLBACK;

(3)提交事务
  • COMMIT;

3.事务的四大特征

  • 原子性(Atomicity):: 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

  • 一致性(Consistency) : 事务完成时,必须使所有的数据都保持一致状态

  • 隔离性 (lsolation) : 多个事务之间,操作的可见性(隔离性越高,操作可见性越低,性能也越低,反之越高)

  • 持久性(Durability) : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

mysql是默认自动提交的

你可能感兴趣的:(笔记,sql,数据库)