基础
- 基本表
- 概念:是数据库中实际存在的表,由行和列组成,数据以物理形式存储在磁盘上
- 作用:数据完整性保障(定义字段的各种类型和约束,保证数据合法性和一致性),数据存储(直接存储实体的属性),数据操作的基础(增删改查)
- 视图
- 概念:是由一个或多个基本表/视图导出的虚拟表,本身不存储数据,只保存查询的逻辑。
- 作用:逻辑独立性(基本表结构调整时,若视图未涉及该变化,则不用修改视图),数据安全控制(限制用户的访问范围),简化复杂查询(封装复杂操作,提供查询效率),复用查询逻辑(减少代码量)
- 触发器
- 概念:绑定在基本表的自动执行的代码,当表中数据发生特定操作时,触发器自动执行
- 作用:数据完整性增强(触发器操作前后校验数据)、自动化业务逻辑(减少代码量)、跨表数据联动(多表的一致性)
- 数据库设计步骤(需求-概念逻辑物理-应用程序-测试维护)
- 需求分析:收集需求、确定需求、生成需求文档
- 概念结构设计:构建E-R模型
- 逻辑结构设计:将E-R图转换为关系数据库模式
- 物理结构设计:选择存储结构和访问方式
- 应用程序设计与开发:架构设计、前端开发、后端开发、接口设计
- 测试与维护:功能测试、性能测试、安全性测试、维护与迭代
SQL
-
基础语句:多表连接
-
存储过程
```sql -- 无参proc delimiter $$ create proc StuProc() begin select Sname,Sage,Ssex from student end$$ delimiter ;
-- 有参proc delimiter $$ create proc StuProc( IN Sname varchar(100), OUT Ssex varchar(1) ) begin select Ssex into Ssex from student where Sname=Sname end$$ delimiter ;
-- 调用 set @result = ''; call StuProc('赵雷',@result); ```
- E-R图:实体属性、实体关系
网站
- C#使用数据库
- connection对象用于连接数据库
- sealed关键字表示该类无法被继承
- DateTime类型用于存储日期与时间
- DataSet和DataReader的区别
- 数据存储方式:DS可离线打开,而DR必须在线打开
- 连接依赖性:DS不依赖数据库连接,而DR依赖
- 数据操作能力:DS支持增删改查等操作,DR只支持查询
- 内存占用:DS占用多,DR占用少
- 场景:DS适合中小型数据集和复杂操作、DR适合大型数据集和简单操作
- 用DataAdapter填充DataSet数据集的步骤
- 创建connection
- 创建command
- 创建DataAdapter
- 创建DataSet
- 填充DataSet
- 其他
- 存储过程可以接受参数并返回结果集
- 完整备份:包含数据库的所有内容,是完整副本
- 差异备份:只包含上次完整备份以来的所有修改
test
- 基本表作用:数据完整性保障,数据操作的基础,数据存储
- 视图作用:逻辑独立性,简化复杂查询,复用查询逻辑,数据安全控制
-
触发器作用:提高数据完整性,跨表联动,自动化业务逻辑
-
数据库设计步骤:需求分析、概念(构建E-R图)、逻辑(将E-R图转换为关系数据库模式)、物理(确定数据库的存储方式和存储结构)、应用程序(架构、前端、后端、接口)、测试与维护(功能测试、性能测试、安全性测试、维护与迭代)
class Test{
[HttpPost("/...")]
public IActionResult AddGoods([FromForm] GoodsModel goods){
using(SqlConnection conn = new SqlConnection(ConnectionString)){
conn.Open();
String sql = @"";
using(SqlCommand cmd = new SqlCommand(sql,conn)){
cmd.Parameter.AddWithValue("",...);
int id = Convert.ToInt32(Command.ExecuteScalar());
return Ok(new {seccess = true,bookId=id});
}
}
}
}
function submitForm(){
const fromData = new FromData(document.getElementById('表单id'));
fetch('/...',{
method:'POST',
body:fromData
})
.then(response => response.json())
.then(data => {
if(data.success){
//...
}else{
alert("...");
}
})
}
<form id="">
<div>
<label></label>
<input type="text" name="title" required></input>
</div>
<button type="button" onclick="submitFrom()">提交</button>
</form>