当前位置:文档之家› 数据库学习笔记

数据库学习笔记

数据库学习笔记
数据库学习笔记

标准SQL语言篇:

SQL是在1974年由Boyce和Chamberlin提出的,经各公司的不断修改、扩充和完善,SQL 得到了业界的认可,1986年10月美国国家标准局ANSI的数据库委员会X3H2批准了SQL 作为关系数据库语言的美国标准。

SQL特点:综合统一,SQL集数据定义语言DDL、数据操作语言DML、数据控制语言DCL 的功能于一体;高度非过程化,只要提出“做什么”,而无须指明“怎么做”,即无须了解存取路径;面向集合的操作方式,非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录,而SQL是采用集合操作方式,操作对象、查找结果可以是元组的集合;以同一种语法结构提供多种使用的方式,SQL既是独立的,又是嵌入式的语言;语言简洁,易学易用。

*删除模式:DROP <模式名>

*每一个基本表都属于一个模式,一个模式可以包含多个基本表

常用的查询条件

数据更新

视图操作

授权与回收

数据库角色是被命名的一组与数据库操作相关的权限,简单来讲,角色是权限的集合。所以可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。

*修改表的时候,如果是修改内容,就要先DROP原先内容再ADD新的内容。

完整性约束命名子句:

CONSTRAINT C1 CHECK FOREIGN KEY (Sno) REFERENCES DEPT(Deptno), CONSTRAINT C2 CHECK (S+K<=300)

触发器

定义触发器:

CREATE TRIGGER <触发器名>

{BEFORE | AFTER} <触发事件> ON <表名>

FOR EACH {ROW | STATEMENT}

[WHEN <触发条件>]

<触发动作体>

注:触发器名在同一模式下,必须是唯一的,并且和表名必须在同一模式下;

表名是触发器的目标表,即数据发生变化时所触发的表;

触发事件可以是插入、删除、更新,也可以是这几个的组合;

触发器类型,触发器按照所触发动作的间隔尺寸可分为行级触发器和语句级触发器(FOR EACH ROW或者FOR EACH STA TEMENT);

触发条件,触发器被激活时,只有当触发条件为真时触发动作体才执行;

触发动作体,既可以是一个匿名的PL/SQL过程块,也可以是对已创建的存储过程的调用。

eg

CREATE TRIGGER Insert_Or_Update

BEFORE INSERT OR UPDATE ON Teacher

FOR EACH ROW

AS BEGIN

IF(new.Job=?教授?)AND(new.Sal<4000) THEN

New.Sal=4000;

END IF;

END;

数据库设计篇

数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。

数据库设计的目标是为用户和各种应用系统提供一个信息基础设施和高效率的运行环境;其中高效率的运行环境包括:数据库数据的存取效率、数据库存储空间的利用率、数据库系统运行管理的效率等都是高的。

数据库设计的基本步骤:需求分析>概念结构设计>逻辑结构设计>物理结构设计>数据库实施>数据库运行和维护

需求分析:通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户各种需求,然后确立系统的功能。调查重点是“数据”和“处理”。主要有以下几个步骤:调查相关客户对系统的需求情况>熟悉系统功能>确定新系统边界>数据字典的设计(数据项、数据结构、数据流、数据存储、处理过程)

注:1.需求分析阶段的一个重要而困难的任务是手机将来应用所涉及的数据,设计人员应充分考虑到可能的扩充和改变,使设计易于更改,系统易于扩充。2.必须强调用户的参与,不能凭空想象。

概念结构设计:将需求分析得到的用户需求抽象为信息结构即概念模型的过程,具体有以下几种方法:

1.自顶向下:先定义全局概念结构的框架,然后逐步细化;

2.自底向上:先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构;

3.逐步扩张:先定义最重要的核心概念结构,然后向外扩充,直至总体概念结构;

4.混合策略:将自顶向下和自底向上结合起来。

概念结构是对现实世界的一种抽象,一般有三种抽象:分类;聚集;概括。其中,分类是定义某一类概念作为现实世界中一组对象的类型;聚集是定义某一类型的组成成分;概括是定义类型之间的一种子集联系。抽象完之后就逐一设计E-R图,最后拼接所有E-R图。

逻辑结构设计:主要是E-R图向关系模式的转换。

物理结构设计:为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程。通常分为两步:确定数据库的物理结构(主要是存取方法和结构)>对物理结构进行评价(重点是时间和空间效率;通常关系数据库物理设计的内容主要包括:为关系模式选择存取方法,设计关系、索引等数据库文件的物理存储结构。

常用的存取方法有三类:1.索引方法;2.聚簇方法;3.HASH方法。

1.索引方法:a.如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)

属性上建立索引(或组合索引);b.如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引;c.如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引。

2.聚簇方法:为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇

码)上具有相同值的元组集中存放在连续的物理块称为聚簇。一个关系只能加入一个聚簇。

3.HASH方法:如果一个关系的属性主要出现在等值连接条件中或主要出现在相等比较选

择条件中,而且满足a.一个关系的大小可预知,而且不变;b.如果关系的大小动态改变,而且数据库管理系统提供了动态HASH存取方法;这两个条件之一,就可以选择HASH 存取方法。

确定数据库物理结构主要是指确定数据的存放位置和存储结构,包括:确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置等。

数据库的实施和维护:包括两项重要的工作,一项是数据的载入,另一项是应用程序的编码

和调试。

SQL*PLUS语言篇

SQL*PLUS是与oracle进行交互的客户端工具,在SQL*PLUS中可以运行SQL*PLUS命令和SQL*PLUS语句。

使用SQL*PLUS命令连接数据库:sqlplus “sys/240659415cyt sysdba”

sqlplus sys/nolog 然后SQL>connect sys/240659415cyt as sysdba SQL>startup nomount---------启动实例不加载数据库

SQL>startup mount----------启动实例也加在数据库

SQL>shutdown immediate------以立即方式关闭数据库

SQL>shutdown-----------------以正常方式关闭数据库

SQL>shutdown abort----------直接关闭数据库

*SQL>help 命令名-----------查找出命令的用法------------------

SQL>conn system/240659415cyt---------切换用户

SQL>passw---------修改用户密码

SQL>show user-------------显示当前用户

SQL>exit---------------断开连接并退出

SQL>start 路径名+文件名.sql-----------------执行此文件的sql语句

SQL>edit路径名+文件名.sql--------------打开编辑文件

SQL>spool 路径名+文件名----------建立文件

SQL>spool off------------停止

SQL>select * from emp where ename=?&name?----其中&表示可以替代变量

SQL>set linesize 80----------------设置显示一行的字符数,默认为80

SQL>set pagesize 5---------------设置一页的行数,用于分页

SQL>create user xiaoming identified by m123;-------------------创建用户,一般是dba才做的SQL>password 用户名---------------------系统用户用于修改用户的密码,普通用户不行SQL>grant connect to xiaoming--------------将连接数据库的角色赋予xiaoming

SQL>grant resource to xiaoming-------------将创建表的角色赋予xiaoming

*如果是对象权限用with grant option,如果是系统权限用with admin option;

相关授权和收回跟上面SQL语言篇相似

SQL>create profile lock_account limit failed_login_attempts 3 password_lock_time 2红色部分是一定要的,lock_account为创建profile的名称,3为最多输入密码的次数,2是锁定的时间。这个一般是dba才能做的。

SQL>alter user xiaoming profile lock_account;--------将配置文件lock_account付给xiaoming SQL>altert user xiaoming account unlock--------------给用户xiaoming解锁,只有dba可以使用SQL>create profile aaa limit password_life_time 10 password_grace_time 2;-----表名10天内要修改一次密码,宽限2天;实际上也就是12天。

SQL>create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10-----------------用户修改密码的时候不能使用以前的密码。password_reuse_time表明可以重用是在10天以后。

SQL>drop profile password_history [cascade]-----删除password_history这个配置文件

SQL>desc 表名----------------查看表结构

SQL>alter table student modify(xm varchar2(30));------将表的字符长度变了

SQL>rename student to stu-----将表student改名为stu

*char类型的数据查询速度比其他字符型的快很多,最大有2000个字符。

*varchar2类型是可变长的,有4000个字符。

*clob是字符型的大对象,有4g大。

*number范围-10的38次方到10的38次方,可以表示整数和小数number(5,2)5表示有效位数,2表示小数点后位数。

*date包含年月日和时分秒,格式是?01-5月-1997?要日月年,并且要加?月?字,这是默认的。可以改日期的格式,SQL>alter session set nls_date_format=?yyyy-mm-dd?

*blob类型可以用来存放图片,声音;有4g之大;一般不把图片和声音存放进去,除非考虑到安全性问题,不然数据库直接存放文件路径。

SQL>savepoint a;---------设置工作点

SQL>rollback to a;----------恢复到a点,在此期间做的操作都作废

SQL>truncate table student------------------删除所有记录,表结构还在,不写日志,无法找回删除记录

注:不要经常使用select * 这样的查询速度并不快;

SQL>set timing on;-------------显示查询时间

*nvl(comm,0)-------如果comm为空值,则用0表示,如果不是就用comm

注:查询条件不允许用分组函数,可以考虑用子查询;在分组查询时,一定是group by 然后再having,最后才order by

Oracle分页查询:一共有三种

1.根据ROWID来分:select * from emp where rowid in (select rid from (select rownum rn,rid

from(select rowid rid,cid from emp order by cid desc) where rownum<10000) where rn>9980) order by cid desc;

2.按照ROWNUM来分:select * from (select t.* ,rownum rn from (select * from emp order by

cid desc) t where rownum<10000) where rn>9980;

3.按照分析函数来分:select * from (select t.*,row_number() over(order by cid desc) rk from

emp t ) where rk<10000 and rk>9980;----*

用jdbc连接数据库:

ClassforName(“oracle.jdbc.driver.OracleDriver”); /*加载驱动,注意需要在Libraries

加载ojdbc14.jar包*/

Connection

conn=DriverManager.getConnection(“jdbc:oracle:thin:@hostAddress:1521:ORCL”,”scott”,”12”); //创建连接

Statement sm=conn.createStatement(); //创建statement实例,用于执行静态的SQL语句//还有PreparedStatement和CallableStatement两种执行动态SQL语句的功能ResultSet rs=sm.executeQuery(“select * from emp”); //获取查询结果

While(rs.next())

{

System.out.println(rs.getString(1));

}

rs.close(); //关闭连接

sm.close();

conn.close();

使用jdbc_odbc连接数据库:

首先要配置数据源;打开控制面板>管理工具>ODBC数据源,接着就点击oracle数据源,然后按照步骤配置。

ClassforName(“sun.jdbc.odbc.JdbcOdbcDriver”); //加载驱动

Connection conn=DriverManager.getConnection(“jdbc:odbc:testcyt”,”scott”,”123456cyt”);//连接Statement sm=conn.createStatement();

ResultSet rs=sm.executeQuery(“select * from emp”);

While()

{

System.out.println(rs.getString(1));

}

rs.close();

sm.close();

conn.close();

用to_date()函数插入固定格式日期的命令:

SQL>insert into student(date) values (to_date(…1988-12-12?,?yyyy-mm-dd?));

设置保存点的时候,期间如果使用SQL>commit;则保存点被删除

设置只读事务:SQL>set transaction read only;---设置只读事物之后,就看不到新的事物发生所导致的结果,便于统计。

sql函数的使用:

1.字符函数:lower(char)、upper(char)、length(char)、substr(char,m,n)、

replace(char,search_string,replace_string)

SQL>select lower(ename) from emp;

SQL>select * from emp where length(ename)=5;

SQL>select substr(ename,1,3) from emp;----从第一个起取3个

SQL>select upper(substr(ename,1,1)) || lower(substr (ename,2,length(ename)-1)) from emp SQL>select replace(ename,?A?,?a?) from emp;-------用a替换A

2.常用的数字函数:rouns(n,[m])执行四舍五入、trunc(n,[m])用于截取数字,如果m是正数,

则截取到小数点的m位后、mod(m,n)、floor(n)返回小于或者等于n的最大整数、ceil(n)返回大于或者等于n的最小整数

SQL>select round(sal) from emp where ename='FORD'------四舍五入到整数

SQL>select round(sal,1) from emp where ename='FORD'-----四舍五入到小数后一位SQL>select trunc(sal,1) from emp where ename=?FORD?-----截取到小数点后一位SQL>select trunk(sal,-1) from emp where ename=?FORD?---截取到小数点前一位SQL>select floor(sal) from emp where ename=?FORD?----------向下取整

SQL>select ceil(sal) from emp where ename=?FORD?----------向上取整

SQL>select mod(10,2) from dual------------------------10模2

在做oracle测试的时候可以用dual表

其他数学函数:abs(n)返回n的绝对值、acos(n)返回数字的反余弦、asin(n)返回数字的反正弦、atan(n)返回数字的反正切、cos(n)、exp(n)返回e的n次幂、log(m,n)返回对数值、power(m,n)返回m的n次幂;

3.日期函数:sysdate:返回系统时间、add_months(d,n):加月份d为月份,n为所加月数

last_day(d):返回指定日期所在月份的最后一天

SQL>select * from emp where sysdate>add_months(hiredate,8);------入职大于八个月

SQL>select * from emp where last_day(hiredate)-2=hiredate;--------每月倒数第三天入职

4.转换函数:to_char(m,n);to_date(m,n)

SQL>select ename,to_char(hiredate,?yyyy-mm-dd hh24:mi:ss?)---------显示时分秒

SQL>select ename,to_char(sal,?L99,999.99?) from emp;--------显示人民币---L显示本地货币符号,C显示国际货币符号,$显示$符号

5.系统函数:sys_context有七个参数terninal:当前会话客户所对应的终端的标示符

language:语言

db_name:当前数据库名称

nls_date_format:当前会话客户所在对应的日期格式

session_user:当前会话客户所对应的数据库用户名

current_schema:当前会话客户所对应的默认方案名

host:返回数据库所在主机的名称

SQL>select sys_context(…USERENV?,参数名) from dual;

注:用户和方案是一一对应的,方案里面存放着用户所用的所有数据对象

数据库管理:

导出自己的表:exp userid=scott/123456cyt@ORCL tables=(emp,dept) file=d:\e1.dmp;

导出其他方案的表:如果用户要导出其他方案的表,则需要dba权限或者exp_full_database 权限;

exp userid =system/240659415cyt@ORCL tables=(scott.emp) file=d:\e2.dmp;

导出表结构:exp userid=scott/123456cyt@ORCL tables=(emp) file=d:\e3.dmp rows=n

使用直接导出方式:exp userid= scott/123456cyt@ORCL tables=(emp) file=d:\e4.dmp direct=y 要导入导出的时候,必须到oracle的bin目录下执行。

导出方案:exp scott/123@ORCL owner=scott file=d:\scott.dmp

导出其他方案:exp system/123@ORCL owner=(system,scott) file=d:\system.dmp

导出数据库:exp userid=system/123@ORCL full=y inctype=complete file=d:\e5.dmp

导入表:imp userid=scott/123@ORCL tables=(emp) file=d:\e1.dmp

导入表到其他用户:imp userid=system/123@ORCL tables=(emp) file=d:\e2.dmp touser=scott 导入表结构:imp userid=scott/123@ORCL tables=(emp) file=d:\e3.dmp rows=n

导入数据:imp userid=scott/123@ORCL tables=(emp) file=d:\e4.dmp ignore=y------对象已经存在就可以只导入数据

导入方案:imp userid=scott/1234@ORCL file=d:\e6.dmp

导入其他方案:imp userid=system/123@ORCL file=d:\e7.dmp fromuser=system touser=scott

导入数据库:imp userid=system/123 full=y file=d:\e8.dmp

sys用户是数据字典的所有者,而其他用户只能在数据字典上执行查询

数据字典的组成:包括数据字典基表和数据字典视图,其中基表存储数据库的基本信息,普通用户不能直接访问数据字典的基表;数据字典视图是基于数据字典基表所建立的视图,普通用户可以通过查询数据字典视图取得系统信息;数据字典视图主要包括user_xxx、all_xxx、dba_xxx三种类型

SQL>select table_name from user_tables------查询当前用户所有的表

SQL>select table_name from all_tables----查询当前用户所能够访问的表

SQL>select table_name from dba_tables---查询所有方案的表,但用户必须拥有dba权限或者select any table 权限

在建立用户时,oracle 会把用户的信息存放到数据字典中,当给用户授权或角色时,oracle 会将权限和角色的信息存放到数据字典中,

通过查询dba_users 可以显示所有数据库用户的详细信息;

通过查询数据字典视图dba_sys_privs ,可以显示用户所具有的系统权限; 通过查询数据字典视图dba_tab_privs 可以显示用户具有的对象权限; 通过查询数据字典dba_col_privs ,可以显示用户所具有的列权限; 通过查询数据库字典视图dba_role_privs 可以显示用户所具有的角色 通过查询数据字典视图role_sys_privs ,可以显示角色所包含的系统权限 通过查询数据字典视图role_tab_privs ,可以显示角色包含的对象权限

//查询oracle 中所有系统权限,一般是要有dba 权限: select * from system_privilege_map order by name; //查询oracle 中所有的角色: select * from dba_roles;

//查询oracle 中所有的对象权限:

select distinct privilege from dba_tab_privs; //查询数据库的表空间

select tablespace_name from dba_tablespaces; //显示当前用户可以访问的所有数据字典视图: select * from dict where comments like …%grant%? //显示当前数据库的全称: select * from global_name;

动态性能视图用于记录当前例程的活动信息,当启动oracle server 时,系统会建立动态性能视图,当oracle server 停止时,系统会删除动态性能视图。Oracle 的所有动态性能视图都是以v_$开始的,并且oracle 为每个动态性能视图都提供了相应的同义词,并且其同义词是以v$开始的;动态性能视图的所有者是sys ,一般情况下,由dba 或是特权用户来查询动态性能视图。(实际应用比较少)

管理表空间和数据文件:

表空间是数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中,从逻辑上讲,数据库则是存放在表空间中,表空间由一个或是多个数据文件组成。

Oracle 中的逻辑结构包括表空间、段、区、块:数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由oracle 块构成的这样一种结构,可以提高数据库的效率。

表空间用于从逻辑上组织数据库的数据,数据库逻辑上是由一个或是多个表空间组成的。通过表空间可以达到以下作用:

1.控制数据库占用的磁盘空间

2.dba可以将不同数据类型部署到不同的位置,这样有利于提高i/o性能,同时利于备份和

恢复等管理操作。

建立表空间:一般是由特权用户或是dba来执行

create tablespace data01 datafile …d:\test\data01.dbf? size 20m uniform size 128k

执行此命令后,会建立名称为data01的表空间,并为该表空间建立名称为data01.dbf的数据文件,区的大小为128k

使用表空间:

create table student(SNO number(4),Sname varchar2(10)) tablespace data01;

改变表空间状态:当在进行系统维护或是数据维护时,可能需要改变表空间状态,一般情况先,有特权用户或是dba来操作;

1.使表空间脱机:alter tablespace 表空间名offline;

2.使表空间联机:alter tablespace 表空间名online;

3.只读表空间:alter tablespace 表空间名read only;

4.可读写表空间:alter tablespace 表空间名read write;

知道表空间名,显示该表空间包括的所有表:

select * from all_tables where tablespace_name=?表空间名?;

知道表名,查看该表属于哪个表空间:

select tablespace_name,table_name from user_tables where table_name=?emp?;

删除表空间:一般是由特权用户或是dba来操作,如果是其他用户,需要有drop tablespace 权限

drop tablespace ‘表空间名’including contents and datafiles;------这样就包含删除该表空间的所有数据对象;

扩展表空间:有三种方法

1.增加数据文件:alter tablespace 表空间名add datafile …d:\test\cc.dbf? size 20m;

2.增加数据文件的大小:alter tablespace 表空间名…d:\test\cc.dbf? resize 20m;

3.设置文件的自动增长:alter database datafile …d:\test\cc.dbf? autoextend on next 10m maxsize

500m;

移动数据文件:步骤如下

1.确定数据文件所在的表空间:select tablespace_name from dba_data_files where

file_name=?d:\cc.dbf?;

2.是表空间脱机:确保数据文件的一致性,将表空间转为offline状态

alter tablespace cc offline;

3.使用命令移动数据文件到指定的目标位置:

host move d:\cc.dbf c:\cc.dbf;------将数据移动到c盘目录下

4.执行alter tablespace命令:在物理上移动了数据后,还必须执行alter tablespace命令对

数据文件进行逻辑修改:alter tablespace cc rename datafile ‘d:\cc.dbf’to …c:\cc.dbf?; 5.使表空间联机:alter tablespace cc online;

完整性约束:

数据完整性确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束、触发器、应用程序(过程,函数)三种方法来实现;因为约束易于维护并由最好的性能,所以作为维护数据完整性的首选。

约束包括:not null;unique;primary key;foreign key;check。

可以用alter table命令为表增加约束,但注意增加not null约束时,需要使用modify选项

索引:

创建索引:

单列索引-----create index 索引名on 表名(列名)

复合索引-----create index 索引名on 表名(先查的列名,后查的列名)

索引一般是在大表中才建立的;在where子句或者连接条件经常用的列上建立;索引一般不要超过四层;

索引缺点:

1.建立索引,系统要占用大约为表的1.2被的硬盘和内存空间来保存索引

2.更新数据时,系统必须要有额外的时间来同时对索引进行更新,不恰当的索引会降低系

统的性能,因为大量索引在进行增删改的时候比没有索引的要花费更多的系统时间。显示表的所有索引:

通过查询数据字典视图dba_indexes和user_indexes,可以显示索引信息。其中dba_indexs 用于显示数据库所有的索引信息,而user_indexs用于显示当前用户的索引信息。

select index_name,index_type from user_indexs where table_name=?表名?;

通过查询数据字典视图user_ind_columns,可以显示索引对应的列信息

select table_name,column_name from user_ind_columns where index_name=?索引名?;

管理权限和角色:

1.什么是系统权限、系统权限有哪些、如何赋予系统权限

2.什么是对象权限、对象权限有哪些、如何赋予对象权限

如果要执行某种特定的数据库操作,则必须为其授予系统权限;如果用户要访问其他方案的对象,则必须为其授予对象权限。为了简化权限的管理,引入了角色的概念。

系统权限是指执行特定类型的sql命令的权利,它用于控制用户可以执行的一个或是一组数据库操作;

授权:grant 系统权限to 用户with admin option;

回收权限:revoke 系统权限from 用户;

系统权限不是级联回收的

对象权限是指访问其他方案对象的权利,用户可以直接访问自己的方案的对象,但要访问别的方案对象时,必须有对象的权限。

授权:grant 权限on 表名to 用户with grant option

grant 权限on 表名(列名)to 用户with grant option ----授予列权限

收回权限:revoke 权限on 表名from 用户

对象权限是级联回收的

角色:是指相关权限的命令集合。分为预定义角色和自定义角色

常用预定义角色:connect,resource,dba;其中dba角色没有开启和关闭数据库的权限

自定义角色:

建立角色(不验证):

create role 角色名not identified

建立角色(数据库验证)采用这个方式,当激活角色时,需要提供口令:

create role 角色名identified by 123;

角色授权:跟之前的授权一样;

分配角色给用户:一般分配角色是由dba来完成的,如果以其他用户身份分配,则要求用户有grant any role的系统权限。

grant 角色名to 用户with admin option;

删除角色:一般都是dba来执行的,除非其他用户有drop any role的权限

drop role 角色名;

PL/SQL编程:

pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展。

1.过程、函数、触发器是用pl/sql编写的

2.过程、函数、触发器是存放在oracle中的

3.pl/sql是非常强大的数据库过程语言

4.用pl/sql编写的过程、函数可以在java程序中调用

优点:

1.提高应用程序的运行性能

2.模块化的设计思想

3.减少网络传输量

4.安全性好

缺点:

1.移植性并不好

创建存储过程:

create procedure 过程名is

begin

--执行部分

insert into emp values(…asdfa?,123);

end;

查看错误信息:show error;

调用过程:exec 过程名(参数值1,参数值2);------call过程名(参数值1,参数值2);

编写规范:

1.注释:单行注释--;多行注释/*-------*/

2.标示符号得命名规范:

a.当定义变量时,用v_作为前缀

b.当定义常量时,用c_最为前缀

c.当定义游标时,用_cursor作为后缀

d.当定义例外时,用e_最为前缀

块的结构:

declare

/* 定义部分--------定义常量、变量、游标、例外、复杂的数据类型---可选*/

begin

/*执行部分--------要执行的pl/sql语句和sql语句-----必选*/

exception

/*例外处理部分---------处理运行的各种错误-----可选*/

end;

在pl/sql程序中包括有

标量(scalar)-常用类型

1.定义一个变长字符串:v_ename varchar2(10);

2.定义一个小数:v_sal number(6,2);

3.定义一个小数并给一个初始值为5.4:v_sal2 number(6,2):=5.4;

4.定义一个日期类型的数据:v_hiredate date;

5.定义一个布尔变量,不能为空,初始值为false:v_valid boolean not null default false;

pl/sql块为变量赋值不同于其他的编程语言,需要在等号前加冒号(:=);

标量----使用%type例如:v_ename emp.ename%type; 表示v_ename 类型和表的一样

复合变量(composite)

1.pl/sql记录:类似高级语言中的结构体

declare

type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title emp.job%type);

cyt_record emp_record_type --定义一个类型为emp_record_type的变量

2.pl/sql表:相当于高级语言中的数组,但下标可以为负数

declare

type emp_record_type is table of emp.ename%type index by binary_integer;

cyt_record emp_record_type;

其中emp.ename%type index by binary_integer表示定义一个emp.ename%type类型的以整数为下标的数组;

3.嵌套表----*

4.varray-----*

参照变量:指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享相同的对象,从而降低占用的空间,在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量(ref obj_type)两种参照变量类型

游标变量:当定义游标时不需要指定相应的select 语句,但当使用游标时需要指定select语句,这样一个游标就与一个select语句结合

declare

--定义游标类型

type cyt_emp_cursor is ref cursor;

--定义一个游标变量

cyt_cursor cyt_emp_cursor;

--定义变量

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

open cyt_cursor for select ename,sal from emp where deptno=&no;

-- 循环取出

loop

fetch cyt_cursor into v_ename,v_sal;

exit when cyt_cursor%notfound;

dbms_output.put_line('名字:'||v_ename||'工资:'||v_sal);

end loop;

end;

有定义部分和执行部分:

declare

v_ename varchar2(5);

v_sal number(7,2);

begin

select ename,sal into v_ename,v_sal from emp where empno=&no;

dbms_output.put_line('雇员名:'||v_ename||v_sal);

end;

有定义部分、执行部分和例外部分:

declare

v_ename varchar2(5);

v_sal number(7,2);

begin

select ename,sal into v_ename,v_sal from emp where empno=&no;

dbms_output.put_line('雇员名:'||v_ename||'薪水'||v_sal);

exception

when no_data_found then

dbms_output.put_line('输入有误!');

end;

过程:用于执行特定的操作。当建立过程时,既可以指定输入参数,也可以指定输出参数;通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。

函数:用于返回特定的数据,当建立函数时,在函数头部必须包含return子句,而在函数体内必须包含return语句返回的数据。

create or replace function cyt_fun1(cytName varchar2) return number is mysal number(7,2);

begin

select sal into mysal from emp where ename=cytName;

return mysal;

end;

SQL> var abc number;

SQL> call cyt_fun1('SCOTT') into:abc;

包:用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。

创建包:

create package cyt_pac1 is

procedure cyt_pro4(cytName varchar2,newSal number);

function cyt_fun1(cytName varchar2) return number;

end;

创建包体:

create package body cyt_pac1 is

procedure cyt_pro4(cytName varchar2,newSal number) is

begin

update emp set sal=newSal where ename=cytName;

end;

function cyt_fun1(cytName varchar2) return number is

mysal number(7,2);

begin

select sal into mysal from emp where ename=cytName;

return mysal;

end;

end;

触发器:是指隐含的执行的存储过程。可维护数据库的安全性和一致性。

pl/sql进阶:

使用各种if语句;使用循环语句;使用控制语句

pl/sql提供了三种条件分支语句:

if------then ; if----then---else ; if---elsif---else

create procedure cyt_pro10(v_ename emp.ename%type) is

v_sal emp.sal%type;

begin

select sal into v_sal from emp where ename=v_ename;

if v_sal<5000 then

update emp set sal=5000 where ename=v_ename;

end if;

end;

控制结构:

循环语句:

loop:以loop开头,以end loop结尾

create or replace procedure cyt_pro11 is

v_id number(3):=1;

begin

loop

insert into cyt values('cyt','123');

exit when v_id=10;

v_id:=v_id+1; --没有++这种方法

end loop;

end;

while:以while---loop开始,end loop结束

create or replace procedure cyt_pro12 is

v_id number(3):=11;

begin

while v_id<=20 loop

insert into cyt values('cyt','123');

v_id:=v_id+1;

end loop;

end;

for循环基本结构如下:

for i in reverse 1…10 loop

---------执行体

end loop;

*goto语句----不建议使用

declare

i int :=1;

begin

loop

dbms_output.put_line('123');

if i=10 then

goto end_loop;

end if;

i:=i+1;

end loop;

<>

dbms_output.put_line('循环结束');

end;

create or replace procedure cyt_pro00(cytName in varchar2,cytId out emp.empno%type)is

begin

select empno into cytId from emp where ename=cytName;

end;

使用out输出返回值;

--1.返回结果集

create or replace package cyt_pac00 as

type test_cursor is ref cursor;

end cyt_pac00;

--2.创建过程

create or replace procedure cyt_pro21(cytNo in number,p_cursor out cyt_pac00.test_cursor) is

begin

open p_cursor for select * from emp where deptno=cytNo;

end;

分页:

create or replace package mypac as

type my_cursor is ref cursor;

end mypac;

create or replace procedure fenye

(tableName in varchar2,

cytPageSize in number,

cytPageNow in number,

myrows out number,

myPageCount out number,

cyt_my_cursor out mypac.my_cursor)is

v_sql varchar2(1000);

v_begin number:=(cytPageNow-1)*cytPageSize+1;

v_end number:=cytPageNow*cytPageSize;

begin

v_sql:='select * from (select t1.*,rownum rn from(select * from '||tableName||') t1 where rownum<='||v_end||') where rn>='||v_begin;

open cyt_my_cursor for v_sql;

v_sql:='select count(*) from '||tableName;

execute immediate v_sql into myrows;

if mod(myrows,cytPageSize)=0 then

myPageCount:=myrows/cytPageSize;

else

myPageCount:=myrows/cytPageSize+1;

end if;

end;

pl/sql----例外处理

预定义例外:

case_not_found:在开发pl/sql块中编写case语句时,如果在when子句中没有包含必须的条件分支,就会触发case_not_found的例外:

cursor_already_open:当重新打开已经打开的游标时,会隐含的触发例外:

dul_val_on_index:在唯一索引所对应的列上插入重复的值时,会隐含的触发例外:

invalid_cursor:当试图在不合法的游标上执行操作时,会触发该例外:

invalid_number:当输入的数据有误时,会触发该例外:

no_data_found:当数据没有查到就触发例外

too_many_rows:当执行select into语句时,如果返回超过一行,则会触发例外:

zero_divide:当执行2/0语句时,如果返回为0行,则会触发该例外

value_error:当在执行赋值操作时,如果变量的长度不足以容纳实际的长度,则会触发

其他预定义例外:

login_denide:当用户没有登录时,会触发该例外

not_logged_on:如果用户没有登录就执行dml操作,就会触发该例外

storage_error:如果超出了内存空间或是内存被损坏,就会触发例外

timeout_on_resource:如果oracle在等待资源时,出现了超时就触发例外

处理自定义例外:

定义例外:

例外名 exception;

create or replace procedure ex_test(cytNo number) is

myex exception;

begin

update emp set sal=sal+100 where empno=cytNo;

if sql%notfound then

raise myex;

end if;

exception

when myex then

dbms_output.put_line('没有更新任何用户');

end;

视图创建:

create view 视图名 as select语句 [with read only];

create view or replace 视图名 as select语句 [with read only]; drop view 视图名

SQL-Server数据库上机实验报告

SQL-Server数据库上机实验报告

《数据库系统原理》上机实验报告 学号:1120131743 姓名:谈兆年 班级:07111301

一、实验目的与要求: ●熟练使用SQL语句 ●掌握关系模型上的完整性约束机制 二、实验内容 1:利用SQL语句创建Employee数据库 CREATE DATABASE Employee; 结果: 2:利用SQL语句在Employee数据库中创建人员表person、月薪表salary及部门表dept。 做法:按表1、表2、表3中的字段说明创建 表1 person表结构 字段名数据 类型 字段 长度 允许空 否 字段说明 P_no Char 6 Not Null 工号,主键P_na Varch10 Not 姓名

me ar Null Sex Char 2 Not Null 性别 Birth date Dateti me Null 出生日期 Prof Varch ar 10 Null 职称 Dept no Char 4 Not Null 部门代码,外键 (参照dept表)表2 salary表结构 字段名数据 类型 字段 长度 允许空 否 字段说明 P_no Char 6 Not Null 工号,主键,外键(参照person表) Base Dec 5 Null 基本工资Bonu s Dec 5 Null 奖金,要求>50 Fact Dec 5 Null 实发工资=基本工 资+奖金 Mont h Int 2 Not Null 月份

表3 dept表结构 字段名数据 类型 字段 长度 允许空 否 字段说明 Dept no Char 4 Not Null 部门代码,主键, Dna me Varch ar 10 Not Null 部门名称 程序为: CREATE TABLE dept( deptno CHAR(4) PRIMARY KEY NOT NULL, dname V ARCHAR(10) NOT NULL) CREATE TABLE Person( P_no CHAR(6) PRIMARY KEY Not Null, P_name V ARCHAR(10) Not Null, Sex CHAR(2) Not Null, Birthdate Datetime Null, Prof V ARCHAR(10) Null, Deptno CHAR(4) Not Null, FOREIGN KEY(Deptno) REFERENCES

关于《数据库原理与运用》学习心得体会

三一文库(https://www.doczj.com/doc/167390980.html,)/总结报告/思想学习 关于《数据库原理与运用》学习心得 体会 摘要 信息资源已成为社会各行业的重要资源和财富,作为实施有效信息处理的信息系统已成为一个企业或组织生存和发展的重要基础条件。由于数据库技术是信息系统的核心和基础,因而得到快速的发展和越来越广泛的运用。数据库技术主要是研究如何科学的组织和存储数据、高效地获取和处理数据,是数据库管理的最新技术,是计算机科学与技术的重要分支。数据库技术可以为各种用户提供及时、准确、相关的信息,满足用户各种不同的需求。 在基于对SQLServer20XX彻底的、面向企业的改进之 后,SQLServer20XX为我们带来了非常引人注目的特性,比如数据库引擎中的数据及备份压缩、稀疏列、压缩与过滤索引,这些功能都是为了节省存储空间,环保、绿色。 前言

大约12年前学习过机械工业出版社的《数据库系统原理及运用教程》,没想到这学期也同样开设了高等教育出版社的《数据库原理与应用》(第二版),加之在日常工作中也常常用到数据库进行数据分析、传递等,因此,重新翻阅这本书有种老友相见,分外亲切的感觉。 数据库系统自产生以来,从第一代的层次性和网状型数据库系统、第二代的关系数据库系统,到新一代的数据库系统,无论是理论上还是运用上都得到了飞速的发展。现代运用不论是对数据模型还是数据库系统都提出了更高和更新的需求,但令人欣慰的是,数据库的理论研究、实际运用和发展,都给人们一种耳目一新的感觉和希望。 正文 通过重新学习这门课程,通过理论与实际相结合,使我对数据库技术又有了比较全面的了解,对数据库应用的基本知识有了新的认识。这门课程以关系数据库系统为核心,系统全面地阐述了数据库系统的基本概念、基本原理和应用技术,主要内容包括数据库技术概述、关系数据库、关系数据库的标准语言SQL、关系数据库设计、数据库保护、网络数据库、网络数据库管理系统SQLServer2000、分布式数据库系统、XML数据库等。 当今的数据库以关系数据库为主流,但为了赶时髦,各大数据库也在开发面向对象的关系型数据库,把高级程序设计语言和数据库实现无缝连接,以发挥各自的优缺点。高级程序设计语言

《数据库原理》3-5章作业(答案201402)

《数据库原理》知识点 参考答案 第三章 1、什么是视图?视图有什么作用? 答: 视图是一个虚表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。 通过以上可看出,数据库管理员可以为用户提供一个观察数据的窗口,而不必像基本表一样将所有字段都提供给用户,从而起到如下几方面作用: (1)简化用户的操作 (2)使用户能够以多种角度看待同一数据 (3)对重构数据库提供了一定程度的逻辑独立性 (4)对机密数据提供安全保护 (5)适当利用视图可以更清晰的表达查询 2、什么是基本表?与视图的区别和联系是什么? 答: 基本表是独立存在的表。在SQL中,一个关系对应于一个表。 视图是从一个或多个基本表所导出的表。视图本身并不独立存储在数据库中,是一个虚表,即数据库中只存放视图的定义而不存放其所对应的数据,这些数据仍然存放在导出视图的基本表中。 视图在概念上与基本表等同,用户可以像使用基本表那样使用视图,可以在视图上再定义视图。 3、结合课后作业11 作业11:请为三建工程项目建立一个供应情况的视图,包括:供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。并对该视图完成下列查询: (1)找出三建工程项目使用的各种零件代码及其数量; (2)找出供应商S1的供应情况。 答: 根据题意,首先需创建视图,创建视图语句如下: CREATE VIEW V_SPJ AS SELECT SNO、PNO、QTY FROM SPJ WHERE JNO = (SELECT JNO FROM J WHERE JNAME = ‘三建’); 或:

sql server实训总结4篇

sql server实训总结4篇 sql server实训总结4篇 sql server实训总结篇一: 为期一周的实训已经结束,从这一周中,有了很多的感悟。从学到和掌握到的东西来说,在书本上学到的东西非常不牢固,然而实训真的让我受益匪浅! 实训第一天到教室时,看到老师给我们讲试训的内容与要求,然后告诉我们一些要完成的任务与作业,然后根据试训的内容与要求授课,让我们从实践中去体会所学的知识。说实话,对于SQL Server 数据库,我所学到的知识很不牢固,当时在课堂上听课所记住的也并不多,所以在试训开始时,真的不知道该干些什么?有一种何去何从的感觉!但随着老师的教课和讲解,以及和同学的讨论,再结合自己所知道的知识和老师所发放下的课程内容,根据这些实际的情况,我对自己将要做的事也有了兴趣和信心。所以在接下来的时间中,我们在老师的帮助下开始了数据库相关的实训。 在这次的google订餐系统的设计过程中,我们根据该google订餐系统的功能,将其分解三大部分来完成,第一部分就是建立数据库和表,并给其添加约束;第二是角色的管理,分为管理员,订餐用户和餐馆;第三就是用编程语言建立管理菜单。所以试训的内容是从数据库和数据表的创建和修改开始的,表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表属性,有查看表信息,修改表中数据,删除表中的数据以及修改表与删除表的操作。

我们以SQL Server数据库为基础,建立一个google订餐系统的数据库管理体系,并将数据库与程序连接,用编程语言建立数据库管理菜单。老师给我们讲了库和表的创建方法,以及约束的内心及其语法结构,让我们知道了不同约束的功能和使用的环境,还给我们说了标识列的使用和作用。讲了数据库的操作,增删改查。使我们掌握了insert into,deleted from,update set,以及selet*from语句的的相关知识和运用。其中还学到了分页查询以及多表查询。 从这次试训中让我们更明白了一些知识,表是数据库最重要的一个数据对象,表的创建好坏直接关系到数据库的成败,表的内容是越具体越好,但是也不能太繁琐,以后在实际运用中使用多表,对表的规划和理解就会越深刻。通过这次试训,让我深刻的了解到自己的不足,要想对进行数据库更深的学习,自己得要多看有关的课外书籍,并多做练习,不懂得要多问同学和请教老师,以解决自己遇到的难题,知道更多的知识。实训不仅是让我们在实践中对理论知识的验证,也让我们知道我们多学的知识在社会上的运用,把所学知识和企业商业接轨。 这次实训,不仅让我们学到了许多有关数据库的知识,老师也给我们讲了很多社会现状和就业情况,让我们不同的角度了解这个专业的就业趋势。让我们在今后的学习中更有动力的充实自己,曾加自己的知识面和锻炼自己各方面能力。 sql server实训总结 篇二:

福建工程学院《实验指导书(数据库系统原理及应用)》

数据库系统原理 实验指导书 (本科)

目录 实验一数据定义语言 (1) 实验二SQL Sever中的单表查询 (3) 实验三SQL Serve中的连接查询 (4) 实验四SQL Serve的数据更新、视图 (5) 实验五数据控制(完整性与安全性) (7) 实验六语法元素与流程控制 (9) 实验七存储过程与用户自定义函数 (11) 实验八触发器 (12)

实验一数据定义语言 一、实验目的 1.熟悉SQL Server2000/2005查询分析器。 2.掌握SQL语言的DDL语言,在SQL Server2000/2005环境下采用Transact-SQL实现表 的定义、删除与修改,掌握索引的建立与删除方法。 3.掌握SQL Server2000/2005实现完整性的六种约束。 二、实验内容 1.启动SQL Server2000/2005查询分析器,并连接服务器。 2.创建数据库: (请先在D盘下创建DB文件夹) 1)在SQL Server2000中建立一个StuDB数据库: 有一个数据文件:逻辑名为StuData,文件名为“d:\db\S tuDat.mdf”,文件初始大小为5MB,文件的最大大小不受限制,文件的增长率为2MB; 有一个日志文件,逻辑名为StuLog,文件名为“d:\db\StuLog.ldf”,文件初始大小为5MB,文件的最大大小为10MB,文件的增长率为10% 2)刷新管理器查看是否创建成功,右击StuDB查看它的属性。 3.设置StuDB为当前数据库。 4.在StuDB数据库中作如下操作: 设有如下关系表S:S(CLASS,SNO, NAME, SEX, AGE), 其中:CLASS为班号,char(5) ;SNO为座号,char(2);NAME为姓名,char(10),设姓名的取值唯一;SEX为性别,char(2) ;AGE为年龄,int,表中主码为班号+座号。 写出实现下列功能的SQL语句。 (1)创建表S; (2)刷新管理器查看表是否创建成功; (3)右击表S插入3个记录:95031班25号李明,男性,21岁; 95101班10号王丽,女性,20岁; 95031班座号为30,名为郑和的学生记录; (4)将年龄的数据类型改为smallint; (5)向S表添加“入学时间(comedate)”列,其数据类型为日期型(datetime); (6)对表S,按年龄降序建索引(索引名为inxage); (7)删除S表的inxage索引; (8)删除S表; 5.在StuDB数据库中, (1)按照《数据库系统概论》(第四版)P82页的学生-课程数据库创建STUDENT、COURSE 和SC三张表,每一张表都必须有主码约束,合理使用列级完整性约束和表级完整性。 并输入相关数据。 (2)将StuDB数据库分离,在D盘下创建DB文件夹下找到StuDB数据库的两个文件,进行备份,后面的实验要用到这个数据库。 6.(课外)按照《数据库系统概论》(第四版)P74页习题5的SPJ数据库。创建SPJ数据 库,并在其中创建S、P、J和SPJ四张表。每一张表都必须有主码约束,合理使用列级完整性约束和表级完整性。要作好备份以便后面的实验使用该数据库数据。 三、实验要求:

(11-12-2)数据库原理试卷A(答案)

命题人:何国辉审核人:试卷分类(A卷或B卷) A 五邑大学试卷 学期: 2011至 2012学年度第 2 学期 课程:数据库原理课程代号: 使用班级:姓名:学号: 并将正确答案的序号填在括号内。每小题1.5分,共30分) 1.数据库系统的核心是( B )。 A. 数据库 B. 数据库管理系统 C. 数据模型 D. 软件工具 2.在数据库的三级模式结构中,内模式有 ( A ) 。 A.1个B.2个C.3个D.任意多个 3.描述事物的符号记录称为 ( B )。 A.信息B.数据C.记录D.记录集合 4.用二维表结构表示实体以及实体间联系的数据模型称为( C )。 A.网状模型B.层次模型 C.关系模型D.面向对象模型 5.( B )属于信息世界的模型,实际上是现实世界到机器世界的一个中间层次。 A.数据模型B.信息模型C.E-R图D.关系模型 6.从E-R模型向关系模型转换时,一个m:n 联系转换为关系模式时,该关系模式的码是( C )。

7.有15个实体类型,并且它们之间存在着15个不同的二元联系,其中5个是1:1联系类型,5个是 1:N联系类型,5个是M:N联系类型,那么根据转换规则,这个ER结构转换成的关系模式至少有( B )。 A.15个B.20个C.25个D.30个 8.在数据库系统中,最接近于物理存储设备一级的结构称为( D )。 A.外模式 B.概念模式 C.用户模式D.内模式 9.设关系R和S的元组个数分别为100和300,关系T是R与S的笛卡尔积,则T的元组个数是( C )。 A.400 B.10000 C.30000 D.90000 10.数据库中只存放视图的( C )。 A .操作 B. 对应的数据 C. 定义 D. 限制 11.同一个关系模型的任意两个元组值( A )。 A. 不能全同 B. 可不同 C. 必须全同 D. 以上都不是 12.数据库中的封锁机制(lock)是( C )的主要方法。 A. 完整性 B.安全性 C.并发控制 D.恢复 13.消除了部分函数依赖的1NF的关系模式,必定是( B )。 A.1NF B.2NF C.3NF D.4NF 14.设有关系B(编号,名称),如果要检索第3个字母为N,且至少包含4个字母的名称,则SQL查询 语句中WHERE子句的条件表达式应写成:名称 Like( C )。 A. ’_ _N _’ B. ‘_ _ N%’ C. ‘_ _ N _ %’ D. ‘_%N_ _’ 15.在SQL的下列语句中,能够实现实体完整性约束的语句是( B )。 A.FOREIGN KEY B.PRIMARY KEY C.REFERENCES D.FOREIGN KEY和REFERENCES 16.在关系数据库设计中,设计E-R图是( B )的任务。

SQL实习总结5篇

SQL实习总结5篇 为期一周的实训已经结束,从这一周中,有了很多的感悟。从学到和掌握到的东西来说,在书本上学到的东西非常不牢固,然而实训真的让我受益匪浅。 实训第一天到教室时,看到老师给我们讲试训的内容与要求,然后告诉我们一些要完成的任务与作业,然后根据试训的内容与要求授课,让我们从实践中去体会所学的知识。说实话,对于SQL Server 数据库,我所学到的知识很不牢固,当时在课堂上听课所记住的也并不多,所以在试训开始时,真的不知道该干些什么?有一种“何去何从”的感觉。但随着老师的教课和讲解,以及和同学的讨论,再结合自己所知道的知识和老师所发放下的课程内容,根据这些实际的情况,我对自己将要做的事也有了兴趣和信心。所以在接下来的时间中,我们在老师的帮助下开始了数据库相关的实训。 在这次的google订餐系统的设计过程中,我们根据该google订餐系统的功能,将其分解三大部分来完成,第一部分就是建立数据库和表,并给其添加约束;第二是角色的管理,分为管理员,订餐用户和餐馆;第三就是用编程语言建立管理菜单。所以 试训的内容是从数据库和数据表的创建和修改开始的,表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操

作过程中,有查看表属性,有查看表信息,修改表中数据,删除表中的数据以及修改表与删除表的操作。我们以SQL Server数据库为基础,建立一个google订餐系统的数据库管理体系,并将数据库与程序连接,用编程语言建立数据库管理菜单。老师给我们讲了库和表的创建方法,以及约束的内心及其语法结构,让我们知道了不同约束的功能和使用的环境,还给我们说了标识列的使用和作用。讲了数据库的操作,增删改查。使我们掌握了insert into,deleted from,update set,以及select*from语句的的相关知识和运用。其中还学到了分页查询以及多表查询。 从这次试训中让我们更明白了一些知识,表是数据库最重要的一个数据对象,表的创建好坏直接关系到数据库的成败,表的内容是越具体越好,但是也不能太繁琐,以后在实际运用中使用多表,对表的规划和理解就会越深刻。通过这次试训,让我深刻的了解到自己的不足,要想对进行数据库更深的学习,自己得要多看有关的课外书籍,并多做练习,不懂得要多问同学和请教老师,以解决自己遇到的难题,知道更多的知识。实训不仅是让我们在实践中对理论知识的验证,也让我们知道我们多学的知识在社会上的运用,把所学知识和企业商业接轨。 这次实训,不仅让我们学到了许多有关数据库的知识,老师也给我们讲了很多社会现状和就业情况,让我们不同的角度了解这个专业

《数据库系统原理》实验报告

《数据库系统原理》实验 实验1 表和表数据的操作 一、实验目的 掌握在SQL Server 2000环境下,利用SQL语言创建和管理表的方法。 二、实验要求 1、学会利用SQL语句建立自定义数据类型; 2、掌握使用SQL语句建立数据表的方法; 3、掌握数据表的修改及删除方法(界面方式及语句方式); 4、掌握T-SQL中的INSERT、UPDATE及DELETE语句的使用方法; 三、实验内容 1、创建数据库 利用“查询分析器”创建“stuscore”数据库。 CREATE DATABASE stuscore 2、创建数据表 (1)用“查询分析器”建立stuscore数据库中的学生表(Student)、班级表(Class)、课程表(Course)及成绩表(Grade),结构如下: create table student (sno char(8) primary key, sname varchar(10), sex char(2), clsno char(6), stuaddr varchar(20), birthday char(20), height DEC(4,2), foreign key(clsno) references class(clsno) );

create table class (clsno char(6) primary key, clsname varchar(16), dorector varchar(10), specialty varchar(30) ); create table course (cno char(4) primary key, cname varchar(16), pcno char(4), credit tinyint ); create table grade (sno char(8), cno char(4), scorce int, primary key(sno,cno) );

数据库原理学习笔记

第一章,数据库系统概述 1.1 1,数据(DATA):数据是数据库存储中的基本对象,描述事务的符号记录。 数据解释;对数据含义的说明,数据的含义成为数据的语义。 2,数据库(DB):长期存储在计算机内,有组织的可以共享的数据的集合。 3,数据库管理系统(DBMS):数据库管理系统软件。 (1),数据定义功能(DDL,数据定义语言),对数据库重的数据对象进行定义(2),数据操纵功能(dml 数据操纵语言) (3),数据库的运行管理,保证数据的安全性,完整性,系统恢复,多用户对数据库的并发使用 (4),数据库的建立和维护功能,数据库初始数据输入,切换,数据库的存储,回复功能,数据库的重组功能,性能监视分析功能 4,数据库系统(DBS):由DB DBMS DBA 应

用系统组成。 1.2 数据的处理指的是对各种数据进行搜集存储加工和传播 数据管理,对数据进行分类组织编码存储和检索和维护 数据库管理技术经历了人工管理,文件系统,数据库系统三个阶段。 数据库系统管理的特点 1,数据结构化,与文件系统的根 本区别,可以存储数据库中的 某一个数据项,某一组数据项,, 一个记录或一组记录。 2,共享性高,冗余度低,易扩充 3,数据的独立性高 a)物理独立性 b)逻辑独立性 4,数据由DBMS统一管理和控制 a)数据的安全性保护 b)数据的完整性检查,即正确性 c)并发控制数据库恢复 数据库系统的组成

1,数据库 a)硬件平台及数据库; i.要求有足够大的内存 ii.要有足够大的磁盘的直接存储设备 iii.要求系统有较高的通道,提高数据的传输率 b)对软件的要求 i.DBMS 数据库的建立维护和使用 配置的软件 ii.支持DBMS运行的操作系统 iii.具有数据库借口的高级语言及其编译系统 iv.以DBMS为核心的应用开发工具v.为特定应用环境开发的数据库应用系统 c)人员数据抽象级别不同,具有不同 的数据视图 i.数据库管理员 1.决定数据库的信息内容和结构 2.决定数据库的存储结构和存储 策略(为了提高存取效率和空

上海市高等教育自学考试数据库系统原理(实践)

上海市高等教育自学考试 计算机信息管理、网络、软件专业 (独立本科段) 《数据库系统原理》实践性环节考核大纲 一、考核目标 1. 具有熟练使用PowerBuilder 9.0建立本地数据库和基本表、视图的能力。 2.掌握使用PowerBuilder 9.0建立数据库应用程序的方法。 二、运行环境 1. 平台:Windows 2000 2. PowerBuilder 9.0 软件 三、考核方式 实行闭卷考核。 四、考核时间和日期 上机考核每次为1小时;考核日期另行规定。 五、考核范围 1. 数据库的基本操作 建立数据库;连接数据库;建立表、主键、外键; 数据插入、查询、删除和修改;建立视图。 2. 建立数据库应用程序 建立工作空间、目标、应用;建立数据窗口对象; 建立主窗口(含数据窗口、命令按鈕、静态文本框和单行编辑器等控件); 书写脚本;运行应用程序。 六、上机参考书籍及内容 《数据库系统原理》,全国高等教育自学考试指导委员会组编,丁宝康主编,经济科学出版社2007年版。 教材“第8章 PowerBuilder 9.0简介及应用”中 8.2节(“学生选课系统”开发过程)中“‘数据操作’窗口”的有关内容。具体上机样题见下面内容七。 七、上机样题 (一)上机题目 在PowerBuilder9.0环境中完成下面两个任务: ·建立一个有关学生、课程、选修等有关信息的数据库; ·建立有关数据浏览、插入、查找、修改和删除等操作的应用程序及界面。 (二)操作步骤(应严格按照下列步骤操作) 1. 建立数据库newdb (数据库文件newdb.db必须保存在C:\temp目录下)。 (自动连接数据库,ODBC数据源名也为newdb)。 2. 在数据库newdb中建立三张表: s(sno,sname,age,sex) c(cno,cname,tname) sc(sno,cno, score) 上述属性中,age和score为smallint型,其余均为char型。

SQL实训总结

SQL实训总结 为期五天的实习,很快就过去了,让我重新了解了丰富多彩的编程生活,感受到了学习的快乐,也感觉到了许许多多的专业问题,亲身体验了窗体与工程制成之后的喜悦之情。 在实训期间,我学到了许多东西,遇到了一些困难,也看到了自己本身存在着许多问题。 这次实训给我带来了危机感和压迫力,让人警醒,更加清楚自己的水平和重量,心里总有种被大石头压着的无力感,但是又凭着一种坚持,奋力的抗争着。所以也得出个结论,那就是——我得好好好好的努力啊。 这已经是我们的第四次实训了,在我进入大学的这两年多里,或多或少的学到了一些专业的东西。 我知道自己很爱玩,于是为了能够提高锻炼自己,我把本次为期一周的VB、SQL制作实训看作是一个通向社会,通向我的工作岗位的“理论与实践相结合的桥梁”。在本周的实训和学习,我一直知道此次实训的目的,也知道我自己的目的,同时也清楚目前自己的不足——缺乏相应的知识与经验,对所学的专业知识不能够很好地运用于实践操作,所以我是认真的对待这次实训的。 在这次实训中,我也有许多收获。首先,我体会到了作为一个VB设计师,不会将VB与SQL 结合的痛苦和尴尬;然后,我发现了很多以前都不曾注意到的细节;其次,在实训中,我对作为一名编程者应该学习的内容做了一个更深层次的理解;最后,我还从这次实训中看到了自己很他人的差距,危机意识增强,为了不使这个差距拉大,甚至赶上前面的同学,我会努力的。 本次实训,给我最深刻、最刻骨铭心的感觉就是累,不仅每天白天要一整天对着一台机器,而且到了晚上还要对着这台机器来一个法式的“秉烛夜谈”,可惜的是没有浪漫的事前发生,我也只是对牛谈情而已,不似李白的“举杯邀明月,对影成三人”啊,我就和一部会说话的机器唧唧歪歪。我时常想,以后的日子里,如果我成为了一名编程师也会是这样吗?好像很无聊的样子啊。好动的我一定坐不住吧。可是,我也知道,为了衣食父母,为了生存,为了未来,现在我还没有任何的资格想这个问题,时间不对,而现在最最应该想的是——我要怎样成为一个顶级的编程师。当我终于有能力的时候,才是考虑无不无聊的问题,我还是明白这一点点。 经过多番的努力和辛酸,我成功地完成了这次过程艰辛的实训,而且我从中体会到了一种叫做‘成功的喜悦’的感觉,那种小有成就的兴奋是只有置身其中的人才能体会的,就好比我啊,虽然知道笑到最后的才是老大,但是偶尔阿Q一下来调节生活乐趣也是的一项很必要的事情吧。 总之,这次实训为我提供了与众不同的学习方法和学习体会,从书本中走出来,面对现实,为我将来走上社会打下了扎实的基础,铺了一条五光十色的大马路。而且,我也体会到了前人总结出的许多的实践经验,而且一直都知道技术永远是工资的基础,社会是不会要一个一无是处的人的,所以,为了生活庸俗一点,努力一点,多累一点,好好学习技术,将来才有吃大餐的钱呀。 因此,我知道,作为在校电商专业的大专生,我能做的就是好好的吸取知识,努力的提高自己的技术水平和自身的综合素质,提高自己的表达能力、写作能力和合作能力。如此,出了社会,自己有了能力,到时候才会是“吃嘛嘛香”,并且很牛逼的是自己选公司,而不是悲惨的等待公司来选。我相信在不久的未来,会有属于我自己的一片天空,而且这片天空会很蓝很蓝,没有黑黑的乌云,只有灿烂的阳光!

我的数据库原理及应用学习笔记

数据库原理及开发应用 (总结的知识储备) 1.数据库就是储存数据的仓库,专业的解释就是对数据存储和管理的软件 和数据本身统称为数据库。 2.大型数据库有Oracle,Sql sever属于中型数据库,小的太多忽略不计, 要知道就上网查。 3.数据库管理系统的主要功能:数据库定义功能;数据存取功能;数据库 运行管理;数据库的建立和维护功能。 4.数据库的三级模式构:外模式、模式和内模式。(外模式即是用户模式 可以多个,模式只能一个,内模式就是储存模式)。 5.DDL: 数据库模式定义语言DDL(Data Definition Language)。 6.DML:数据操作语言(datamanipulationlanguage)。 7.DBMS: 数据库管理系统(Database Management System)。 8.DBS:数据库系统(Database System)。 9.DBA:数据库管理员(Database Administrator)。 从三方面学习数据库 1.数据库是如何储存数据的(主键,外键,唯一键) 2.数据库是如何操作数据的(insert update delete) 3.数据库是如何显示数据的(select重点)

操作及代码 1.Crate table 语句:create table student(stu_name nvarchar(30) not null,stu_numb int not null,stu_sex nchar(1) not null); 2.主键外键:stu_numb int primary key;(可以在int 和primary 中间加上constraint 约束名称)。 sch_add nvarchar(30) foreign key references student (stu_numb); 顺带回忆一下主键和外键的定义: 主键:能够唯一标示一个事物的的字段或者多个字段的组合,叫主键。(含有主键的表叫做主键表,主键一般是整数不建议用字符串,而且一般用代理主键不要用业务主键,也就是说不要用有业务的字段作为主键,一般就用没有含义的编号当做主键。)外键:如果一个表中的若干个字段来自若干个表的主键或者唯一键,就称这若干个字段为外键。(含有外键的表叫做外键表,通常都来自主键,因为唯一键可能为null,而且外键不一定来自别的表可能就来自本表)。自认为总结的超好。 哦哦,还有删除表的时候先删外键表,不然先删主键会报错,原因很简单,外键引用错误。 没完, 主键约束:不允许重复元素,避免了数据的冗余。

数据库系统原理实践考核指导

《数据库系统原理》实践环节考核指导 (2008年9月修订) 1、类型 课程实验考核 2、目的与要求 本课程是一门理论与实际紧密结合、实践性强的课程。通过上机实践,帮助学生加深对课程的理解,更好地掌握数据库技术,并达到应用的目的,进而培养他们全面掌握所学知识,在实践中培养独立分析和解决问题的能力。 本课程的主要考核目标是检查学生利用SQL语言解决问题的能力,强调测试学生利用SQL 语句完成基本的数据定义和数据操作的技能,检查学生设计和运用SQL语言解决实际问题的能力。 3、考核环境 ●操作系统:Windows2000 ●数据库管理系统:SQL Server 2000中文版 4、考核内容 ●SQL Server 2000的企业管理器、查询设计器; ●其他类型数据库的导入与导出(主要是Access类型数据库); ●数据库的创建和修改; ●基本表的创建和修改(要求使用SQL语句完成); ●基本表中数据的管理(要求使用SQL语句完成):INSERT命令、UPDATE命令、DELETE命令; ●数据的检索(要求使用SQL语句完成):单表查询、连接查询、计算查询、分组查询等; ●索引、存储过程和视图的创建(要求使用SQL语句完成); ●创建登陆标识并设置操作数据库权限; ●ODBC的概念与配置。 5、考核时间 考试时间为60分钟。 6、考核形式和方法

采用闭卷机考形式,考生首先登录考试服务器,阅读考试要求,在考试文件夹D:\2008ks下完成指定的开发要求,所有答案都直接做在文件夹d:\2008ks内,最后根据考试要求把答案文件上传到考核服务器上考生自己的文件柜中(上传的答案文件不要压缩打包)。 请认真阅读“考试系统”使用说明。 7、注意事项 1.遵守考场纪律,因计算机引起的问题请及时与监考老师联系;有些操作步骤或操作贴图文件需要以Word形式保存,请按照要求保存文件名。 2.考生不要等到最后才上传答案文件,以免因最后时刻交卷人员太多造成服务器响应速度低;上传文件前务必关闭相应的软件。例如上传Word文档前应关闭Word系统。上传数据库文件前必须停止SQL Server服务管理器。 3.如果发现无法登录系统,请及时与监考老师联系,由监考老师协助处理。 4.本系统采取了一定安全性措施,系统自动记录考生的登录时间和登录微机(登录时间取自服务器)。一旦发现同一时间段内有两台微机同时以某个考号登录系统,将按作弊处理。一旦发现某台微机在考试期间用两个准考证号登录过考试系统。也按照作弊处理。 5.考试完毕,主动删除D盘上的相关文件夹。 6.注意保护自己的二次登录密码,不要被其他考生知道。 7.考生在考试前如果使用了模拟环境,请于考试开始前关闭所有浏览器窗口,然后重新登录考试服务器。 8、参考样题 请从考核服务器中下载考试用的文件到本地磁盘D:\2008ks下,然后在本地磁盘上用SQL Server 2000完成任务,最后把正确的结果文件上传到服务器上自己的考试文件柜中。 考试结束前本考卷需要上传的文件至少有:数据库对应的数据文件和日志文件、ans.doc。为保证文件的完整性,开始压缩文件前请退出企业管理器和查询设计器,关闭Word文档,停止SQL Server的服务管理器。然后逐个文件上传到自己的考试文件柜中。 下载:请以鼠标右单击“下载”,然后在弹出的快捷菜单中选择“目标另存为”,把文件保存到本地的D:\2008ks下。 样题一 一、创建数据库与数据表(40分) 1.请从考核服务器上下载Access数据库文件stud.mdb; 2.使用服务管理器在本地机器上启动SQL Server服务,接着启动企业管理器;然后创建一个大小为1MB的数据库student,事务日志的大小为1MB。注意数据文件和事务日志文件都保存在D:\2008ks下。 3.把Access数据库文件stud.mdb导入到数据库student中; 4.设置学生表的主键学号、课程表的主键课程号; 5.请用SQL语句在student数据库中创建表“家庭”。表结构如下所示: 家庭表,结构为:学号(C4),姓名(C8),父姓名(C8),父单位(C10),母姓名(C8),母单位(C10);学号为主键。

数据库提高型实验报告(嵌入式SQL数据库访问)

黄冈师范学院 提高型实验报告 实验课题嵌入式SQL访问数据库(实验类型:□综合性■设计性□应用性) 实验课程数据库系统概论 实验时间2012年5月25日 学生姓名邵旭东 专业班级信息1001班 学号201021240106

一、实验目的和要求 1. 编写嵌入式C程序,编程实现了对“学生课程数据库”的访问和对 Student表中年龄进行更新。 2. 安装SQL Server2000和Visual C++程序。 3、将一段连续的SQL操作写成嵌入到C程序中的程序,调试程序, 使得程序能完成一项复杂的数据处理功能,并提交程序。 二、实验条件 R429三星笔记本电脑一台。 三、实验原理分析

四、实验方案或步骤 1.初始化编译环境 将SQL安装光盘内的DEVTOOLS文件夹复制到SQL的安装目录下(!!默认下为C:\Program Files\Microsoft SQL Server\),执行.\DEVTOOLS\SAMPLES\ESQLC\目录中的UNZIP_ESQLC.EXE文件(!!点击finish,默认解压到当前目录下!!),解压预编译必要的头文件和库文件,然后运行解压出来的批处理文件setenv.bat初始化SQL预编译环境(这项操作实际上设置两个环境变量)。 接下来添加SQL预编译接口,将安装光盘中X86\BINN中的nsqlprep.exe,sqlaiw32.dll,sqlakw.32.dll复制到SQL安装目录(!!默认下为C:\Program Files\Microsoft SQL Server\)中的\MSSQL\Binn\(注:\MSSQL\Binn\改为:\MSSQL\Binn;)目录下,并将C:\Program Files\Microsoft SQL Server\MSSQL\Binn添加到环境变量中(方法是:右击我的电脑,点击我的电脑属性,点击高级,点击环境变量,点击path ,粘贴在‘;’号后)。 SQL设置完了,现在开始设置VC编译环境。进入VC安装目录(默认为C:\Program Files\Microsoft Visual Studio\),运行VC98\Bin目录中的批处理文件VCVARS32.BAT。 运行VC,添加二次编译ESQL程序的头文件和库文件: (1).工具->选项->目录->在Include files中添加SQL安装目录\devtools\include\ (默认为: C:\Program Files\Microsoft SQL Server\devtools\include)将SQL server自带的用于数据库开发的头文件包含到工程环境中。 (2).工具->选项->目录->在Lib files中添加SQL安装目录\devtools\x861ib\(默认为: C:\Program Files\Microsoft SQL Server\devtools\x86lib)将开发用到的包包含到工程中。 2.ESQL程序代码的编写与调试 #include #include EXEC SQL BEGIN DECLARE SECTION; char deptname[20];

数据库课程学习的收获和心得体会

数据库课程学习的收获和心得体会 在大二的下学期刚学了数据库这门课,对这门课的第一印象是书本蛮厚的,感觉学起来应该会很难很累。在学习这门课的过程中,在对数据库的了解过程中,慢慢对数据库有了感观。数据库这一词并不是很难想象,并不是像外人看来很神奇。作为计算机专业的学生,这样的专业术语或者专业知识是最基本的。 学习的时候没有想象中的那么难,只要上课能听懂就基本还可以。但是问题还是出在书本有点厚,有的时候上课的内容都要找很久才能找到,甚至有的时候老师讲的知识书本上是找不到的,是另外补充而且是相当重要的内容。有的时候开小差,没有听到老师讲的知识点,这就导致了以后的学习无法顺利进行,使得学习起来十分困难。所以在数据库这门课的学习中,上课一定要听牢,就像老师说的那样,这样的专业课如果想凭考试前几天突击是行不通的,必须是日积月累的知识才能取得好成绩。 通过对数据库的学习,我也明白了各行各业都离不开数据库,就算是一个小型的超市也离不开它。可见数据库这门课的广泛性,如果能够认真学好它将来必有成就。我就是抱着这种信念去学习数据库的。第一次接触数据库,第一次接触SQL语言,虽然陌生,但是可以让我从头开始学,就算没有基础的人也可以学得很好。刚开始练习SQL语言的时候,并不是很难,基本上都是按照老师的步骤来做,还很有成就感。后来学了单表查询和连接查询后,就慢慢发现越学越困难了,每个题目都要思考很久,并且每个题目基本上不止一个答案,所以必须找出最优的答案。后面的删除、插入、修改这些题目都变化蛮大的,书本上的例题根本无法满足我们,好在老师给我们提供了大量的课件,通过这些PPT,我们可以巩固课内的知识,还可以学习内容相关的知识,更好地完成老师布置的作业。 除了老师布置的一些基本作业外,还有一份大作业。就像我们小组的是杂货店的销售管理系统,在完成这一作业的过程中,我们可以通过网络实现一家杂货店。过程是很复杂的,杂货店需要员工,还有百来种商品,不仅需要大量的数据,还要完成需求说明,数据词典,还有E-R图等,虽然想象起来并不是很难,但是要转化成文字,转化成人们能够读懂的文字就显得十分困难。特别是一个完整的销售系统,对我们来说都是第一次接触,在做大作业的时候经常是前面改改,后面改改,因为一些数据不能很好地对应起来,经常会遗忘一些,所以出现了这样的情况。一个完整的数据库系统也就是在这样修修改改的状态下完成的,也给了我很大的反思。第一、一个数据库的完成一定要考虑各方面的因素,包括现实因素。第二、在完成这类作业时,修修改改是很正常的,不要因此而厌倦。第三、一个完整的数据库一定不能出现错误,否则会在现实生活中带来不必要的麻烦。 通过本学期数据库的学习及大作业的完成,很有去作项目的冲动,但深知自己的能力水平有限,还需要更多的学习。 吴曼菱 18:20:41 本学期开设的《数据库系统及应用》课程已经告一段落,现就其知识点及其掌握情况以及对该门课程的教学建议等方面进行学习总结。 一、数据库主要知识点 我们首先从第一章绪论了解了数据库的概念,其中有几个较为重要的知识点,即数据库系统

数据库系统原理及应用实验全套

数据库系统原理及应用实验指导书 (本科) 福建工程学院计算机与信息科学系计算机软件与理论教研室 浅诺制作 2012年5月

目录 实验一数据定义语言 (1) 实验二 SQL Sever中的单表查询 (5) 实验三 SQL Serve中的连接查询 (8) 实验四 SQL Serve的数据更新、视图 (12) 实验五数据控制(完整性与安全性) (17) 实验六语法元素与流程控制 (22) 实验七存储过程与用户自定义函数 (28) 实验八触发器 (34)

实验一数据定义语言 一、实验目的 1.熟悉SQL Server2000/2005查询分析器。 2.掌握SQL语言的DDL语言,在SQL Server2000/2005环境下采用Transact-SQL实现表 的定义、删除与修改,掌握索引的建立与删除方法。 3.掌握SQL Server2000/2005实现完整性的六种约束。 二、实验内容 1.启动SQL Server2000/2005查询分析器,并连接服务器。 2.创建数据库: (请先在D盘下创建DB文件夹) 1)在SQL Server2000中建立一个StuDB数据库: 有一个数据文件:逻辑名为StuData,文件名为“d:\db\”,文件初始大小为5MB,文件的最大大小不受限制,文件的增长率为2MB; 有一个日志文件,逻辑名为StuLog,文件名为“d:\db\”,文件初始大小为5MB,文件的最大大小为10MB,文件的增长率为10%

2)刷新管理器查看是否创建成功,右击StuDB查看它的属性。 3.设置StuDB为当前数据库。 4.在StuDB数据库中作如下操作: 设有如下关系表S: S(CLASS,SNO, NAME, SEX, AGE), 其中:CLASS为班号,char(5) ;SNO为座号,char(2);NAME为姓名,char(10),设姓名的取值唯一;SEX为性别,char(2) ;AGE为年龄,int,表中主码为班号+座号。 写出实现下列功能的SQL语句。 (1)创建表S; (2)刷新管理器查看表是否创建成功; (3)右击表S插入3个记录:95031班25号李明,男性,21岁; 95101班10号王丽,女性,20岁; 95031班座号为30,名为郑和的学生记录;

相关主题
文本预览
相关文档 最新文档