约束
概念&分类
限制加入表中的数据 ,保证数据的正确性、有效性和完整性约束名称 描述 关键字 非空 保证数据不为null not null 唯一 数据各不相同 unique 主键 一行数据的唯一标识,非空且唯一 primary key 检查 保证列中的值满足某一条件(mysql不支持) check 默认 为指定的值采用默认值 default 外键 让两个表数据建立链接,保证数据一致性和完整性 foreign key 用法:
在创建时添加约束: create table log( id int primary key , -- 员工id ,主键且自增长 name varchar(50) not null unique, -- 名字 ,非空且唯一 bonus double(7,2) default 0-- 奖金 ,默认为0 ) -- 自动增长auto_increment # 设置自动增长必须在列是数字类型并且是非空且唯一下可以省略 # 如果用delete删除了一条记录,自动增长仍然不会删除,还是会往下增长 在创建后添加约束: alter table log modify 字段名 数据类型 not null; 删除约束: alter table log modify 字段名 数据类型;
外键约束
添加约束:
create table 表名(
列名 数据类型,
...
[constraint [外键名称] foreign key (外键列名) references 主表名称(或主表列名称)];
)
在创建后添加约束:
alter table 表名 add constraint 外键名 foreign key(外表字段名) reference 主表名称(主表列名称);
删除约束:
alter table 表名 drop foreign key 外键名称;
数据库设计
数据库设计简介
软件研发步骤
需求分析
>>设计
>>编码
>>测试
>>安装部署
需求分析: 产品经理 > 产品原型
设计:架构师, 开发工程师 > 软件设计.数据库设计.接口设计.过程设计
编码: 开发工程师- 数据库设计概念
1.根据业务系统具体需求, 结合DBMS, 为业务构造出最优数据模型
2.建立数据库中的表结构
和表和表之间的关系
3.有哪些表? 表里面有哪些字段? 表和表之间有什么关系?- 数据库设计步骤
1.需求分析 (数据是什么? 数据具有哪些属性? 数据与属性特点是什么?)
2.逻辑分析(通过EA图对数据库进行逻辑模型. 不需要考虑我们所选的数据库管理系统)
3.物理分析(根据数据库自身的特点把逻辑设计转换为物理设计)
4.维护设计(1.对新的需求进行建表 2.表优化)
表关系
表关系之一对多
如: 部门和员工
一个部门对应多个员工, 一个员工对应一个部门
实现方式: 在多的一方建立外键, 指向一的一方主键
表关系之多对多
如: 商品 和 订单
一个商品对应多个订单 , 一个订单包含多个商品
表关系之一对一
如 用户 和 用户详情
一对一关系多用于表的拆分, 将一个实体中经常使用到的字段放一张表里面, 不经常使用的字段放另外一张表里面, 用于提高查询性能
数据库设计案例
多表查询
内连接
-- 隐式内连接
select 字段列表 from 表1,表2... where 条件(如:表1.列=表2.条件)
select * from data1,data2 where data1.id = data2.did;
-- 显式内连接:有更快的执行速度,优势在多表上体现出, inner也可以省略
select 字段列表 from 表1 [inner] join 表2 on 条件
select * from data1 inner join data2 on data1.id = data2.did;
-- 给表起别名: 用as, 可以省略,但要加空格
select 字段列表 from 表 [别名]
外连接:
-- 左外连接:查询表1的所有数据和对应表2的数据
select 字段列表 from 表1 left [outer] join 表2 on 条件;
-- 右外连接:查询表2的所有数据和对应表1的数据
select 字段列表 from 表1 right [outer] join 表2 on 条件;
子查询
嵌套查询,链式编程思想
单行单列:
select 字段列表 from 表 where 字段名= (子查询);
多行单列:
select 字段列表 from 表 where 字段名 in (子查询);
多行多列:
select 字段列表 from (子查询) where 条件
事务
简介
- 数据库
事务
是一种机制, 一个操作序列 , 包含了一组数据库操作命令
- 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求, 即
这一组数据库命令要么同时成功, 要么同时失败
- 事务是一个不可分割的工作逻辑单元
操作
-- 开启事务
start transaction 或者 begin;
-- 提交事务
commit;
-- 回滚事务
rollback;
-- 设置保存点
savepoint;
特征
- 原子性(
A
tomicity): 事务是不可分割的最小操作单位, 要么成功, 要么失败 - 一致性(
C
onsistency): 事务完成时, 必须使所有的数据保持一致性 - 隔离性(
I
solation): 多个事务之间, 操作的可见性 - 持久性(
D
urability): 事务一旦提交或回滚, 它对数据库中的数据改变是永久的