《L05_Oracle数据库编程_QUST.pdf》由会员分享,可在线阅读,更多相关《L05_Oracle数据库编程_QUST.pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据定义语句SQL数据定义功能 模式定义、表定义、视图和索引的定义对 象创建修改删除模式CREATESCHEMADROPSCHEMA表CREATETABLEALTERTABLEDROPTABLE视图CREATEVIEWALTERVIEWDROPVIEW索引CREATEINDEXALTERINDEXDROPINDEX定义模式定义模式定义模式(schema,也称架构、方案)实际上定义了一个逻辑命名空间在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等CREATESCHEMAAUTHORIZATION 如果没有指定,则隐含为 执行创建架构语句的用户必须具有管理员权限,或CREATE
2、SCHEMA权限定义模式 为用户“ZHANG”定义一个架构,架构名为“S_C”CREATESCHEMAS_CAUTHORIZATIONZHANG;定义一个用隐含名字的架构 CREATESCHEMAAUTHORIZATIONZHANG;在定义架构的同时定义表 CREATESCHEMATESTAUTHORIZATIONZHANGCREATETABLET1(C1INT,C2CHAR(10);定义模式 Oracle中虽然有createschema语句,但是它并不是用来创建一个schema的 Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决 在创建
3、一个用户的同时为这个用户创建一个与用户名同名的schema并作为该用户的缺省schema schema名字同user名字对应并且相同删除模式DROPSCHEMA|CASCADE:删除架构的同时将该架构中所有的对象一起删除 RESTRICT:如果被删除的架构中包含对象,则拒绝删除此架构定义基本表定义基本表 CREATETABLE(,);如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级定义基本表 建立“学生”表Student,学号是主码,姓名取值唯一CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,/*列级完整性约束条
4、件*/Sname CHAR(20)UNIQUE,/*Sname取唯一值*/SsexCHAR(2)NOTNULL,/*非空*/SageSMALLINT,Sdept CHAR(20);定义基本表 建立“学生”表Student,学号是主码,姓名取值唯一定义基本表 UNIQUE和 PRIMARYKEY 都是强制唯一性,但在强制下面的唯一性时应使用UNIQUE约束(而不是PRIMARYKEY)约束)非主键的一列或列组合,一个表可以定义多个UNIQUE约束,而只能定义一个PRIMARYKEY约束 允许空值的列,允许空值的列上可以定义UNIQUE约束,而不能定义PRIMARYKEY约束 FOREIGNKEY
5、约束也可引用UNIQUE约束定义基本表 完整性约束 NOTNULL:限制列取值非空 DEFAULT:给定列的默认值 UNIQUE:限制列取值不重 CHECK:限制列的取值范围 PRIMARYKEY:指定本列为主键 FOREIGNKEY:定义本列为引用其他表的外键定义基本表 建立一个“课程”表Course CREATETABLECourse(CnoCHAR(4)PRIMARYKEY,Cname CHAR(40),CpnoCHAR(4),Ccredit SMALLINT,FOREIGNKEY(Cpno)REFERENCESCourse(Cno);先修课Cpno是外码被参照表是Course,被参照列
6、是Cno定义基本表 建立一个“课程”表Course定义基本表 外键约束FOREIGNKEY()REFERENCES()如果是在列级完整性约束处,则可省略“FOREIGNKEY()”部分,例如Cpno CHAR(4)REFERENCES Course(Cno)定义基本表 建立一个“学生选课”表SC CREATETABLESC(Sno CHAR(9),Cno CHAR(4),GradeSMALLINT,PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESStudent(Sno),FOREIGNKEY(Cno)REFERENCESCourse(Cno);主码由两
7、个属性构成必须作为表级完整性进行定义表级完整性约束Sno是外码,被参照表是StudentCno是外码,被参照表是Course定义基本表 建立一个“学生选课”表SC修改表结构 ALTERTABLEADD完整性约束 DROPALTERCOLUMN;ALTERTABLE的功能 在表中添加一个新属性 添加一个新表约束 删除一个表约束 设置属性默认 删除默认属性修改表结构 向Student表增加“入学时间”列,其数据类型为日期型 ALTERTABLEStudentADDSENTRANCEDATE;不论基本表中原来是否已有数据,新增加的列一律为空值 将SC表中的成绩(GRADE)的类型由数值型改为字符型
8、ALTERTABLESCMODIFYGradeVARCHAR2(4);增加课程名称必须取唯一值的约束条件 ALTERTABLECourseADDUNIQUE(Cname);修改表结构由于数据表已经存在数据,无法修改字段类型Columnmustbeemptytochangetypealter table SC add tmp_col varchar2(4);-添加临时列update SC set tmp_col=grade;-将目标字段中数据加入到临时列中update SC set grade=null;-将目标字段数据清空alter table SC modify(grad varchar2(
9、4);-更改目标字段类型update SC set grade=tmp_col;-将临时列数据加回到目标字段中alter table SC drop column tmp_col;-清除临时列修改表结构 将SC表的GRADE列重命名为Type ALTERTABLESCRENAMECOLUMNGradeTOType;删除Student表中的列 ALTERTABLEStudentDROPCOLUMNSdept;(?)ALTERTABLEStudentDROP(SNo);OracleDatabaseDocumentationLibrary http:/ 在定义基本表时要考虑充分 新增列的值一律为空值
10、 可增加列宽,但一般不能减小列宽,会破坏已有数据删除基本表 DROPTABLERESTRICT|CASCADE;RESTRICT:删除表是有限制的 欲删除的基本表不能被其他表的约束所引用(P88)如果存在依赖该表的对象,则此表不能被删除 CASCADE:删除该表没有限制 在删除基本表的同时,相关的依赖对象一起删除删除基本表 删除Student表 DROPTABLEStudentCASCADE;基本表定义被删除,数据被删除 表上建立的索引、视图、触发器等一般也将被删除删除基本表 删除Student表 若表上建有视图,选择RESTRICT时表不能删除 DROPTABLEStudentRESTRIC
11、T;ERROR:cannotdroptableStudentbecauseotherobjectsdependonit删除基本表DROPTABLE时,SQL99与 3个RDBMS的处理策略比较序号标准及主流数据库的处理方式依赖基本表的对象SQL99Kingbase ESORACLE9iMSSQLSERVER2000RCRCC1.索引无规定2.视图保留保留保留3.DEFAULT,PRIMARYKEY,CHECK(只含该表的列)NOTNULL等约束4.ForeignKey5.TRIGGER6.函数或存储过程保留保留保留保留保留R表示RESTRICT,C表示CASCADE表示不能删除基本表,表示能删除基本表,保留表示删除基本表后,还保留依赖对象结束