您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 4-Oracle数据定义语言(DDL)
数据库开发技术第4章Oracle数据定义语言(DDL)福建工程学院本章要点创建和管理Oracle表约束Oracle数据库表的各种类型4.1创建和管理表描述主要的数据库对象表和列名的命名规则创建表描述可用于定义列的数据类型修改表定义删除、更名、截断表4.1.1数据库对象对象描述表存储数据的基本单元,由行和列组成视图来自一个或多个表的数据的子集序列产生主关键字值索引提高某些查询的性能的数据结构同义词赋予对象另外的名字4.1.2命名规则和约定(表和列名)必须以字母开头长度为1–30个字符只能包含A–Z,a–z,0–9,_,$和#对于同一个用户不能使用和其他对象相同的名字不能是Oracle的保留字注:1.名字不区分大小写,例如:EMP、eMP或eMp指的是同一个表。2.在不同的表中命名相同的实体采用保持一致的原则,例如:部门编号在EMP和DEPT中都使用相同的名字DEPTNO。4.1.3CREATETABLE语句您必须具备:¯CREATETABLE的权限¯一定的存贮空间您需要指定:¯表名¯列名、列的数据类型及列的宽度CREATETABLE[schema.]table(columndatatype[DEFAULTexpr];4.1.3创建表(DDL)SQLCREATETABLEdept12(deptnoNUMBER(2),3dnameVARCHAR2(14),4locVARCHAR2(13));表已创建。创建表验证是否创建成功(查看表结构)SQLDESCRIBEdept1NameNull?Type--------------------------------------------DEPTNONOTNULLNUMBER(2)DNAMEVARCHAR2(14)LOCVARCHAR2(13)4.1.3创建表:DEFAULT选项指定在插入数据时,列的默认值…hiredateDATEDEFAULTSYSDATE,…合法的值可以是字面值、表达式或SQL函数非法的值是另一个列的名称或虚拟列默认值的数据类型必须和列的数据类型匹配4.1.4引用其他用户的表属于其他用户而不属于当前用户的表需使用用户名作为表的前缀4.1.5Oracle的数据类型以下是Oracle数据类型的类别:数据类型字符数值日期时间RAW/LONGRAWLOB字符数据类型CHARVARCHAR2LONG当需要固定长度的字符串时,使用CHAR数据类型。CHAR数据类型存储字母数字值。CHAR数据类型的列长度可以是1到2000个字节。VARCHAR2数据类型支持可变长度字符串VARCHAR2数据类型存储字母数字值VARCHAR2数据类型的大小在1至4000个字节范围内LONG数据类型存储可变长度字符数据LONG数据类型最多能存储2GB4.1.5Oracle的数据类型数值数据类型–可以存储整数、浮点数和实数–最高精度为38位数值数据类型的声明语法:–NUMBER[(p[,s])]–P表示精度,S表示小数点的位数日期时间数据类型存储日期和时间值,包括年、月、日,小时、分钟、秒主要的日期时间类型有:–DATE-存储日期和时间部分,精确到整个的秒–TIMESTAMP-存储日期、时间和时区信息,秒值精确到小数点后6位4.1.5Oracle的数据类型RAW数据类型用于存储二进制数据RAW数据类型最多能存储2000字节LONGRAW数据类型用于存储可变长度的二进制数据LONGRAW数据类型最多能存储2GBLOBLOB称为“大对象”数据类型,可以存储多达4GB的非结构化信息,例如声音剪辑和视频文件等LOB数据类型允许对数据进行高效、随机、分段的访问BLOBCLOBBFILECLOB即CharacterLOB(字符LOB),它能够存储大量字符数据BLOB即BinaryLOB(二进制LOB),可以存储较大的二进制对象,如图形、视频剪辑和声音文件BFILE即BinaryFile(二进制文件),它用于将二进制数据存储在数据库外部的操作系统文件中4.1.5Oracle的数据类型4.1.5数据类型P50类型描述VARCHAR2(size)变长字符串(字符族):1~4000个字符CHAR(size)固定长度字符串(字符族)):1~2000个字符NUMBER(p,s)定点小数值,p为精度,s为标度(数字族)DATE日期和时间值(日期族)LONG可存放高达2GB的变长字符数据(字符族)CLOB字符大对象可存放高达4GB的变长单字节字符数据RAWandLONGRAW原始二进制数据BLOB二进制大对象可存放高达4GB二进制数据BFILE引用一个外部的二进制文件;可存放高达4GB数据P50表3-14.1.6查询数据字典列出当前用户的表列出当前用户不同的对象类型查询当前用户的表、视图、同义词及序列SQLSELECTtable_name2FROMuser_tables;SQLSELECTDISTINCTobject_type2FROMuser_objects;SQLSELECT*2FROMuser_catalog;4.1.7用子查询创建表--利用现有的表创建表在CREATETABLE语句的AS子句中使用子查询可以在创建表的同时插入数据所指定列的数量和类型必须和子查询中列的数量和类型相匹配–由列名和默认值定义列CREATETABLEtable[column(,column...)]ASsubquery;4.1.7使用子查询创建表NameNull?Type-----------------------------------------EMPNONOTNULLNUMBER(4)ENAMEVARCHAR2(10)ANNSALNUMBERHIREDATEDATESQLDESCRIBEdept30SQLCREATETABLEdept302AS3SELECTempno,ename,sal*12ANNSAL,hiredate4FROMemp5WHEREdeptno=30;表已创建。4.1.8ALTERTABLE语句使用ALTERTABLE语句可以:¯添加或删除一个列¯修改已存在的列¯为新列定义默认值ALTERTABLEtableADD(columndatatype[DEFAULTexpr][,columndatatype]...);ALTERTABLEtableMODIFY(columndatatype[DEFAULTexpr][,columndatatype]...);添加新列DEPT30EMPNOENAMEANNSALHIREDATE------------------------7698BLAKE3420001-MAY-817654MARTIN1500028-SEP-817499ALLEN1920020-FEB-817844TURNER1800008-SEP-81...“在DEPT30表中添加新列JOB”DEPT30EMPNOENAMEANNSALHIREDATE------------------------7698BLAKE3420001-MAY-817654MARTIN1500028-SEP-817499ALLEN1920020-FEB-817844TURNER1800008-SEP-81...JOBJOB新列添加新列使用ADD子句添加新列columns.EMPNOENAMEANNSALHIREDATEJOB-----------------------------------------7698BLAKE3420001-MAY-817654MARTIN1500028-SEP-817499ALLEN1920020-FEB-817844TURNER1800008-SEP-81...6rowsselected.SQLALTERTABLEdept302ADD(jobVARCHAR2(9));表已更改。新列成为表的最后一列修改列可以修改列的数据类型、长度及默认值改变列的默认值仅仅影响后来插入的新记录ALTERTABLEdept30MODIFY(enameVARCHAR2(15));--原来是VARCHAR2(10)表已更改。删除一列(Oracle8i以上版本)从数据表中删除一列至少还必须剩下一列ALTERTABLEdept30DROPCOLUMNename;--一次只允许删除一列表已更改。4.1.9删除表表中的所有数据和结构都被删除任何与该表相关的视图或同义词依然存在,但是却是不可用的任何悬而未决的事务都将被提交所有的索引被删除.不能回滚该语句只有表的创建者或具有DROPANYTABLE权限的用户才能删除表SQLDROPTABLEdept30;表已删除。4.1.10修改对象的名称要修改表、视图、序列或同义词的名称,可以使用RENAME语句您必须拥有对象的所有权.SQLRENAMEdept1TOdepartment;表已重命名。RENAMEold_nameTOnew_name;4.1.11截断表TRUNCATETABLE语句:¯删除表中所有记录¯释放该表的存储空间使用TRUNCATE移除后不能回滚–DELETE语句同样可以删除表中记录,但是它并不释放存储空间。SQLTRUNCATETABLEdepartment;表被截断。4.1.12给表或列添加注释使用COMMENT语句,可以为表或列添加注释(不超过2000字节)注释可以通过以下字典表查询¯ALL_COL_COMMENTS¯USER_COL_COMMENTS¯ALL_TAB_COMMENTS¯USER_TAB_COMMENTSSQLCOMMENTONTABLEemp2IS'EmployeeInformation';注释已创建。4.2约束描述主要的约束类型建立表的同时创建约束对已存在的表添加、删除约束禁用、启用约束什么是约束阻止无效数据进入表中约束在表一级实施强制规则约束可以阻止删除和其它表具有相关性的表以下是Oracle中有效的约束类型:¯NOTNULL¯UNIQUEKey¯CHECK¯PRIMARYKEY¯FOREIGNKEY值约束完整性约束约束准则给约束命名或者由Oreacle服务器产生一个形式为SYS_Cn的名称创建约束的方式:¯创建表的同时便创建约束¯表创建以后再创建约束在列或者表一级定义约束在数据字典中可以查询约束命名约束对于一个帐号,每个约束名必须是惟一的命名约束的约定格式:tablename_columnname_constrainttype如:emp_deptno_fk约束缩写PRIMARYKEYpkFOREIGNKEYfkUNIQUEukCHECKck或ccNOTNULLnn图普遍采用的约束的缩写表示定义约束CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][column_constraint],…[table_constraint]);CREATETABLEemp(empnoNUMBER(4),enameVARCHAR2(10),…deptnoNUMBER(7,2)NOTNULL,CONSTRAINTemp_empno_pkPRIMARYKEY(EMPNO));定义约束列约束级表约束级column[CONSTRAINTconstraint_name]constraint_type,column,...[CONSTRAINTconstraint_name]constraint_type(column,...),NOTNULL约束确保该列不允许存放空值EMPEMPNOENAMEJOB...COMMDEPTNO7839KINGPRESIDENT107698BLAKEMANAGER307782CLARKMANAGER107566JONESMANAGER20...NOTNULL约束(该列没有记录为NUILL)没
本文标题:4-Oracle数据定义语言(DDL)
链接地址:https://www.777doc.com/doc-7828 .html