数据库笔记
- 格式:doc
- 大小:86.50 KB
- 文档页数:10
数据库技术总结数据(Data):是数据库中存储的基本对象数据的定义:描述事物的符号记录数据的种类:文字、图形、图象、声音等数据的特点:数据与其语义是不可分的数据库(Database,简称DB):是长期储存在计算机内、有组织的、可共享的大量数据集合数据库的特征:⏹数据按一定的数据模型组织、描述和储存⏹可为各种用户共享⏹冗余度较小⏹数据独立性较高⏹易扩展数据库管理系统(Database Management System,简称DBMS):是位于用户与操作系统之间的一层数据管理软件。
DBMS的用途:科学地组织和存储数据、高效地获取和维护数据DBMS的主要功能:数据库的运行管理保证数据的安全性、完整性、多用户对数据的并发使用发生故障后的系统恢复⏹数据库的建立和维护功能(实用程序)数据库数据批量装载数据库转储介质故障恢复数据库的重组织性能监视等数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。
⏹数据库系统的构成⏹由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员(和用户)构成。
⏹数据管理⏹对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。
⏹数据模型应满足三方面要求⏹能比较真实地模拟现实世界⏹容易为人所理解⏹便于在计算机上实现⏹数据模型分成两个不同的层次(1) 概念模型也称信息模型,它是按用户的观点来对数据和信息建模。
(2) 数据模型主要包括网状模型、层次模型、关系模型等,它是按计算机系统的观点对数据建模。
⏹客观对象的抽象过程---两步抽象⏹现实世界中的客观对象抽象为概念模型;⏹把概念模型转换为某一DBMS支持的数据模型。
⏹数据结构⏹对象类型的集合数据结构是对系统静态特性的描述⏹两类对象⏹与数据类型、内容、性质有关的对象⏹与数据之间联系有关的对象⏹数据操作⏹对数据库中各种对象(型)的实例(值)允许执行的操作及有关的操作规则⏹数据操作的类型⏹检索⏹更新(包括插入、删除、修改)⏹数据模型对操作的定义⏹操作的确切含义⏹操作符号⏹操作规则(如优先级)⏹实现操作的语言⏹数据操作是对系统动态特性的描述。
一. informix数据库基础管理类常用命令一、常用命令oninit 将系统从off-line模式变为on-line模式oninit -iy (初始化数据库,删除所有dbspace和chunk)oninit -s (脱机-->静态)onmode -ky offlineonmode -s graceful shutdown-->quiescent(联机到静态,让用户处理完成)onmode -u immediate shutdown-->quiescent(联机到静态,所有用户立即终止)onmode -m quiescent--->onlineonmode -z sid 删除某sessiononmode -l 将当前正在使用的逻辑日志下移onmode -c 强制执行检查点操作即onmonitor->force ckpt其中的oninit onmode一般情况下只有dbsa权限才可以执行,oninit权限限制级别更高onstat - 查看服务器状态onstat -d 查看dbspace和chunk情况onstat -l 查看逻辑日志onstat -F 查看写入磁盘的页刷新和类型情况,从共享内存缓冲区向磁盘写入页面有三种方式(fg:前台写LRU:队列写chunk:块写)onstat -R 打印LRU队列onstat -p 显示系统的基本I/O与性能配置文件onstat -c 查看onconfig文件onstat -m 查看消息日志onstat -f 查看受DATASKIP影响的dbspaceonstat -x 查看事务onstat -k 显示所有活动的锁onstat -g sub_option 运行多线索选项onstat -g ses/sqlonstat -r <value> 每隔<value>秒后重复选项onstat -g act 显示系统中所有的活动线索onstat -g ath -r 2 每隔两秒显示系统中所有的活动的线索onstat -i 交互方式>sql>sql sid关于onstat命令的更多用法,可以在系统中运行onstat -help查看ipcs 查看共享内存情况ipcrm 删除某个共享内存ipcrm -m idipcrm -s idOntape命令:1)零级(一级或二级)备份$>ontape -s$>ontape -s -L 0$>ontape -s -L 1$>ontape -s -L 2自动备份逻辑日志文件$>ontape -a3)连续逻辑日志备份(日志文件写满一个,online系统自动备份一个,你可以插盘磁带到磁带机上,让IDS自动备份。
系统工程师笔记1. 指令寄存器(IR ):用来保存当前正在执行的一条指令。
当执行一条指令时,先把它从内存取到数据寄存器(DR)中,然后再传送至IR。
指令划分为操作码和地址码字段,由二进制数字组成。
为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。
指令译码器就是做这项工作的。
指令寄存器中操作码字段的输出就是指令译码器的输入。
操作码一经译码后,即可向操作控制器发出具体操作的特定信号。
2. .程序计数器(PC):为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。
而程序计数器正是起到这种作用,所以通常又称为指令计数器。
在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第一条指令的地址。
当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。
由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的地址,以此实现转移。
有些机器中也称PC为指令指针IP(Instruction Pointer)3. 计算机的工作原理:取指令、分析指令并取操作数、执行指令。
PC保存要执行指令的地址,当要访问内存时,需将内存的地址送入存储器地址寄存器(MAR)中,向内存写入数据时,待写入的数据要先放入数据寄存器(MDR)中,程序中的指令一般在内存中,要执行时,首先要访问内存取得指令并保存在指令寄存器(IR)中。
即CPU首先要将指令的地址送入程序计数器(PC)中。
4. 软件系统测试侧路和测试方法---------------------------------------P5355. 软件进度管理(Gantt图和PERT图)----------------------------P499a) PERT关键路径——持续时间最长6. 补码1)正数的补码与原码相同,负数的补码等于原码按位取反末位加一。
第一章数据库基础知识1、数据库管理系统:DBMS;数据库应用系统:DBAS;数据库系统:DBS;数据:DBDBS包括DBMS,DBAS,DB2、实体间的联系:一对一,一对多,多对多。
3、数据库中的数据模型:网状模型,层次模型,关系模型。
4、关系:一个关系就是一个二维表,每一个关系有一个关系名。
5、元组:二维表中的行称为元组。
6、属性:二维表中的列称为属性。
7、域:属性的取值范围。
8、关系→表;关系名→表名;属性→字段;元组→记录;行→记录,元组;列→字段,属性。
9、传统的集合运算:并,差,交。
10、专门的关系运算:选择(水平方向) for,while,where投影(垂直方向) fields,select联接(一对一,一对多,多对多)11、定义数组:dime/declare 数组名(3,4)第二章 VF基础知识1、创建项目:①通过菜单创建②命令:creat project项目名2、打开项目管理器:①通过“文件→打开”菜单项②命令:modify project 项目名3、各类文件选项卡:①数据选项卡(数据库,自由表,查询,视图)②文档选项卡(表单,报表,标签)③类④代码⑤其他第三章数据与数据运算1、字段数据类型(11种)* N包括Y,F,B,I2、变量:在程序运行过程中,其值可能发生变化的量。
3、变量的分类:字段变量,内存变量,数组变量,系统变量,对象变量。
4、常用的函数①、数值型函数1.绝对值函数【函数格式】 ?abs(<数值表达式> )【函数功能】返回指定“数值表达式”的绝对值【返回值类型】数值型eg:?abs(-1) 12.平方根函数【函数格式】 ?sqrt(<数值表达式>)【函数功能】返回指定“数值表达式”值的平方根。
“数值表达式”的值必须是大于或等于零【返回值类型】数值型eg:?sqrt(25) 5?sqrt(81) 9?sqrt(7^2-4*2*4) 4.123.取整函数【函数格式】 ?int(<数值表达式>)【函数功能】返回指定“数值表达式”整数部分的值【返回值类型】数值型eg:?int(6489.658) 6489?int(123.58) 1234.四舍五入函数【函数格式】 ?round(<数值表达式1>,<数值表达式2>)【函数功能】对指定的<数值表达式1>进行四舍五入运算【使用说明】 <数值表达式2>指定四舍五入运算精确的位数。
Oracle数据库学习笔记Oracle数据库基础 orcale属于关系型数据库,适⽤于各类⼤,中,⼩,微机环境,是⼀种⾼效率、可靠性好的、适应⾼吞吐量的数据库⽅案。
学习,实验完全免费,商⽤需要⽀付相应费⽤。
Oracle 数据库包括数据库实例,和数据库,⼆者脱离谁都没有存在的价值。
实例是⽤来操作数据库的对象,数据库是⽤来存储数据使⽤的。
Oracle主要组件包含实例组件,数据库组件。
SGA(System Global Area)是Oracle Instance的基本组成部分,PGA(Process Global Area)是为每个连接到Oracle database的⽤户进程保留的内存。
每个实例只有⼀个SGA,所有的进程都能访SGA。
PGA是程序全局区,每个⼀个进程都⼀个PGA,PGA是私有的,只有对应进程才能访问对应的PGA。
数据库中包含:参数⽂件,⼝令⽂件,数据库⽂件,控制⽂件,⽇志⽂件以及归档⽇志⽂件。
Oracle实例进场包含⽤户进程,服务器进程和后台进程。
SGA:系统全局区 系统全局区包含共享池,数据缓冲区,⽇志缓冲区。
“共享池”:是对SQL,PL/SQL程序进⾏语法分析,编译,执⾏的内存区;由库缓存和数据字典缓存组成;其⼤⼩直接影响数据库性能。
“数据缓冲区”:临时存储从数据库读⼊的数据,所有⽤户共享,数据缓存区的⽬的是加快数据读写。
“⽇志缓冲区”:⽇志记录数据库所有修改信息,其先产⽣于⽇志缓冲区,当达到⼀定数量时,由后台进程将⽇志数据写到⽇志⽂件中。
PGA:程序全局区 PGA包含单个服务器进程所需要的数据和控制信息,在⽤户进程连接到数据库并创建⼀个会话时⾃动分配的,保存每个与数据库连接的⽤户进程所需要的信息。
PGA为⾮共享区,只能单个进程使⽤,当⼀个⽤户会话结束,PGA释放。
后台进程 后台进程中包含PMON(进程监视器(Process Monitor)),SMON(系统监视器(System Monitor)),DBWR(数据库书写器(Database Write)),LGWR(⽇志书写器(Log Write)),CKPT(检查点(Checkpoint)),以及其他。
MySQL数据库学习笔记数据库 DDL: 数据定义语⾔, 包含数据库和表相关的操作(MySQL中保存数据需要先建库再建表,最后把数据保存到表中) DML: 数据操作语⾔, 包含增删改查相关的SQL DQL: 数据查询语⾔, 只包含查询相关的SQL TCL: 事务控制语⾔, 包括和事务相关的SQL DCL: 数据控制语⾔, 包括⽤户管理及权限分配相关的SQLDDL数据定义语⾔ 数据库相关SQL 1. 查询所有数据库 show databases; 2. 创建数据库 格式: create database 数据库名; 指定字符集格式: create database 数据库名 character set utf8/gbk; 举例: create database db1; create database db2 character set utf8; create database db3 character set gbk; show databases; 3. 查询数据库详情 格式: show create database 数据库名; 举例: show create database db1; show create database db2; show create database db3; 4. 删除数据库 格式: drop database 数据库名; drop database db3; 5. 使⽤数据库必须使⽤了某个数据库之后才能执⾏表和数据相关的SQL 格式: use 数据库名; use db1; 表相关SQL 操作表相关的SQL 必须使⽤了某个数据库之后再操作use db1; 1. 创建表 格式: create table 表名(字段1名类型,字段2名类型); 指定字符集格式: create table 表名(字段1名类型,字段2名类型) charset=utf8/gbk; 举例: create table person (name varchar(20),age int); create table student(name varchar(20),score int) charset=utf8; create table car(name varchar(20),price int) charset=gbk; 2. 查询所有表 格式: show tables; 3. 查询表详情 格式: show create table 表名 举例: show create table person; 4. 查看表字段 格式: desc 表名; 举例: desc student; 5. 删除表 格式: drop table 表名 举例: drop table car; 表相关SQL(续) use db1; 1. 修改表名格式: rename table 原名 to 新名; rename table student to stu; 2. 添加表字段 最后添加格式: alter table 表名 add 字段名类型; 最前⾯添加个格式: alter table 表名 add 字段名类型 fifirst; xxx字段后⾯添加格式: alter table 表名 add 字段名类型 after xxx; 举例: alter table person add gender varchar(5); //最后⾯ alter table person add id int fifirst; //最前⾯ alter table person add salary int after name;//name后⾯ 3. 删除表字段 格式: alter table 表名 drop 字段名; alter table person drop salary; 4. 修改表字段 格式: alter table 表名 change 原名新名新类型; alter table person change gender salary int;DML数据操作语⾔(数据相关SQL语句) 1. 插⼊数据 全表插⼊格式: insert into 表名 values(值1,值2); 值的数量和表字段⼀致 批量插⼊格式: insert into 表名 values(值1,值2),(值1,值2),(值1,值2); 举例: insert into person values("Tom",18); //全表插⼊ insert into person(name) values("Jerry"); //指定字段插⼊ insert into person values("AAA",10),("BBB",20), ("CCC",30); 中⽂问题: insert into person values("刘德华",30); 如果执⾏上⾯包含中⽂的SQL 报以下错误执⾏ set names gbk; 2. 查询数据 格式: select 字段信息 from 表名 where 条件; 举例: select name from person; //查询表中所有的名字 select name,age from person; //查询表中所有名字和年龄 select * from person; //查询表中所有数据的所有字段信息 select * from person where age>20; //查询年龄⼤于20岁的信息 select * from person where name='Tom'; //查询Tom的信息 3. 修改数据 格式: update 表名 set xxx=xxx,xxx=xxx where 条件; 举例: update person set age=8 where name='Jerry'; update person set name="张学友",age=50 where name="刘德华"; update person set age=15 where age<20; 4. 删除数据 格式: delete from 表名 where 条件; 举例: delete from person where name='Tom'; delete from person where age<20; delete from person; 约束* 概念:对表中的数据进⾏限定,保证数据的正确性、有效性和完整性。
数据库笔记3(转载动⼒节点⽼杜)MySQL day031、约束1.1、唯⼀性约束(unique)* 唯⼀约束修饰的字段具有唯⼀性,不能重复。
但可以为NULL。
* 案例:给某⼀列添加uniquedrop table if exists t_user;create table t_user(id int,username varchar(255) unique // 列级约束);insert into t_user values(1,'zhangsan');insert into t_user values(2,'zhangsan');ERROR 1062 (23000): Duplicate entry 'zhangsan' for key 'username'insert into t_user(id) values(2);insert into t_user(id) values(3);insert into t_user(id) values(4);* 案例:给两个列或者多个列添加uniquedrop table if exists t_user;create table t_user(id int,usercode varchar(255),username varchar(255),unique(usercode,username) // 多个字段联合起来添加1个约束unique 【表级约束】);insert into t_user values(1,'111','zs');insert into t_user values(2,'111','ls');insert into t_user values(3,'222','zs');select * from t_user;insert into t_user values(4,'111','zs');ERROR 1062 (23000): Duplicate entry '111-zs' for key 'usercode'drop table if exists t_user;create table t_user(id int,usercode varchar(255) unique,username varchar(255) unique);insert into t_user values(1,'111','zs');insert into t_user values(2,'111','ls');ERROR 1062 (23000): Duplicate entry '111' for key 'usercode'* 注意:not null约束只有列级约束。
数据库原理笔记数据库概念数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的⼤量数据的集合。
1. 数据库系统的特点数据结构化数据的共享性⾼,冗余度低,易扩充数据独⽴性⾼数据由DBMS统⼀管理和控制1. 两⼤类数据模型概念模型也称信息模型,它是按⽤户的观点来对数据和信息建模,⽤于数据库设计。
逻辑模型和物理模型,逻辑模型主要包括⽹状模型、层次模型、关系模型、⾯向对象模型等,按计算机系统的观点对数据建模,⽤于DBMS实现。
物理模型是对数据最底层的抽象,描述数据在系统内部的表⽰⽅式和存取⽅法,在磁盘或磁带上的存储⽅式和存取⽅法。
1. 关系数据库关系数据库系统采⽤关系模型作为数据的组织⽅式,在⽤户观点下,关系模型中数据的逻辑结构是⼀张⼆维表,它由⾏和列组成。
关系的每⼀个分量必须是⼀个不可分的数据项, 不允许表中还有表。
1. 数据库系统的三级模式结构模式(Schema)外模式(External Schema)内模式(Internal Schema)1. 关系模式关系模式可以形式化地表⽰为:R(U,D,DOM,F)R 关系名U 组成该关系的属性名集合D 属性组U中属性所来⾃的域DOM 属性向域的映象集合F 属性间的数据依赖关系集合1. 实体完整性规则(Entity Integrity)若属性A是基本关系R的主属性,则属性A不能取空值;关系模型中以主码作为唯⼀性标识。
1. 参照完整性规则若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不⼀定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值)或者等于S中某个元组的主码值1. 关系代数运算符关系数据库标准语⾔SQLSQL(Structured Query Language)结构化查询语⾔,是关系数据库的标准语⾔。
集数据定义语⾔(DDL),数据操纵语⾔(DML),数据控制语⾔(DCL)功能于⼀体。
Orical:select *列名需要用"":1)区分大小写2)别名中有空格3)别名中有特殊字符||:连接运算select '姓名是‘||enam||'薪水是:’||sal fromemp表--:表注释distinctdesc emp;查看表结构set heading off;//隐藏表头条件--where 字句<>不等于were条件:字符串和日期类型必须用单引号日期格式:日-x月-年select * from emp where hirdate>'01-1月-1982';//必须用单引号引起来--查询SELECT * FROM emp;SELECT empno "Emp_no",ename ENAME,sal,400+sal*12 AS "Annual Salary",job,comm+400 提成FROM emp;SELECT 12/NULL FROM dual;SELECT '姓名是'||ename||'薪水是'||sal||'提成是'||comm 雇员信息FROM emp;SELECT DISTINCT job FROM emp;--where子句SELECT * FROM emp WHERE sal>=3000;SELECT * FROM emp WHERE sal=3000;SELECT * FROM emp WHERE sal<>3000;SELECT * FROM emp WHERE hiredate>'01-JAN-1982';SELECT * FROM emp WHERE ename='SCOTT';ALTER SESSION SET NLS_LANGUAGE='AMERICAN';SELECT * FROM EMP WHERE sal BETWEEN 3000 AND 5000;SELECT * FROM emp WHERE sal>=3000 AND sal<=5000;SELECT * FROM emp WHERE deptno IN (20,30);--like %:任意多的字符_:任意一个字符SELECT * FROM emp WHERE ename LIKE '%A%';SELECT * FROM emp WHERE ename LIKE '_A%';SELECT * FROM emp WHERE ename LIKE '%\_%' ESCAPE '\';--ESCAPE 标识符来查找带特殊符号的字符号。
--创建数据库IF DB_ID(N'TEST')IS NOT NULLDROP DATABASE TESTGOCREATE DATABASE TESTON(NAME='TE',--逻辑文件名FILENAME='E:\TEST.MDF'--存储路径和数据文件名)GO--修改数据库ALTER DATABASE TESTMODIFY FILE(NAME=’TE’,SIZE=10)GO数据库表操作--创建表STUDENT:IF OBJECT_ID(N'STUDENT')IS NOT NULLDROP TABLE STUDENTGOCREATE TABLE STUDENT(S_ID INT IDENTITY(1,1)PRIMARY KEY,S_NAME NVARCHAR(20)NOT NULL,SEX CHAR(2)CHECK(SEX='男'or SEX='女'),AGE INT CHECK(AGE>0 AND AGE<150),ADDRESS NVARCHAR(100)NOT NULL)GO--创建表GRADE:IF OBJECT_ID(N'GRADE')IS NOT NULLDROP TABLE GRADEGOCREATE TABLE GRADE(S_ID INT NOT NULL,--FOREIGN KEY REFERENCES STUDENT(S_ID), COUSENAME VARCHAR(60)NOT NULL,SCORE DECIMAL(4,1),--PRIMARY KEY(S_ID,COUSENAME))GO--修改表:ALTER TABLE GRADEADD CONSTRAINT PK_GRADE PRIMARY KEY(S_ID,COUSENAME)GOALTER TABLE STUDENTADD CONSTRAINT DF_STUDENT DEFAULT('成都市一环路')FOR ADDRESSGOALTER TABLE GRADEADD CONSTRAINT FK_STUDENT_GRADEFOREIGN KEY(S_ID)REFERENCES STUDENT(S_ID)--创建外键GO--数据插入(先向主表录入,再向从表录入)不需要给标识列赋值:INSERT STUDENT VALUES('小罗','男',22,'美国')INSERT STUDENT VALUES('张飞','男',25,'河北')INSERT STUDENT VALUES('关羽','男',22,'河南')INSERT STUDENT VALUES('貂蝉','女',22,'成都')INSERT STUDENT(S_NAME)VALUES('张二')--插入一部分值INSERT STUDENT VALUES('大雕','女',22,DEFAULT)--插入默认值INSERT STUDENT DEFAULT VALUES--全部使用默认值GO--给标识列赋值时:SET IDENTITY_INSERT STUDENT ONGOINSERT STUDENT(S_ID,S_NAME,SEX,AGE,ADDRESS)VALUES(11,'貂蝉','女',18,DEFAULT)GO--更新值:UPDATE STUDENT SET S_NAME='张尔'WHERE S_NAME='张二'GO--不加WHERE时,所有对应行都改变--更新多个字段的值:UPDATE STUDENT SET S_NAME='刘备',SEX='男'WHERE S_NAME='关羽'GO--删除数据--DELETE FROM STUDENT(删除表的全部数据,不是删除表)DELETE FROM STUDENT WHERE S_NAME='张尔'--使用TRUNCATE删除数据时,只能删除整张表的内容,且删除后不可恢复数据选择USE TESTGOSELECT*FROM STUDENTGOSELECT'姓名'=S_NAME,AGE '年龄',SEX AS'性别',ADDRESS FROM STUDENT WHERE SEX='男'OR AGE>=25GOSELECT姓名,AGE FROM STUDENT WHERE姓名='小罗'SELECT TOP 1 '姓名'=S_NAME,AGE '年龄',SEX AS'性别',ADDRESS FROM STUDENT ORDER BY AGE DESCGO--模糊查找:SELECT'姓名'=S_NAME,AGE '年龄',SEX AS'性别',ADDRESS FROM STUDENT WHERE S_NAME LIKE'张%'--WHERE S_NAME LIKE '张_'GOSELECT'姓名'=S_NAME,AGE '年龄',SEX AS'性别',ADDRESS FROM STUDENT WHERE S_NAME LIKE'%二%'GOSELECT'姓名'=S_NAME,AGE '年龄',SEX AS'性别',ADDRESS FROM STUDENT WHERE S_NAME LIKE'[张小]%'--WHERE S_NAME LIKE'[^张小]%'GO--使用函数--聚合函数:COUNT()SELECT COUNT(*)FROM STUDENTGO--CHARINDEX()SELECT CHARINDEX('@','496928707@')GO--SUBSTRING()SELECT SUBSTRING('496928707@',1,4)GO--GETDATE()SELECT GETDATE()GO--CAST();CONVERT()SELECT CAST(GETDATE()AS NVARCHAR(20))SELECTSUBSTRING('NIHAO',1,CHARINDEX('-',CONVERT(NVARCHAR(20),GETDATE(),105) ))GO--DATENAME() DATEPART()SELECT DATENAME(M,GETDATE())SELECT DATEPART(M,GETDATE())GOSELECT S_ID,'姓名'=S_NAME,AGE '年龄',SEX AS'性别',ADDRESS FROM STUDENT WHERE S_ID BETWEEN 3 AND 5写程序IF(SELECT AVG(SCORE)FROM GRADE)>60BEGINPRINT'成绩很理想'ENDWHILE(SELECT AVG(SCORE)FROM GRADE)>60BEGINPRINT'成绩很理想'UPDATE GRADE SET SCORE=SCORE-5ENDGO--变量赋值:DECLARE @A INT--声明变量--SET @A=3 --赋值SELECT @A=3 --赋值SELECT @A --读取GO--当从表中把信息附到某个变量时只能用SELECTDECLARE @ID INT,@SCORE DECIMAL(4,1)SELECT @SCORE=MAX(SCORE)FROM GRADE WHERE COUSENAME='HTML'SELECT @ID=S_ID FROM GRADE WHERE SCORE>@SCORE AND COUSENAME ='SQL' SELECT*FROM STUDENT WHERE S_ID=@IDGO--使用已定义好的全局变量:SELECT@@LANGUAGEGO创建用户、角色,并且分配权限EXEC SP_ADDLOGIN'zhuga','zgzh'--创建登录名Zhuga,密码zgzhEXEC SP_GRANTDBACCESS'Zhuga','T'--将登录名Zhuga映射成用户TGRANT SELECT ON T TO T--设置权限(第一个T是一张表,第二个是用户)EXEC SP_ADDROLE STUDENTEXEC SP_ADDROLEMEMBER STUDENT,T--创建角色,先写角色名,后写用户名GRANT DELETE ON T TO STUDENT--给角色分配角色(可以删除T表中的值)查询--内联接(两张表共有的结果)SELECT DISTINCT S_NAME,SEX,ADDRESS,SCOREFROM STUDENT S INNER JOIN GRADE G ON S.S_ID=G.S_IDWHERE SCORE IS NULLGO--左外联结(两表共有的结果加上左表除共有结果外其他的结果,即输出结果为--左表的全部内容)SELECT DISTINCT S_NAME,SEX,ADDRESSFROM STUDENT S LEFT OUTER JOIN GRADE G ON S.S_ID=G.S_IDGO--右外联结(与左外联结类似)SELECT DISTINCT S_NAME,SEX,ADDRESS,SCOREFROM STUDENT S RIGHT OUTER JOIN GRADE G ON S.S_ID=G.S_IDGO--查询成绩最高的人的信息--1.内联接方法SELECT TOP 1 S.S_ID,S_NAME,SEX,ADDRESS,SCOREFROM STUDENT S INNER JOIN GRADE G ON S.S_ID=G.S_IDORDER BY SCORE DESCGO--2.变量方法DECLARE @ID INTDECLARE @SCORE DECIMAL(4,1)SELECT @SCORE=MAX(SCORE)FROM GRADESELECT @ID=S_ID FROM GRADE WHERE SCORE=@SCORESELECT S.S_ID,S_NAME,SEX,ADDRESSFROM STUDENT SWHERE S_ID=@IDGO--子查询方式SELECT*FROM STUDENT WHERE S_ID=(SELECT TOP 1 S_ID FROM GRADE ORDER BY SCORE DESC)GODECLARE @SCORE DECIMAL(4,1)SELECT @SCORE=MAX(SCORE)FROM GRADESELECT*FROM STUDENT WHERE S_ID=(SELECT S_ID FROM GRADE WHERESCORE=@SCORE)GO--IN的用法SELECT*FROM STUDENT WHERE S_ID IN(SELECT S_ID FROM GRADE)SELECT*FROM STUDENT WHERE S_ID NOT IN(SELECT S_ID FROM GRADE)--用子查询实现分页SELECT TOP 3 *FROM STUDENT--第一页SELECT TOP 3 *FROM STUDENT WHERE S_ID NOT IN(SELECT TOP 3 S_ID FROM STUDENT)--第二页--以此类推--EXISTS实现子查询SELECT*FROM STUDENT WHERE EXISTS(SELECT*FROM GRADE WHEREGRADE.S_ID=STUDENT.S_ID)SELECT*FROM STUDENT WHERE NOT EXISTS(SELECT*FROM GRADE WHERE GRADE.S_ID=STUDENT.S_ID)GO--子查询实现在表中插入多行INSERT T SELECT*FROM STUDENTGO--将查询结果写入新表(但是约束不会随之进入)SELECT*INTO T1 FROM GRADEGO--CASE语句SELECT S_NAME AS'姓名',S.S_ID,SEX,ADDRESS,CASEWHEN SCORE IS NULL THEN'缺考'ELSE CAST(SCORE AS VARCHAR(10))END'成绩'FROM STUDENT S LEFT OUTER JOIN GRADE GON S.S_ID=G.S_IDGO--显示事务BEGIN TRAN--TRANSACTION(开始一个事务)DECLARE @NUM INTUPDATE BANK SET BALANCE=BALANCE-10000 WHERE C_NAME='曹操' SET @NUM=@@ERRORUPDATE BANK SET BALANCE=BALANCE+10000 WHERE C_NAME='关羽' SET @NUM=@NUM+@@ERRORIF(@NUM=0)COMMIT TRAN--提交ELSEROLLBACK TRAN--回滚GO--事务的简单写法BEGIN TRANSACTIONSET XACT_ABORT ON--设置自动回滚为开UPDATE BANK SET BALANCE=BALANCE-10000 WHERE C_NAME='曹操' UPDATE BANK SET BALANCE=BALANCE+10000 WHERE C_NAME='关羽' COMMIT TRANGO--事务的四个特性(acid):原子性,一致性,永久性,隔离性--事务的三种类型:显示事务,隐式事务,自动提交事务(默认)--事务的隔离级别--索引:.唯一性索引.聚集索引(逻辑顺序和物理顺序是一致的,一张表--中只有一个)--3.非聚集索引(一张表中可有多个)--创建索引CREATE INDEX TEST--TEST为索引名ON STUDENT(S_NAME DESC)GOSELECT*FROM STUDENT WITH(INDEX(TEST))--使用索引GO--创建索引的原则:.这一列经常用到.对某一列排序时,将其设为索引--3.数据量很大时--创建视图DROP VIEW TSGOCREATE VIEW TSWITH ENCRYPTION--加密ASSELECT*FROM STUDENT WHERE S_ID NOT IN(SELECT S_ID FROM GRADE) GOSELECT*FROM TSGOSELECT*FROM sys.sql_modules--系统表GO--存储过程(系统存储过程和用户自定义存储过程)(和函数相似)--存储过程用来实现单一的功能(可看成预编译语句的集合)(xp_或sp_开头)--主要讲解用户自定义存储过程:--CREATE PROCEDURE--(PROC):创建自定义存储过程--不带参数的存储过程:CREATE PROC PR_TESTASSELECT*FROM STUDENTGOEXEC PR_TEST--带参数的存储过程:IF OBJECT_ID(N'PR_TEST')IS NOT NULLDROP PROC PR_TESTGOCREATE PROC PR_TEST@NAME NVARCHAR(20),@ID INT OUTPUT--(输入参数@NAME和输出参数@ID) ASSELECT @ID=S_ID FROM STUDENT WHERE S_NAME=@NAMEGODECLARE @A INT--声明变量接受输出--EXEC PR_TEST '张飞',@A OUTPUT--两种执行方式EXECUTE PR_TEST @NAME='张飞',@ID=@A OUTPUTSELECT @AGO--执行字符串DECLARE @T_NAME NVARCHAR(20)DECLARE @SQL NVARCHAR(100)SET @T_NAME='STUDENT'SET @SQL='SELECT * FROM '+@T_NAMEEXEC(@SQL)GO--实现分页的存储过程DROP PROC PAGEGOCREATE PROC PAGE@C_PAGE TINYINT=1,@PAGECOUNT TINYINT=3,@TABLENAME NVARCHAR(20),@COLUMNAME NVARCHAR(20),@TOTAL INT OUTPUTASDECLARE @SQL NVARCHAR(1000)DECLARE @T INTSET @SQL=N'SELECT @C=COUNT(*)FROM '+@TABLENAMEEXEC SP_EXECUTESQL @SQL,N'@C INT OUTPUT',@T OUTPUTSET @TOTAL=(@T+@PAGECOUNT-1)/@PAGECOUNTSET @SQL=''IF @C_PAGE =1BEGINSET @SQL=N'SELECT TOP '+CAST(@PAGECOUNT AS NVARCHAR(6))+' * FROM'+@TABLENAMEENDELSEBEGINSET @SQL=N'SELECT TOP '+CAST(@PAGECOUNT AS NVARCHAR(5))SET @SQL=@SQL+N' * FROM '+@TABLENAME+' WHERE '+@COLUMNAME+' NOT IN (' SET@SQL=@SQL+N'SELECT TOP '+CAST((@C_PAGE-1)*@PAGECOUNT AS NVARCHAR(6)) SET @SQL=@SQL+@COLUMNAME+N' FROM '+@TABLENAMESET @SQL=@SQL+N')'PRINT @SQLENDEXEC(@SQL)GODECLARE @C INTEXEC PAGE 2,4,'STUDENT','S_ID',@C OUTPUTSELECT @C--如何产生自定义错误raiserror('这是自定义错误',16,1)GODECLARE @A INTset @a=2raiserror('自定义错误%d',17,1,@A)GODECLARE @A NVARCHAR(10)SET @A='String'raiserror('自定义错误%s',18,2,@A)GO--触发器(INSERT 触发器,UPDATE 触发器,DELETE 触发器)(CREATE TRAGGER)IF OBJECT_ID(N'TRANS')IS NOT NULLDROP TABLE TRANSGOCREATE TABLE TRANS(T_ID INT IDENTITY(1,1)PRIMARY KEY,C_ID INT,COU MONEY,TYPE NVARCHAR(4),T_DATE DATETIME DEFAULT(GETDATE()))GO--创建INSERT触发器IF OBJECT_ID(N'TR_TEST')IS NOT NULLDROP TRIGGER TR_TESTGOCREATE TRIGGER TR_TESTON TRANS FOR INSERTASDECLARE @ID INT,@COUNT MONEY,@TYPE NVARCHAR(4)SELECT @ID=C_ID,@COUNT=COU,@TYPE=TYPE FROM INSERTED --INSERTED是逻辑表IF @TYPE='取'BEGINUPDATE BANK SET BALANCE=BALANCE-@COUNT WHERE C_ID=@IDENDELSEBEGINUPDATE BANK SET BALANCE=BALANCE+@COUNT WHERE C_ID=@IDENDINSERT TRANS VALUES(1,200,'取',GETDATE())--此时触发GO--DELETE 触发器IF OBJECT_ID(N'EMP')IS NOT NULLDROP TABLE EMPGOCREATE TABLE EMP(E_ID INT IDENTITY(1,1)PRIMARY KEY,E_NAME VARCHAR(20),E_SEX CHAR(2))GOIF OBJECT_ID(N'RETIR')IS NOT NULLDROP TABLE RETIRGOCREATE TABLE RETIR(R_ID INT IDENTITY(1,1)PRIMARY KEY,E_NAME VARCHAR(20))INSERT EMP VALUES('赵敏','女')GO--创建触发器IF OBJECT_ID(N'TR_TEST1')IS NOT NULLDROP TRIGGER TR_TEST1GOCREATE TRIGGER TR_TEST1ON EMP FOR DELETEASDECLARE @NAME VARCHAR(20)SELECT @NAME=E_NAME FROM DELETEDINSERT RETIR VALUES(@NAME)DELETE FROM EMP WHERE E_ID=1--触发--不允许某一行进行更改时IF OBJECT_ID(N'TR_TEST2')IS NOT NULLDROP TRIGGER TR_TEST2GOCREATE TRIGGER TR_TEST2ON TRANS FOR UPDATE,INSERTASIF UPDATE(T_DATE)BEGINRAISERROR('不允许更改时间',16,1)ROLLBACK TRAN-- 回滚操作ENDGOINSERT TRANS VALUES(1,200,'取','2011-4-30')。