目录
一、约束
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.事务的四大特征
约束是作用于表中字段上的规则,用于限制加入表的数据
约束的存在保证了数据库中数据的正确性、有效性和完整性
保证字段中所有数据不能有null值
#创建表时添加非空约束
CREATE TABLE 表名(
字段名 数据类型 NOT NULL,
…
);
#建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
#删除约束
ALTER TABLE 表名 MODIFY 字段名 数据类型;
保证字段中所有数据各不相同
#创建表时添加唯一约束
#方式1
CREATE TABLE 表名(
字段名 数据类型 UNIQUE [AUTO_INCREMENT],
-- AUTO_INCREMENT: 当不指定值时自动增长
…
);
#方式2
CREATE TABLE 表名(
字段名 数据类型,
…
[CONSTRAINT] [约束名称] UNIQUE(字段名)
);
#建完表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
#删除约束
ALTER TABLE 表名 DROP INDEX 字段名;
主键是一行数据的唯一标识,要求非空且唯一
mysql拓展约束:自增约束(AUTO_INCREMENT)
该字段是数字类型,且唯一
#创建表时添加主键约束
CREATE TABLE 表名(
字段名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
…
);
CREATE TABLE 表名(
字段名 数据类型,
[CONSTRAINT] [约束名称] PRIMARY KEY(字段名)
);
#建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
#删除约束
ALTER TABLE 表名 DROP PRIMARY KEY;
保存数据时,未指定值则采用默认值
#创建表时添加默认约束
CREATE TABLE 表名(
字段名 数据类型 DEFAULT 默认值,
…
);
#建完表后添加默认约束
ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
#删除约束
ALTER TABLE 表名 ALTER 字段名 DROP DEFAULT;
保证字段中的值满足某一条件
mysql不支持检查约束!
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
#创建表时添加外键约束
#添加完外键约束后,该表会成为主表的从表
CREATE TABLE 表名(
字段名 数据类型,
…
[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名)
);
#建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表字段名称);
#删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
约束到后期基本不会手敲的,都有可视化工具完成~
软件结构设计
软件功能
软件模块
模块间关系
...
数据库设计
表数据
表字段
表关系
...
接口设计
具体功能
功能参数,返回值
接口访问方式
...
过程设计
如何开发
时间安排
功能实现流程
...
功能具体实现
验证功能是否符合预期
检查程序是否有严重bug
测试软件性能
测试软件抗压性
...
软件维护
软件运营
...
数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型 建立数据库中的表结构以及表与表之间的关联关系的过程
需要什么数据
数据有哪些属性
数据/属性特点
通过E(实体)R(关系)图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统
根据数据库自身的特点把逻辑设计转换为物理设计
需求建表
表优化
人-身份证
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能
实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
老师-学生
员工-部门
实现方式:在多的一方建立外键,指向一的一方主键
商品-订单
实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
具体参考
数据库设计规范-阿里云开发者社区 (aliyun.com)
#笛卡尔积 : 有A,B两个集合 取A,B所有的组合情况
select * from 表1,表2;
#隐式内连接
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某一字段;
左外连接:相当于查询A表所有数据和交集部分数据
select (要查询的字段) from 表1 left [outer可省略] join 表2 on where 表1某一字段 = 表2某一字段;
右外连接:相当于查询B表所有数据和交集部分数据
select (要查询的字段) from 表1 right [outer可省略] join 表2 on where 表1某一字段 = 表2某一字段;
查询中嵌套查询,称嵌套查询为子查询
select score from user where score > (select score form user where name = '小明');
select 要查询的字段 from 表名 条件(子查询);
select name,score from user where name in (select name form user where class = 1);
select 要查询的字段 from 表名 条件 in(子查询);
select name,score,class from (select * from user where score > 85) where class = 2;
select 要查询的字段 from (子查询) 条件;
数据库的事务 (Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令
事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
事务是一个不可分割的工作逻辑单元
#开始事务
#业务操作01
#业务操作02
#业务操作03
...
#业务操作n
#提交事务
#如果业务操作其中有任何一项操作出现异常,会将状态回滚到业务开启前的状态
START TRANSACTION;
BIGIN;
ROLLBACK;
COMMIT;
原子性(Atomicity):: 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性(Consistency) : 事务完成时,必须使所有的数据都保持一致状态
隔离性 (lsolation) : 多个事务之间,操作的可见性(隔离性越高,操作可见性越低,性能也越低,反之越高)
持久性(Durability) : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
mysql是默认自动提交的