⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysql-安全性-1b.htm

📁 微软数据库开发梦工场多媒体教学-My sql篇.rar
💻 HTM
📖 第 1 页 / 共 2 页
字号:
后面的条件S.S#=SC.S#称为连接条件或连接谓词.连接谓词中的字段称为连接字段。连接字段的类型必须是可比的,但个必相同.当然大多数情况下是相同类型的。连接谓词中的比较符可以是=,>,<.>=,<=,乒。当比较符为‘=’时.就是等值连接的情况。如本例.若又在目标列中去掉一个相同的字段名,则为自然连接。<BR>[例] 
带有其他条件的连接查询。<BR>求选修c1课程且成绩为B以上的学生及成绩。<BR>SELECT S。S#,SNAME.SD,AGE, GRADE FFROM 
S,SC<BR>WHERE S.S#=SC.S# AND SC.C#=’C1’<BR>AND (SC.GRADE=’A’ OR 
SC.GRADE=’B’);<BR>连接谓词可以和其他谓词组合起来,形成各种复合条件。</P>
<P>连接谓词可以是两个表的连接,也可以是两个以上表的连接(常称多表连接),也可以是一个表自身的连接。</P>
<P>(3 )嵌套查询; 嵌套查询亦称为子查询。嵌套查询是只一个SELECT –FROM –WHERE 
查询块可以嵌入另一个查询块之中。在SQL中允许多层嵌套。</P>
<P>[例] 求选修了课程‘J’的学生的学号和姓名。</P>
<P>SELECT S# ,SNAME FROM S WHERE S# IN (SELECT S# FROM SC WHERE C# IN)(SELECT C# 
FROM C WHERE CNAME=‘J‘));</P>
<P>子查询在上一级查询处理之前求解,即嵌套查询是由里向外处理的,这样,外层查询可以利用内层查询的结果,在[例14。8]中若最内层查询结果为C4,原查询可等价于:</P>
<P>SELECT S#,SNAME FROM SC WHERE C# ‘C4’);</P>
<P>若这个内层查询结果为S2,S3,S6,则原查询便为</P>
<P>SELECT S# ,SNAME FROM S WHERE S# IN (‘S2’‘S3’‘S6’);</P>
<P>从本例看到,在查询涉及多个关系时,用嵌套查询逐次求解,层次分明,容易理解也容易书写。具有结构化程序设计的优点。在嵌套查询中.最常用的是谓词IN。若用户能确切知道内层查询返回的是单值,则可以用比较算符。<BR><BR>视图的查询:视图定义后,用户可以如对基本表那样对视图进行查询。 
如:SELECT S#,SA FROM CS-S WHERE 
SA&lt;20;系统执行此查询时、首先把它转换成等价的对基本表的查询,然后执行此查询,即当查询视图表时,系统首先从数据字典中取出该视图的定义,然后把定义中的查询语句和对该视图查询语句结合起来,形成一个修正的查询语句。对上例,修正后的查询语句为:<BR>SELECT 
S# ,SA FROM S WHERE SD=‘CS’ AND SA 
&lt;20;<BR>由于视图的查询实质上是对基本表的查询,因此基本表的变化可以反映到视图上,视图就如同‘窗口’一样,通过视图可以看到基本表的动态变化。<BR>SQL插入语句<BR>插入语句的一般格式为:<BR>INSERTINT() 
表名[ (字段名[,字段名]...)]<BR>VALUES (常量[,常量]...);<BR>INSERT () 
表名[(字段名[,字段名]...)]<BR>子查询;<BR>第一种格式把一个新记录插入指定的表中,第二种格式把子查询的结果插人表中,若表中有些字段在插人语句中没有出现,则这些字段上的值取空值NULL。当然在表定义中说明了NOT 
NULL的字段在插入时不能取NULL。若插入语句中没有指出字段名,则新记录必须在每个字段上均有值。<BR>[例] 
单记录插人。<BR>把一个新学生记录插入表中.其有关信息为:S10,姓名zhang Ming,信息系IS ,18岁<BR>INSERT INTO S 
VALUES(’S10',’ZhangMing',’IS',18);<BR>[例] 插入一个选课记录(’S15’,’C10',’A');<BR>INSERT 
INTO SC(S#,C#,G) 
VALUE5(’S15J.‘C10“,“A’);<BR>插人和删除与更新操作一样,都会引起破坏数据完整性的问题,如本例中S15在S表中不存在,C10在C表中也不存在,这就破坏了参照完整性。支持关系模型的系统应自动地检查数据的完整性,对破坏充整性的插入操作拒绝执行。所以,这个新行就不能插入。<BR>[例] 
多记录插入。<BR>下面语句是求一个系中学生的平均年龄,并把结果存入数据库中。<BR>CREATE TABLE DEPTAGE(SDEPT 
CHAR(15),AVGAGE SMALLINT);<BR>INSERT INTO DEPAGE(SDEPT,AVGAGE)<BR>SELECT 
SD,AVG(AGE) FROM S GROUP BY SD<BR>SQL的删除语句<BR>删除语句的 般格式为:<BR>DELETE FROM 表名 
[WHERE 谓词];<BR>删除语句从指定表中删除满足谓词的那些记录.没有WHERE 
Z子句时表示删去全部<BR>记录,但表的定义仍在数据字典中。<BR>[例] 单个记录.例如,要把学生S9删除,可以使用下面删除语句:<BR>DELETE 
FROM S WHERE S#=‘59‘;<BR>执行删除操作也可能破坏数据的完整性.如本例。<BR>[例] 
多个记录删除。例如,要删除所有的学生选课记录,可以使用下面删除语句:<BR>DELETE FROM SC;<BR>执行此操作后,SC成为一个空表.<BR>[例] 
带有子查询的删除。删除计算机科学系全体学生的选课记录<BR>DELETE FROM SC WHERE ’CS'=<BR>(SELECT SD FROM S 
WHERE S.S#=SC.S#);<BR>SQL的更新语句<BR>(1)更新语句的一般格式为;<BR>UPDATE 表名 SET 
字段-表达式[字段=表达式]...<BR>[WHERE 
谓词]<BR>更新语句修改指定表中满足谓词的元组,把这些元组按SET子句中的表达式修改相应字段上的值。<BR>[例] 
单记录修改,如把学生S1的姓名改为’WANG PING',可以使用以下语句:<BR>UPDATE SET SNAME='WANG PING' WHERE 
S#=’S1’<BR>[例] 多记录修改,如把所有学生的年龄加2,可以使用以下语句:<BR>UPDATE S SET SA=SA+2;<BR>[例] 
具有子查询的更新,如把数学系全体学生的成绩置零,可以使用以下语句<BR>UPDATE SC SET G='0' WHERE 'MA'=(SELECT SD 
FROM S WHERE 
S.S#=SC.S#);<BR>[例]多个表的更新<BR>在UPDATE语句中,一次只能对一个表更新.这就会产生破坏参照完整性的问题<BR>例如,把S2的学号改为S9。<BR>UPDATE 
S SET S#=’S9’ WHERE S#=’S2’;</P>
<P>UPDATE SC SET S#=’S9’ WHERE S#=’S2’</P>
<P>在执行了第一个更新语句之后,数据库已处于不一致的状态,因为在SC表中某些记录(即S#=’S2’的那些SC记录)的S#值在S表中不存在,这就违反了关系模型的参照完整性,只有执行了第二个更新语句之后,数据库才重新处于一致状态.因此,必须保证这两个更新语句要么都执行要么都不执行,这就涉及到事务的问题了.</P>
<P>视图的执行: 对视图修改最终要转换成对基本表的修改(修改指INSERT,UPDATE和DELETE三类操作),如</P>
<P>UPDATE CS-S SET SN=’WANG PING’ WHERE S#=’S1’;</P>
<P>将转换成对基本表S的更新;</P>
<P>UPDATE S SET SN=’WANG PING’ WHERE S#=’CS’ AND S#=’S1’;</P>
<P>INSERT INTO CS-S VALUE(‘S12’,YAN XI’,19);</P>
<P>而将转换成对基本表的插入:</P>
<P>INSERT INTO S VALUE (‘S12’,YAN XI’,’CS’,19);</P>
<P>在关系数据库中,而非所有的视图都是可修改的,也就是说,有些视图的修改不能唯一的有意义的转换成对基本表的修改,例如:</P>
<P>UPDATE S-G SET GAVG=90 WHERE S3=’S1’;</P>
<P>由于S-G中的一个元组是由SC中若干行经过分组求平均得到的,因此对视图S-G的更新就无法转换成对SC的更新,所以视图S-G是不可更新的.</P>
<P>SQL的数据控制语句<BR>SQL数据控制功能是指控制用户对数据的存取权力。某个用户对某类数据具有何种操作权是由DBA决定的,这是管理问题而不是技术问题。数据库管理系统的功能是保证这些决定的执行,为此它必须能:把授权的决定告知系统,这是由SQL语句GRANT和REVOKE来完成的;把授权的结果存人数据字典;当用户提出操作请求时,根据授权情况进行检查,以决定是执行操作请求还是拒绝之。<BR>授权语句格式<BR>GRANT 
权限表 ON 表名 TO 用户名表 [WITH GRANT OPTION]<BR>该语句把对指定表的某些权限授予指定的若干用户。当有WITH GRANT 
OPTOIN 
短语时,被授权的用户还可将获得的权限再授予其他用户,GRANT语句可以指定的操作权限有:SELECT(检索)、INSERT(插入)、DELETE<BR>(删除)、UPDATE(更新)、EXPAND(扩充)、INDEX(建立索引)、ALL 
PRIVILEGES(所有上述权限).DBA(用户被指定为DBA)等。回收权限语句格式<BR>REVOKE权限表ON 表名FROM 
用户名表<BR>把已授给指定用户的在指定表上的权限收回。把对表C的查询权力授予所有用户。<BR>GRANT SELECT ON TABLE C TO 
PUBLIC;<BR>把在数据库S-C中建立表的权力授予用户杜明。<BR>GRANT CREATETAB ON DATEBASE S-C TO 
DUMING;<BR>把对表S的查询权力授予用户U2,并给U2有再授权权力。<BR>GRANT SELECT ON TABLE S TO U2 WITH 
GRANT OPTION ;<BR>把用户王平更新学生学号的权力收回。<BR>REVOKE UPDATE(S#)ON TABLE S FROM 
WANGPING;<BR>把用户U2查询S表的权力收回。<BR>REVOKE SELECT ON TABLE S FROM 
U2;<BR>SQL的数据嵌入式使用<BR>SQL语言具有双重使用方式,既可在交互方式下使用.也可将SQL语句嵌入某种高级语言(例如:C,FORTRAN,COBOL,PL/1等)中使用。后一种使用SQL的方式称为嵌入使用方式。这两种方式在细节上会有许多差别.特别是SELECT 
语句.在程序设计的环境下要作必要的扩充。把SQL嵌入主语言使用时,必须解决三个问题:<BR>1. 
区分SQL语句与主语言语句。这是对通道在所有的SQL语句前加前级EXECSQL来解决的(图A①)。SQL语言的结束标志随主语言不同而不同。<BR>2.数据库工作单元和程序上作单元之间的通信。SQL语句可以使用主语言的程序变量(简称主变量),这些变量名前加冒号(:)作标志,以区别于字段名(图A⑤),程序中使用的任何表(基本表或视图)都要用EXEC 
SQL 
DECLARE语句加以说明(图A②),一则使程序更加易懂,二则使预编译程序能作某些语法检查。SQL语句执行后,系统要反馈给应用程序若干信息,这些信息送到SQL的通信区SQLCA。SQLCA用语句EXEC 
SQLINCLUDE加以定义(图A③)。在SQLCA中有一个状态指示字段SQLCODE。当SQLCODE为零时,表示SQL语句执行成功、否则返回一个错误代码(负值)或警告信息(正值),程序员应该在每个SQL语句之后测试SQLCODE的值,以便了解语句执行结果、并采取相应措施。<BR></P>
<P>带有嵌人式SQL的一小段PL/1l程序 3.一个SQL语句原则上可产生或处理一组记录,而主语言—次只能处理一个记录. 为此必须协调两种处理力式。这是用游标(Cursor)来解决的。 
  与游标有关的SQL语句有四个:<BR>
  (1)游标定义语句。游标是与某一查询结果集相联系的符号名,游标用SQL的DECLARE语句定义,它是说明语句、其中的SELECT语句并不执行。<BR>(2)游标打开语句(OPEN)。此时执行游标定义中的SELEC丁语句,游标处于活动状态,指向查询结果集中的第一行之前。<BR>(3)游标推进语句(FETCH)。执行它使游标向前推进‘行,并把游标指向的行(称为当前行)中的值取出,放到语句中说明的对应的程序变量中。FETCH语句常常被用在主语言程序的循环中,并借助主语言的处理语句逐一处理查询结果集中的一行。<BR>(4)游标关闭语句(CLOSE)。关闭游标,使它不再和原来的查询结果相联系。关闭了的游标可以再次打开,与新的查询结果相联系。<BR>在游标处于活动状态时,可以修改和删除游标指向的行。<BR>[例] 
在表S和SC中检索某学生(姓名由主语言变量GIVENSNAME给出)的学习成绩信息(S#,SNAME,C#,GRADE)。其程序是:<BR>EXEC SQL 
DECLARE SCX CURSOR FOR<BR>SELECT S.S# ,SNAME,C#,GRADE FROM S,SC<BR>WHERE 
S.S#=SC.S# AND SNAME=:GIVENSNAME;<BR>(定义了名为SCX的一个游标)<BR>EXEC SQL OPEN 
SCX<BR>(打开游标SCX)<BR>EXEC SQL SCX INTO :S#,:SNAME 
,:C#,:GRADE;<BR>(游标推进1,把值送到于语言的变量中去);<BR>…(主语言的处理语句)<BR>END;<BR>(利用主语言WHILE语句.构成循环结构)<BR>EXEC 
SQL CLOSE SCX<BR>(关闭游标);<BR><BR></P></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -