SQL基础知识总结.doc_第1页
SQL基础知识总结.doc_第2页
SQL基础知识总结.doc_第3页
SQL基础知识总结.doc_第4页
SQL基础知识总结.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL基础知识第1章、简单查询语句一、基本查询语句1、基本的语法格式:【select(SQL关键字)distinct(滤除重复记录) * /列名称 别名 from table;】2、书写SQL语句遵循的基本原则:不区分大小写,除非特别指定;可以写成一行或多行;关键字不能简写或分割于多行;子句通常单独行书写,便于编辑和提高可读性;使用Tab和缩进提高程序可读性;关键字最好使用大写,其他使用小写;在SQL*Plus中,SQL语句是在SQL prompt状态下输入,并且每行都有编号。是SQL的缓冲区,任何时候在缓冲区中只会存放当前一条语句。3、| | 表示列与列、列与算术表达式、列与常量之间的合成。第2章、限定查询和排序语句1、限定数据行的查询语法格式:【select distinct */ 列名称 别名 from table where(限定条件)列名/表达式/常量/比较运算符;】(其中比较运算符包括:=:等于、:大于、=:大于等于、:小于、=:小于等于、.!=.=:不等于。(要查询的列)between(下限)and(上限):两个值之间包括边界范围比较。 (要查询的列)in (集合,用逗号隔开):和多个值中任意一个匹配,相当于多个or并列在一起。 (要查询的列)like+通配符和查询的内容:模糊查询、is null:是否是空值)1.1、where子句中,字符串和日期数值必须用单引号引起来,数值型常量则不需要,字符型数据区分大小写,默认的日期形式是:DD-MON-YY。1.2、like(模糊查询):把握不准查询确切的值,通过字形匹配来查询。可以使用通配符:%:表示0或更多任意的字符;:代表一个字符。可以同时使用。当查询的内容包括%或时,可以使用escape,即“/”转义符。1.3、逻辑运算符:19andTrueFlaseNullTrueTFNFlaseFFFNullNFNortrueFalseNullTrueTFTFlaseTFNnullTNN Not::如果条件为假则返回真值。在where子句中。通过使用and和or在where中使用多个条件。1.4运算符优先规则:算数运算符连接符比较运算符notandor。2、order by 子句:查询结果按照某种顺序排列显示。 order by 子句语法格式:【select distinct */ 列名称 别名 from tablewhere(限定条件)列名/表达式/常量/比较运算符Order by (要查询的列) asc(生序排列)/desc(降序排序);】注意:order by子句必须放在select语句的最后,并且可以指定一个参与排序的表达式或别名。可使用别名进行排序。Select语句中只能有一个order by 子句。2.1、默认的排序方式是升序,不同类型数据的升序排列原则: 数值型数据按照从小到大的顺序排列的; 日期型数据按照时间从早到晚的顺序排列的; 字符型数据按照字母顺序排列的; 空值在升序排列方式下排在最后,降序排列排在最前。SQL运行过程:from首先运行,where其次运行,select再运行,order by 最后运行。对查询结果进行排序。第3章、单行函数查询1、单行函数的特点: 对查询返回的每一行都起作用。 可以返回一个数据值或相对于原类型不同类型的数据值。 可以有一个或多个参数,参数可以是一列或一个表达式。 每行返回一个结果。 可以用于select、where、order by子句,并且可以相互嵌套。 只对一行进行操作。2、单行查询语法格式:【function_name(函数名称) column(列名)/ expression(字符串或计算表达式) arg1(参数),arg2】3、字符函数:接受字符输入并且返回字符或数值。 大小写转换函数:lower(需转换的内容):将字符串转换成小写。Upper(需转换的内容):将字符串转换成大写。initcap(需转换的内容):将每个单词的第一个字母转换成大写,其余字母转换成小写。字符处理函数:concat:将字符串连接在一起。substr:提取字符串的某一特定部分;参数:(字符串,截取起始点负数:从右往前数,然后从前往后截取,截取个数省略表示截取到最后)。 length:获得字符串的个数。instr:在字符串中查找某个字串的位置;参数(字符串,要查找的字符,从那个位置开始查找默认值为1,负数:一直从右往左数,第几次出现的位置)。lpad:以右对齐的方式填充字符型数据;参数:(字符串,填充长度,填充内容)。rpad:以左对齐的方式填充字符型数据(参数同上)。trim:去掉字符串头部或尾部,如果被去除的字符串和被处理的字符串是原义字符串则必须使用单引号引起来;参数:(去掉的字符串 from 被去掉的字符串)。replase:替换;参数(字符串,被替换字符,替换的字符)。4、数值函数:接受数值输入并返回数值。包括:round:四舍五入;参数:(数字,四舍五入后的小数点后位数默认值为0,负数为从小数点往左边数)。trunc:截取;参数:(数字,截取后小数点后面的位数同上,但无四舍五入功能)。mod:求余,多用于判断奇数偶数;参数:(被除数,除数)。5、日期函数:对日期型进行操作,所有的日期函数都返回一个日期型数据,除了months_between函数,返回一个数值。Oracel9i默认的显示和输入形式是DD-MON-RR。Oracel有效的日期范围是公元前4712年1月1日到公元9999年12月31日。日期的运算如下表:操作结果描述日期+数字日期在某日期的基础上加上一定的天数日期数字日期在某日期的基础上减去一定的天数日期日期天数一个日期减去另一个日期(相差天数)日期+数字/24日期在某日期的基础上加上小时 Sysdate:当前系统时间。 day:对星期的计算。YY与RR的比较:转换的时间系统当前时间YYRR0-4950-990-4950-990-49本世纪本世纪本世纪上个世纪50-99本世纪本世纪下个世纪本世纪5.1常用日期函数:日期函数参数含义months_between(date1,date2)date1、date2为两个日期两个日期相差的月份数量结果可正可负add_months(date,n)date为一个日期n为月数向指定日期加上若干月数n是整数。负数为累减next_day(date,char)char:星期几或字符串date之后一周内的星期几或字符串last_day(date)date:某日期求date所在月的最后一天round(date,fmt)fmt:指定的格式,如monthyear等,默认为DD将date按照fmt的格式进行四舍五入,若不指定fmt则四舍五入为最近的天trunc(date,fmt)fmt:指定的格式,如monthyear等,默认为DD将date按照fmt的格式进行截取,若不指定fmt则截取为最近的天6、转换函数:从一种数据类型转换为另一种数据类型。6.1数据类型的显示转换:number(数字) character(字符) date(日期)to_number函数to_date函数to_char函数to_char函数6.2数据类型转换函数包括如下:转换函数参数含义to_char(date/number,format,nlsparams)format:日期格式参数(如下)。未指定的默认的格式为DD-MON-RR。将date或number数据按照fmt形式转换成字符串to_number(string,format,nlsparams)format:数字格式参数(如下)。nlsprams:指定小数点或千位分隔符或货币符。将String按照限定格式转换成number类型的数值to_date(string,format,nlsparams)format:日期格式参数(如下)。nlsprams:指定返回日期所使用的语言。将String按照限定格式转换成date类型的数值6.3日期、数字格式参数如下:日期格式参数含义数字格式参数含义yyyy完整的年份表示9表示一位数字year年份的英文表示0显示前导零,即占位mm2位数字表示月份$显示美元符号month月份的英文表示L显示本地货币号dy3个英文字符缩写表示星期几显示小数点day星期几完整的英文表示,显示千位符dd几号的数字表示S为数据加前导或后继+、号B小数点后数据用0显示6.4使用日期模式时注意的问题: 必须用单引号引起来,对大小写敏感。 可以包含任意的有效的日期元素。 可以用fm消除前导空格或前导0。 使用,与日期型数据分隔开。7、通用函数:nvl函数与decode函数如下:通用函数语法格式参数含义nvl函数nvl(expr1 , expr2)expr1expr2数据类型要一致expr1:包含空值的源或表达式expr2:将null转换后的目标值将null转换成一个实际的值decode函数decode(col/expr,search1,result1,search2,result2,default)col/expr:列名或表达式search1searchi:比较条件result1resulti:返回值col/expr与searchi相比较,结果相同则返回resulti;若没有相匹配的结果则返回默认值default8、单行函数的嵌套:嵌套的函数是从里层向最外层的顺序依次计算的。第四章、多表查询1、连接:从多个表中获取数据时,需要使用连接条件。通过使用相对应列的公共值进行连接,需在where子句中写出连接条件。1.1连接语法格式如下:【 select table1column, table2columnfrom table1,table2 where table1column1=table2column2 】注:table1column:指明查询的数据来源的表名和列名;table1column1:连接条件。连接条件的情况包括:等值连接(内部连接或简单连接),非等值连接,外部连接,和集合运算符。1.2在编写访问多表的SQL语句时,需注意的问题: 用到表连接时,需要在列名之前标示出表名,以提高数据库的访问效率。 多个表中存在相同的列名时,列名之前必须用表名标示。 n个表相连时,至少需要n-1个链接条件。1.3连接中使用表的别名需注意的事项:表的别名=30个字符,但原越短越好;若在from语句中定义了表的别名,在整个select语句中必须使用别名;表的别名要具有一定的意义;表的别名只在当前select语句中有效。2、笛卡尔积:当连接条件无效或完全被省略以及第一个表中的所有行和第二个表中的所有行都发生连接时,所有行的组合都出现,这种结果称为笛卡尔积。是一种交叉连接,当需要产生大量的数据行模拟海量的数据时才会用到。3、等值连接(内部链接):在where子句中用“and”加入其它条件进行连接。例:select empempno,empename,empdeptno,deptdeptno,deptloc from emp,dept where emp.deptno=dept.deptno and emp.deptno=10; 查询在10号部门工作的雇员的编号、姓名、部门编号和部门位置。4、非等值连接:不用“=”的连接为非等值连接。例如:5、外部连接:在SQL: 1999中,内连接只返回满足连接条件的数据。 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。 两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为全外联接。 外部连接的运算符是(+),语法格式如下:右外 select table1.column,table2.column 左外 select table1.column,table2.column from table1,table2 或 from table1,table2连接 where table1.column (+)=table2.column; 连接 where table1.column =table2.column(+);(+)在哪边,哪边就用空白填充,即值为null。在连接时,允许出现不匹配的记录。 使用外部连接注意的事项:(+)必须放在连接条件表达式的一侧,即缺少相关连接信息的表一侧,返回该表中那些在另一个表中没有得到匹配的记录;外部连接条件中不能使用in运算符,也不能用or运算符与其他条件相连。6、自身连接:一般在人事系统当中使用自连接,因为再高级的领导,在财务人员来看,他们也是员工。7、SQL:1999语法连接:使用连接从多个表中查询数据。1999语法连接的语法格式如下:【 selecttable1.column, table2.column table1.column:从哪个表哪个列中查询数据fromtable1 table1:表名cross join table2 或 cross join(交叉连接):返回两个表的笛卡尔积(连个表的交叉连接) 可单独使用natural join table2 或 natural join(自然连接):用相同名称的列连接两个表,可单独使用join table2 using (column_name) 或 指定实现等值连接的列名join table2 on (table1.column_name = table2.column_name) 或 在on子句中指定实left或rinht或full outer join table2 现等值连接的条件 on (table1.column_name = table2.column_name);】 left或right或full outer外部链接的方式8、自然连接:natural join实现具有列名和数据类型相匹配的两个表之间的自动连接。可以写成等值连接方式;若要使用其他连接方式可以通过where子句实现。注意事项: 自然连接子句基于两个表存在相同名称的列; 返回两个表相匹配列中具有相同值的记录; 如果相同名称的列的数据类型不同,则会产生错误。9、using子句连接:使用时注意的问题:在natural join 子句创建等值连接时,如果有多个名字相同,数据类型不同的列,那么可以使用 using 子句指定等值连接中需要用到的列。 使用 using 可以在有多个列满足条件时进行选择相匹配的一列进行查询。 不要给选中的列使用表名和别名作为前缀。 自然连接不能和on和using子句同时使用,因为自然连接特别定义了连接表所用的搜索条件两表中具有相同字段名的所有字段必须匹配。前面我们介绍了在oralce中使用natural join,也就是自然连接。在Oracle中的join连接中使用using关键字,是相对于natural join的。我们在前面提到,如果是使用natraul join,并且两张表中如果有多个字段是具有相同的名称和数据类型的,那么这些字段都将被oracle自作主张的将他们连接起来。但实际上我们有时候是不需要这样来连接的。我们只需要将他们的多个具有相同的名称和数据类型的字段中挑选一两个。这时候我们就需要用到using 关键字了。下面是一个例子。在oracle的例子sh的schema中的有一个表是sales,还有一个表是costs,这两个表中都有两个字段分别是pro_id和time_id。我们暂且不去考虑下面连接的实际意义,仅作语法上的研究。如果使用natural连接,默认情况下,两个字段将会被自然地连接在一起。Select * fromSales natural join costs;和Select * from Sales join costs on Sd_id = d_id and sales.time_id = costs.time_id和Select * from Sales ,costs Where S_id = d_id and sales.time_id = costs.time_id得到的结果应该是一样的。如果我们使用自然连接,就没有机会控制连接条件,oracle自作主张的将两个相同数据类型和名称的字段自然地连接在一起了。下面我们使用using关键字。Select * from Sales join costs using(prod_id)这样就迫使oracle使用using指出的字段来做连接,而不是natural join连接中默认的两个。请注意,这里的SQL语句没有任何意义,只是为了说明using的用法举了一个牵强的例子而已。这里还需要说明的是:1. 如果在使用using关键字时,而且select的结果列表项中包含了using关键字所指明的那个关键字,那么请不要在select的结果列表项中对该关键字指明它属于哪个表,例如如果使用using(prod_id),而在结果列表中要包含prod_id字段的话,请不要写成d_id或者d_id而应该写成prod_id,而且也不要使用别名,就是使用例如prod_id as “产品编号”的形式。2. using中仅能使用一个列名。3. natural join关键字和using关键字是互斥的,也就是说不能同时出现。10、 用on创建连接:自然连接中是以具有相同名字的列为连接条件的。可以使用 on 子句指定任意的或特殊的列作为连接条件进行查询。 这个连接条件是与其它条件分开的。 on 子句使语句具有更高的易读性。第5章、组函数和分组统计1、组函数:组函数作用于一行数据的集合,并对一行数据集合返回一个值。要写在select子句后面。1.1、组函数的语法格式如下:【 selectcolumn, 组函数参数(column 列名), .fromtablewherecondition where条件group by column 分组子句order by column; 】 按照某种顺序排列 放在最后1.2、常用组函数参数如下:组函数参数变量参数说明含 义说 明count(* / distinct / all expr)*:包括重复行和空值行;expr:非空行;根据where子句的条件查询行的总数。表中行的总数*含空值,expr不含Avg (distinct / all n)列的平均值均忽略空值max (distinct / all sxpr)列的最大值min (distinct / all sxpr)列的最小值stddev (distinct / all x)列的标准差sum (distinct / all n)列的总和variance (distinct / all x)列的统计方差注:avg、sum、variance、stddev函数只能用于数值型的列;min、max可用于任何类型数据。1.3、组函数使用原则:使用distinct排除重复值,all包括所有值,默认情况下,为all,所以不用专门指出all。 参数的数据类型类型可以是:char、varchar2(字符串)、number、date。 除了count(*),所有组函数均忽略空值,可以使用nvl函数将空值转换成一个实际值。 当使用order by子句时,结果集合按升序排列,要改变排列方式则在order by子句中使用desc关键字。2、group by子句:可以使用group by 子句将表中的数据分成若干组;在select 列表中所有未包含在组函数中的列都应该包含在 group by 子句中;包含在 group by 子句中的列不必包含在select 列表中。必须放在where子句后面。group by 子句使用原则:在select子句中使用组函数,就不能同时查询出个体信息,除非在group by 子句中包含了所指定的列;如果未能包含列组成的列表,将得到一个错误提示; 使用where子句时可以在分组前将某些记录排除;group by 子句必须包含指定的列;group by 子句中不能使用列的别名。3、使用函数组的非法查询:所用包含于select 列表中,而未包含于组函数中的列或表达式都必须包含于 group by 子句中;不能在 where 子句中使用组函数;可以在having 子句中使用组函数。错误:1)、此处不允许使用分组行数。解决办法:使用having子句纠正。2)、非单组分组函数。解决办法:增加group by子句纠正。4、having 子句:使用 having 过滤分组:行已经被分组。使用了组函数。满足having 子句中条件的分组将被显示。在组函数结果基础上对记录加以限制,则必须在使用group by 的同时使用having子句。当使用having子句时,Oracle服务器执行过程:对记录分组;在分组基础上应用组函数;与having子句匹配的组结果输出。having子句可放在group by 子句前或后,但逻辑上放在后比较合适。第6章、子查询1、子查询:是嵌套在select语句中的另一个select语句,当需要从一个表中查询信息,而查询的条件又是来自该表本身的内部数据时用到。可以嵌于where、having和from子句中。子查询 (内查询) 在主查询之前执行,并且只执行一次。 子查询的结果被主查询(外查询)使用 。可以在select语句的form子句中使用子查询,就像使用视图一样。1.1、其语法格式如下:【 select select_list from table where expr operator ( select select_list from table ) 】 其中:select_list:列名;expr operator:运算符,包括(,=,=,=,=,=。 单行子查询中可以使用组函数; having子句中可以使用单行子查询,首先执行子查询,向主查询中的HAVING 子句返回结果。 使用单行子查询的复合查询容易出现的问题:子查询的结果多于一行;结果没有返回的行。 多行子查询:内部select语句返回多行结果的查询(单列)。使用多行运算符:in,any,all。 any运算符(同义运算符some)将和子查询的结果逐个比较:any表示大于最小数;=any等效于in。 all运算符和子查询返回的每一个结果进行比较:all表示大于最大数;all表示小于最小数。 not运算符可与in、any、all运算符联合使用。 多列子查询:内部select语句返回多个列结果的查询。单行和多行子查询只有一个列在select语句的where或having子句中进行比较,若同时进行多列比较,则必须使用逻辑运算符编写一个复合where子句,多列子查询可以将where子句中的多个条件合并成一个。多列子查询分为:成对比较多列子查询:主查询的每一行中的列都要与子查询返回列表中相对应的列进行比较,只有各个列完全匹配时才显示主查询中的该数据行。非成对比较多列子查询。1.4、子查询中的空值:无论什么时候只要空值有可能成为子查询结果集合中的一部分,就不能使用not in运算符,not in运算符等效于all。1.5、在什么时候遇到什么问题应该使用子查询。 Sql语句在逻辑上被分为多步。 主查询的查询条件依赖于子查询的执行结果。 在查询是基于未知的值时应使用子查询。 除非特别需要,一般我们建议大家使用连接的方式,尽量避免使用子查询。第7章、使用替代变量在SQL语句中使用&来识别每一个变量而不需要定义变量的值。课本94页。第8章、数据操作1、DML 可以在下列条件下执行: 向表中插入数据; 修改现存数据;删除现存数据。2、事务是由完成若干项工作的DML语句组成的逻辑单位。3、基本的插入语句语法格式如下:【insert into table (column , column.) table:被插表名;column:列名;values(value , value.); 】 values:要插入的数据,顺序、数据类型要和column得相同。注:使用这种语法一次只能向表中插入一条数据。3.1为每一列添加一个新值。按列的默认顺序列出各个列的值。 在 INSERT 子句中随意列出列名和他们的值。字符和日期型数据应包含在单引号中。3.2若插入的记录包含每一列的值,则可以不列出列名,但是值必须按照表中的默认顺序进行排列。 4、向表中插入空值:首先使用SQL*Plus的describe命令查看“是否为空?”选项可以知道该项是否允许为空。隐式方式: 在列名表中省略该列的值。显示方式: 在VALUES 子句中指定空值。 5、向表中插入特殊值。(课本111页) 6、创建脚本:在SQL 语句中使用& 变量指定列值。 & 变量放在valuse子句中。例如:7、从其他表中复制数据:使用insert语句向表中插入来自另一个表中的数据,方法是在原来values子句的位置使用子查询,语法格式如下:【 insert into table column (, column ) subquery; 】注:insert子句中列的数量和类型必须和子查询中列的数量 和类型相匹配。不必书写 values 子句。 表名 列名 从另一个表中取得数据的子查询 8、基本的更新语句语法格式如下:【 update table set column = value ,column = value 同时修改多个列 可更改多条记录 where condition; 】value:与列对应的值或子查询;condition:限定被更新的记录,由列名、表达式、常量、子查询及比较运算符组成。 8.1、使用 WHERE 子句指定需要更新的数据。如果省略WHERE子句,则表中的所有数据都将被更新。 8.2、基于另一个表更新记录语法格式如下:【 update table set (column,column) = (select column,column from table where condition) 】 8.3、更新数据完整性约束错误:不存在的表或者列等。9、基本的删除语句语法格式如下:【 delete from table where condition 】condition:指定删除的记录,由列名、表达式、常量、子查询及比较运算符组成,若省略了where子句则删除整个表的数据。 9.1、delete只能删除一条记录,最小单位为删除一行记录。使用WHERE 子句删除指定的记录。在 delete 中使用子查询,使删除基于另一个表中的数据。 9.2、删除记录时的完整性约束错误:不能删除正在被其他表使用的记录。 10、基本的合并语句语法格式如下:【 merge into table_name table_alias 要修改的表名,表的别名 using (table|view|sub_query) alias (用的表名/用的视图/用哪个子查询) 别名 on (join condition) 连接条件,若为真,则进行更新;若为假,则进行插入。 when matched then update set col1 = col_val1, 更新语句,可更新多条记录。 col2 = col2_val 列名 = 更新的值 when not matched then 列名 insert (column_list) 插入语句,可插入多条记录。 values (column_values); 】 插入的值 10.1、根据指定的条件执行插入或更新操作。如果满足条件的行存在,执行更新操作;否则执行插入操作:避免独立的数据更新;提高效率而且使用方便;在数据仓库应用中经常使用。 10.2、在DML语句中使用 WITH CHECK OPTION 关键字;使用子查询表示 DML 语句中使用的表;WITH CHECK OPTION 关键字避免修改子查询范围外的数据。10.3、使用 DEFAULT 关键字表示默认值;符合SQL:1999标准;可以使用显示默认值控制默认值的使用;显示默认值可以在 INSERT 和 UPDATE 语句中使用。 11、数据库事务11.1、 以第一个 DML 语句的执行作为开始,以下面的其中之一作为结束: 显示的COMMIT 或 ROLLBACK 语句 DDL 或 DCL 语句被执行(自动提交) 用户退出SQL*Plus,会话正常结束 系统异常终止 11.2、COMMIT和ROLLBACK语句的优点:确保数据的完整性。在数据的改变被提交之前重新检查我们所改变的数据是否正确。将逻辑上相关的操作分组。11.3、回滚到保留点:使用 SAVEPOINT 语句在当前事务中创建保存点。使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。 11.4、隐式事务进程:自动提交在以下情况中执行: DDL 语句。(DDL:数据定义语言) DCL 语句。(DCL:数据操作语言) 不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话。会话异常结束或系统异常会导致自动回滚。 11.5、提交或回滚前的数据状态: 改变前的数据状态是可以恢复的 执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。 DML语句所涉及到的行被锁定, 其他用户不能操作。 11.6、提交后的数据状态: 数据的改变已经被保存到数据库中。 改变前的数据已经丢失。 所有用户可以看到结果。 锁被释放, 其他用户可以操作涉及到的数据。 所有保存点被释放。 11.7、数据回滚后的状态:使用 ROLLBACK 语句可使数据变化失效: 数据改变被取消。 修改前的数据状态可以被恢复。 锁被释放。 11.8、语句级回滚: 单独 DML 语句执行失败时,只有该语句被回滚。 Oracle 服务器自动创建一个隐式的保留点。 其他数据改变仍被保留。 用户应执行 COMMIT 或 ROLLBACK 语句结束事务。 11.9、读一致性: 读一致性保证在任何时间任何用户所看到的数据都是一致的。 一个用户的对数据的改变不会影响其他用户的改变。 对于相同的数据读一致性保证: 查询不等待修改(读者不等待写者)。 修改不等待查询(写者不等待读者)。 11.10、锁:Oracle 数据库中,锁是 : 并行事务中避免资源竞争。 避免用户动作。 自动使用最低级别的限制。 在事务结束结束前存在。 两种类型: 显示和隐式。 隐式锁:两种模式: 独占锁: 屏蔽其他用户。 共享锁: 允许其他用户操作。 高级别的数据并发性: DML: 表共享,行独占 Queries: 不需要加锁 DDL: 保护对象定义 提交或回滚后锁被释放。第9章、创建和管理表1、Oracel数据库的数据结构(对象)包括:表:基本的数据存储单位,由行和列组成。视图:从表中抽出的逻辑上相关的数据集合。 序列:提供有规律的数值。索引:提高查询的效率。 同义词:给对象起别名。2、表的命名规则:必须以字母开头;必须在 130 个字符之间;必须只能包含 AZ, az, 09, _, $, 和 #必须不能和用户定义的其他对象重名;必须不能是Oracle 的关键字。3、创建表的基本语句语法格式如下: 【create table 给哪个用户创建 table(新表名) (列名、当前列的数据类型和长度) default 默认值 】3.1、列的数据类型如下:数据类型含 义varchar2(长度)可变长字符串,长度=4000字节 (常用)number(长度,小数点位数)数值型数据,长度=2000字节nchar(长度)存放定长的Unicode字符串,长度=2000字节raw存放高达2000字节的二进制数据日期数据类型含 义语法:timestamp (fractional_seconds_precision) timestamp时间撮到微秒说明:Oracle9i对日期的改进:加入了新的日期型数据类型有效的存储新数据类型提高对时区和本地时区的支持interval year to month若干年月 interval day to second若干天到秒4、使用子查询创建表 其语法格式如下: 指定列和子查询列要一一对应。【 create table table column (,column ) as subquery 】 被创建表名 列名、默认值 子查询语句4.1、使用指导:用 AS subquery 选项,将创建表和插入数据结合起来;指定的列和子查询中的列要一一对应;通过列名和默认值定义列;未指定创建表的列时,创建出的新表的列的名称和子查询中各个列的名称相同。5、修改表的结构:追加新的列;修改现有的列;为新追加的列定义默认值;删除一个列时可以使用alter table语句。5.1、(追加列)语法格式如下:可追加多个列,新增的列总是在最后边显示。【 alter table table add (column datatype default expr ,column datatype); 】 表名 新列数据类型、长度 新列名5.2、(修改列)在alter table语句中,使用modify子句可以修改中已经存在的列,列的修改可以包括数据类型、长度及默认值。如果修改列的默认值,只会影响后来插入的新纪录。语法格式如下:【 alter table table modify (column datatype default expr ,column datatype); 】5.3、(删除列)drop table 语句用于删除表的定义,语法格式如下:【 alter table table drop (要删除的列名) 】6、(修改表的名称)使用rename语句可以对表、视图、序列或同义词进行改名。语法格式如下:【 rename old_name to new_name;】7、(清空表)使用truncate table 语句删除表中的所有记录并释放该表的存储空间。数据和结构都被删除;所有正在运行的相关事务被提交;所有相关索引被删除;DROP TABLE 语句不能回滚。表存在数据没有了。语法格式如下:【 truncate table table; 】7.1、三个删除的比较:delete:是一条DML语句,只删除表里的数据,最少只能删除一行记录,可以回滚,不是放表的存储空间;drop table:是一条DDL语句,删除表的结构和表里的数据,数据库中该表的所有数据将丢失并且该表的相关索引也被删除,相关的视图和同义词仍存在,但不能使用,悬而未决的事务被提交,不能在回滚;truncate table:删除表里所有数据,表仍存在,并释放表的存储空间,不能回滚。8、给表添加注释:给表添加不超过2000字节的注释,可以从字典表comments列中查询。相关查询:all_col_comments:查询所有列注释;user_col_comments:用户当前查询;all_tab_comments:所有表的查询; user_tab_comments:用户表的查询;8.1、语法格式如下:【 comment on table table / colume tablecolumn is 注释文字 】第10章、约束1、什么是约束:约束是表级的强制规定,约束放置在表中删除有关联关系的数据,有以下五种约束:NOT NULL(只能定义在列级);UNIQUE ;PRIMARY KEY;FOREIGN KEY;CHECK; 注意事项:如果不指定约束名 Oracle server 自动按照 SYS_Cn 的格式指定约束名; 在什么时候创建约束:建表的同时;建表之后; 可以在表级或列级定义约束; 可以通过数据字典视图查看约束。2、定义约束的语法格式如下:【 create table schema table (cloumn datatype default expr constraint 约束名 约束类型(被约束的列),, constraint 约束名 约束类型(被约束的列) ); 】 列约束 表约束 当前用户 数据类型、长度 3、五种约束类型介绍: not null(非空约束):确保该列不能存放空值,如果列没有使用not null约束,则该列可以为空;它只能定义在列一级上,不能定义在表一级上。利用插入的方法检测not null是否起作用。 unique(唯一性约束):要求列或列集合中的每一个值都是唯一的,就是说表中没有两条记录在该列或列集合上的值是相同的,unique允许输入空值,除非定义not null约束。Unique可以定义在表或列一级上,由unique约束的多个列组成复合唯一关键字是在表一及上定义的。 primary key(主键约束):可以创建主关键字,每个表只能有一个主关键字,primary

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论