SQL Server 2000 数据库入门
SQL Server 2000 MS 数据库管理系统 组成: 系统database 程序: 用户界面,工具 数据结构:管理和存储数据 Master Pubs tempDB 数据库入门
SQL Server数据库 管理、存储和访问数据 Database 包含: 对应文件: .mdf, .ldf 包含: Table, View, Index, Store Procedure, Trigger, etc. 数据库入门
SQL 2000管理工具 2018/11/28 数据库入门
创建database 右键-〉新建数据库 输入数据库名: test 包含: 及对应物理文件: 数据文件: test_Data 事务日志文件:test_Log 及对应物理文件: .mdf, .ldf 数据库入门
表 Table Table: 表是包含数据库中所有数据的数据库对象。 表结构: Column 列(字段)的集合 每行是一条记录。 表的定义: 列名 , 数据类型, 初始值, 是否允许空 约束规则,索引, 主键, 外键 数据库入门
建新表 右键-> 新建表 列名, 数据类型,长度,允许空 类型:整数:bigInt: 64 bits Int: 32bits,dec, Numeric, Money Datetime Char, VarChar, Nvarchar Text, Image 默认值 自动增长( + 1) RowGUID 数据库入门
主键、外键、 关系: 引用 索引:Index,查找快速 例如:部门, 职员 主键(PK): 唯一标示数据, 数据完整性,主键索引,查找快速 外键(FK):表与表之间的链接,数据完整性、一致性 索引:Index,查找快速 例如:部门, 职员 数据库入门
视图 View 虚拟表, 由查询定义, 包含行、列,View数据并不真正存在在View中, 通过查询其它数据源(数据表、视图、其他数据库、其他服务器)而来。 2018/11/28 数据库入门
存储过程 Stored Procedure Stored Procedure 优点: 运行在SQL Server服务器方 类似子程序模块 /* ---- Stored Procedure: sp_backupmessage ---- Get backup file message ---- by You jianshe 2003-2-14 ---- */ CREATE PROC sp_backupmessage @as_filename VARCHAR(200) as Restore HEADERONLY FROM DISK = @as_filename GO Stored Procedure 运行在SQL Server服务器方 类似子程序模块 可以输入、输出参数 包含数据库操作语句( or call SP ) Return value 编程语言:Transact-SQL 优点: 模块化设计、创建一次,重复使用, 后台运行,速度更快 网络流量减少, 安全 数据库入门
触发器Trigger 一种特殊SP, 在指定表的数据发生变化时自动生效,即被调用、被执行。(Insert, Update, Delete时) 目的:强制业务规则和数据完整性 Trigger: Transact-SQL语法, (简单或复杂)逻辑处理 Tables: Inserted, Deleted 数据库入门
自定义类型、函数 自定义类型 一般不需要 自定义函数 数据库入门
数据库设计 需求分析 逻辑模型 E-R图 --- 实体关系 数据流图 --- 业务处理 物理模型 数据库 分析、优化 数据库入门
数据库设计Steps ⒈需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。 ⒉概念结构设计阶段 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。 ⒊逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。 ⒋数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。 ⒌数据库实施阶段 运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 ⒍数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。 数据库入门
数据库设计实例 项目工作管理, 包含数据表: 职员花名册, 公司部门 系统功能 , 权力角色 , 职员角色 系统功能 , 权力角色 , 职员角色 项目(Project) 、 项目成员(项目-职员) 项目任务分解(WBS, 分级,包括任务包、 工作量估计,计划, 进度, 人员安排,权重, 任务包父亲 ) 项目任务执行跟踪 (工作日志): 项目 - 职员 – 时间 – 对应任务包 – 实际工作量 数据库入门
E-R图实例 2018/11/28 数据库入门
编程接口 API ADO, OLE DB, ODBC ( JDBC), Embedded SQL, URL, XML (Internet) 使用数据库 打开到数据库的连接。 设置控制某些行为的选项 执行 Transact-SQL 语句 将返回代码的数据值、输出参数和结果集移入程序变量中,并通过程序变量由应用程序逻辑使用。 在完成数据库中的工作后断开连接。 数据库入门
连接数据库- PB // Profile sss Transaction SQLCA // 事务对象 SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=Excel Files;UID=;PWD='" 连接Access // Profile Access SQLCA.DBParm = "ConnectString='DSN=MS Access Database;UID=;PWD='“ // VB-1 cn.Open "Driver={SQL Server};Server=Server1;Uid=SA;Pwd=;Database=northwind" // VB –2 cn.Provider = "sqloledb“ ProvStr = "Server=MyServer;Database= northwind; Trusted_Connection=yes" cn.Open provStr Transaction SQLCA // 事务对象 sqlca.DBMS = ProfileString (gs_inifile, "DATABASE", "dbms", "MSS") sqlca.DATABASE = ProfileString (gs_inifile, "DATABASE", "DATABASE", "KF") sqlca.userid = ProfileString (gs_inifile, "DATABASE", "userid", "dbo") sqlca.dbpass = ProfileString (gs_inifile, "DATABASE", "dbpass", "") sqlca.logid = ProfileString (gs_inifile, "DATABASE", "logid", "sa") sqlca.logpass = ProfileString (gs_inifile, "DATABASE", "LogPassWord", "") sqlca.servername = ProfileString (gs_inifile, "DATABASE", "ServerName", "(local)") sqlca.dbparm = ProfileString (gs_inifile, "DATABASE", "Dbparm", "") sqlca.AutoCommit = FALSE connect Using SQLCA; // 打开连接 Disconnect Using SQLCA ; // 切断连接 2018/11/28 数据库入门
获取数据-SQL语句 String ls_empl_name // 变量定义 Select empl_name INTO :ls_empl_name FROM bse_employee Where empl_no = ‘system’ Using SQLCA ; if sqlca.sqlcode <> 0 then // … 失败 Else // …. 成功 End if Long ld_id = 0 String as_table = “tableXXX” //update UPDATE sys_system_id SET id_counter = :ld_id WHERE id_table_name = :as_table Using SQLCA; 数据库入门
获取数据-Datawindow // Dw_list Datawindow // d_employee_edit Datawindow Object dw_list.SetTransobject(SQLCA) dw_list.Retrieve( g_userinfo.is_dep_no, g_userinfo.is_empl_cls) …. //保存数据 ll_ret = dw_list.update(TRUE ,TRUE) // 判断 If ll_ret = 1 then Commit ; // using SQLCA Else Rollback; // using SQLCA MessageBox("提示","保存时出错!") End if 数据库入门
与数据库连接Datawindow 数据库入门
Transact-SQL 语言简介 标示符: create Table employee ( empl_no char(10) PRIMARY KEY, empl_name varchar(20), age int default 0 , ….) 数据类型: 函数: 表达式: 运算符: 注释 关键字: 数据库入门
创建与删除表 Create Table drop table CREATE TABLE [dbo].[bse_department] ( [dep_no] [varchar] (10) not NULL , [dep_tycode] [char] (1) NULL , [dep_name] [char] (10) NULL , [dep_no1] [char] (4) NULL , [dep_name1] [char] (10) NULL , [dep_bld_date] [datetime] NULL , [dep_vendor_shared] [smallint] NULL , [dep_telno] [char] (20) NULL ) ON [PRIMARY] GO drop table drop table [dbo].[bse_department] 数据库入门
更改数据 Insert INSERT INTO bse_department (dep_no, dep_name) VALUES ( ‘KFB’, ‘开发部’ ) GO Update: UPDATE bse_department SET dep_name = ‘development’ WHERE dep_no = ‘KFB’ Delete Delete from bse_department WHERE dep_no = ‘KFB’ 数据库入门
简单查询 Select < 列名,…> from <表…>Where <条件>… 查询统计: SELECT * FROM bse_department WHERE (dep_tycode = '1') 查询统计: SELECT dep_no AS 部门编号, COUNT(*) AS 部门人数 FROM bse_employee GROUP BY dep_no 数据库入门
联合查询 联合查询 JOIN ( INNER, LEFT, RIGHT ) SELECT bse_department.dep_name, COUNT(*) AS 部门人数 FROM bse_employee INNER JOIN bse_department ON bse_employee.dep_no = bse_department.dep_no GROUP BY bse_department.dep_name, bse_employee.dep_no 数据库入门
聚合函数 SUM ( …) AVG( …) COUNT(…) MAX(…) MIN(…) Select COUNT( *) from table1 Select sum( column1) from table2 数据库入门
结果集组合 UNION Note: 结果集结构必须相同。 Select * from tableA Select * from tableB Select * from tableC Note: 结果集结构必须相同。 数据库入门
子查询 WHERE exp [NOT] IN ( subquery) WHERE exp comparison_op ( subquery) WHERE NOT EXISTS ( subquery) 例: SELECT * FROM bse_employee WHERE (dep_no NOT IN (SELECT dep_no FROM bse_department WHERE dep_no <> '0000')) 数据库入门
多维汇总数据 CUBE SELECT bse_department.dep_name, bse_employee.empl_cls, COUNT(*) AS 部门人数 FROM bse_employee INNER JOIN bse_department ON bse_employee.dep_no = bse_department.dep_no GROUP BY bse_department.dep_name, bse_employee.empl_cls WITH CUBE RollUp GROUP BY bse_department.dep_name, bse_employee.empl_cls WITH rollup 数据库入门
事务处理 Transaction: 作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元4个 属性: 原子性,一致性,隔离性,持久性 BEGIN Transaction - 启动事务 Commit -提交 , 结束事务 RollBack - 回滚, 结束事务 必须一次提交或全部退回 要么成功,要么失败! 确保数据完整性和一致性 数据库入门
事务处理编写原则 事务保持尽量短。在多用户下,必须事务保持尽量短,减少资源锁定争夺 不要在事务处理期间要求用户输入 浏览数据时,尽量不要打开事务 必须修改数据时,启动事务,执行修改,然后马上提交(commit)或失败后回滚(rollback)事务。 灵活使用游(cursor)标并发选项,如乐观并发(OPTIMISTIC ) 在事务中,尽量访问最小量数据,减少锁定数据行数。 避免并发 (Lock) 数据库入门
谢谢 ! 数据库入门