版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章数据库基本概念1第一章数据库基本概念.pptx2第二章Oracle概述.pptx3第三章ORACLE体系结构.pptx4第四章表的设计、创建及维护.ppt5第五章数据完整性与约束.pptx6第六章数据操作.pptx7第七章基本SQL查询.pptx8第八章多表连接及子查询.pptx9第九章操作符及sql函数.ppt10第十章数据库对象.ppt11第十一章PLSQL简介.pptx12第十二章控制语句.pptx13第十三章游标管理.ppt14第十四章存储过程和函数.ppt15第十五章触发器.ppt16第十六章系统安全管理.ppt17第十七章数据备份与恢复.ppt18第十八章Oracle实战案例.ppt本章目标了解数据模型的概念。理解关系数据模型的三个要素。掌握数据库设计的主要步骤。掌握ER图的表示方法。理解联系的映射约束。2数据库相关概念数据(Data)是数据库的基本对象,是描述事物的符号记数据库(Database)就是存放数据的仓库。关系型数据库(RelationalDatabase,简称RDB)就是指基于关系模型的数据库数据库管理系统(DatabaseManagementSystem,简称DBMS)是科学组织和储存数据,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。关系型数据库管理系统(RelationalDatabaseManagementSystem,简称RDBMS),它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。3关系数据模型的三个要素数据结构数据操作方式完整性约束(integrityconstraint)4数据结构关系数据模型用于存储数据的逻辑结构是关系(relation)。关系是一个数学概念,是由元组(tuple)构成的集合,而元组具有若干属性(attribute)。直观上,可以把关系看作由行(row)和列(column)构成的表(table),行对应关系中的元组,列对应关系中的属性。5sidsname1第1学期2第2学期3第3学期4第4学期数据结构关系与表的区别关系是元组的集合。关系的属性没有从左到右的顺序,而表上的列一般有固定的顺序。关系的属性不能为多值,而表中的列可以是多值的。6数据操作方式关系模型的数据操作方式称为关系代数(relationalalgebra),主要由一系列针对关系的运算构成。包括5种基本运算。选择:返回由一个关系中满足指定条件的元组构成的另一个关系。即选出表中满足指定条件的行。映射:返回由一个关系中某些指定列中的值构成的另一个关系。即选择表中指定的列。积:两个关系的积返回一个关系,这个关系中的每一个元组由分别属于参与运算的两个关系中的元组合并而成。即两个表的行两两横向拼接。并:返回由两个关系中的元组构成的关系,这些元组或者属于一个关系,或者同时属于两个关系。即两个表的并集。差:两个关系的差返回一个关系,这个关系中的元组属于第一个关系却不属于第二个关系。7完整性约束(integrityconstraint)在关系模型中,一个元组的某些属性相比其他属性比较特殊,这些属性一般称为键(Key),包括三种形式。候选键:关系中能唯一地标识一个元组的最少的属性构成的集合。候选键可以有多个。主键:选择为唯一地标识关系中元组的候选键称为主键,一个关系中的主键只能有一个。外键:一个关系中,属性值要匹配于另一个关系(或自身)中的候选键的一个或多个属性的集合称为外键8完整性约束(integrityconstraint)在完整性约束在一定程度上保证数据库中的数据都是正确的。两种重要的约束实体完整性:主键属性不能允许空值。空值也称为null值,指其值不确定或不存在。引用完整性:外键的值或者为空,或者匹配于其引用的键值。9实体关系模型数据库设计是数据库应用开发的重要组成部分,构造ER图是需求分析完成后,进行数据库设计的开始,ER模型理论是构造ER图的根据。数据库设计的主要步骤:概念设计:概念设计的主要任务是根据需求分析的结果抽象出实际应用中的实体及联系,然后画出ER图。逻辑设计:逻辑设计的主要任务是把概念设计得到的ER图转化为表的结构,用到的知识主要是ER图中的联系转化为表的基本规则及范式理论。物理设计:物理设计的主要任务是在具体的DBMS上把逻辑设计得到的表实现,包括物理存储规划和创建合适的索引等任务。10实体关系模型ER模型的主要概念ER表示EntityRelationship。ER图又称为实体-联系图,也称为实体-联系模型,是一种可以应用于关系型数据库(但不限于关系型)概念设计的建模方法。实体是现实世界中可区别于其他对象的一个“事件”或一个“物体”,现实世界是由一系列的实体以及这些实体间的联系构成的,联系一般用一个动词表示。ER模型是一种自顶向下的数据库设计方法,从识别实体和实体间的关系开始,然后再标识实体及联系的属性及约束。11实体关系模型ER图使用实体-联系图(entity-relationshipdiagram)来建立数据模型。可以把实体-联系图简称为ER图。ER图中包含了实体(即数据对象)、关系和属性等3种基本成分。矩形框代表实体用连接相关实体的菱形框表示关系用椭圆形或圆角矩形表示实体(或关系)的属性,并用直线把实体(或关系)与其属性连接起来。12实体关系模型联系的映射约束映射约束的种类有以下三种:一对一一对多多对多—对一联系13实体关系模型联系的映射约束—对多联系多对多联系14数据库规范化数据库规范化(Normalization)的目的是减少或控制数据冗余(即不必要的数据副本)和避免数据异常。规范化规则分为以下常规形式:第一范式(1NF)第二范式(2NF)第三范式(3NF)15数据库规范化第一范式(1NF)规则一:它应该只有单个(原子)值的属性/列。表的每一列都应该是单值的,这意味着它们不应包含多个值。规则二:存储在列中的值应该属于同一个值域。在每列中,存储的值必须是相同类型或类型兼容。(对应列的属性和类型应该是相同的)规则三:属性/列的唯一名称。此规则要求表中的每个列都应具有唯一的名称。这是为了避免在检索数据或对存储的数据执行任何其他操作时的混淆。规则四:数据的存储顺序无关紧要。此规则表明在表中存储数据的顺序无关紧要16数据库规范化第二范式(2NF)应该满足第一范式。应该没有部分依赖。表中的属性仅依赖于主键的一部分而不是整个组合主键,这就是部分依赖关系要删除部分依赖关系,可以重新划分表,删除导致部分依赖的属性,并将其放到适合的其他表中。17数据库规范化第三范式(3NF)它应该是满足第二范式。它不应该具有传递依赖性。当非主键属性依赖于其他非主键属性,而不是依赖于主键,这是传递依赖。要删除传递依赖关系,可以重新划分表,删除导致传递依赖的属性,并将其放到适合的其他表中。18本章总结介绍了数据库的相关概念;关系数据库的数据模型;实体关系模型。数据库规范化的三范式,以及如何规范化数据使其满足三范式的要求。19谢谢!20Oracle概述本章目标了解Oracle12c数据库的新功能。掌握Oracle的安装和卸载方法。掌握客户端的使用方法。掌握使用SQLDeveloper创建和删除数据库的方法。22Oracle数据库简介Oracle数据库(OracleDatabase)又名OracleRDBMS(RelationalDatabaseManagementSystem)或简称Oracle是美国甲骨文公司的一款关系数据库管理系统。Oracle数据库系统是目前世界上最流行的关系数据库管理系统之一。23Oracle数据库简介Oracle数据库系统特点完整的数据管理功能:数据的大量性数据的保存的持久性数据的共享性数据的可靠性完备关系的产品:信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;保证访问的准则视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化数据物理性和逻辑性独立准则24Oracle数据库简介Oracle数据库系统特点分布式处理功能:Oracle数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个Oracle分布式数据库由Oraclerdbms、sql*Net、SQL*CONNECT和其他非Oracle的关系型产品构成。可移植性Oracle数据库有很好的跨平台性能,可以在Windows、Linux等多个操作系统平台上使用。25Oracle数据库简介Oracle12c的新功能增强PL/SQL的性能采用类似在匿名块中定义过程的方式,可以通过WITH语句在SQL中定义一个函数,提高SQL调用的性能。改善Defaults:包括序列作为默认值;自增列;当明确插入NULL时指定默认值;增加了多种数据类型长度:VARCHAR2、NVARCHAR2和RAW类型的长度达到32K。添加对TOPN的语句处理:在SELECT语句中使用“FETCHnextNrows”或者“OFFSET”,可以指定前N条或前百分之多少的记录。26Oracle数据库简介Oracle12c的新功能行模式匹配:在行间进行匹配判断并进行计算,实现类似分析函数的功能。在SQL中新的模式匹配语句是“MATCH_RECOGNIZE”。分区优化:多个分区同时操作、异步全局索引维护、部分本地和全局索引。数据优化:新增了ILM(数据生命周期管理)功能,添加了“数据库热图”(Databaseheatmap)。OraclePluggableDatabase:OraclePDB体系结构由一个容器数据库(CDB)和多个可组装式数据库(PDB)构成,PDB包含独立的系统表空间和SYSAUX表空间等。27
Oracle安装和卸载下载Oracle12cR1forMicrosoftWindows(x64)从Oracle官网下载Oracle12CR1数据库软件:winx64_12102_database_1of2.zipwinx64_12102_database_2of2.zip解压winx64_12102_database_1of2.zip到指定文件夹下如:database;解压winx64_12102_database_2of2.zip到database\stage\Components下。28Oracle安装和卸载Oracle安装过程运行setup.exe配置安全更新选择安装选项创建和配置数据库仅安装数据库软件升级现有数据库选择安装的系统类型:桌面或服务器指定Oracle主目录用户典型安装与配置检查安装环境安装29Oracle安装和卸载选择“口令管理”,配置管理员口令以下用户普通管理员:SYSTEM超级管理员:SYS口令也是需要符合Oracle口令规范(要求:大、小写字母+数字的组合,长度不小于8)。30Oracle安装和卸载Oracle安装完成后,会在windows系统中注册服务。主要有以下2个服务:OracleOraDB12Home1TNSListener:表示监听服务,如果客户端要想连接到数据库,此服务必须启动。OracleServiceORCL:表示数据库的主服务,命名规则:OracleService数据库名称。此服务必须启动,否则Oracle根本无法使用。31Oracle安装和卸载卸载运行Oracle的卸载工具。Oracle提供了卸载工具deinstall.bat来卸载一个独立的Oracle数据库安装,它位于在Oracle_HOME\deinstall文件夹中。根据提示提供有关服务器的信息,卸载工具会停止Oracle软件运行,并删除操作系统上针对Oracle主目录的Oracle软件和配置文件。删除Oracle相关注册信息。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\,删除该路径下的所有以Oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务。HKEY_LOCAL_MACHINE\SOFTWARE\Oracle,删除该Oracle目录,该目录下注册着Oracle数据库的软件安装信息。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除注册表的以Oracle开头的所有项目。32Oracle的客户端Oracle的客户端工具有:SQL*plus、OracleSQLDeveloperWeb版的企业管理器EMDatabaseExpress(地址:https://localhost:5500/em)。33Oracle的客户端SQL*plusOracle的命令行方式的客户端可以执行的三种命令:SQL语句PL/SQL语句SQL*plus语句34Oracle的客户端SQL*plus实例1:启动SQL*plus,并以system用户的身份连接Oracle数据库在“开始”菜单中的“Oracle-OraDB12Home1”文件夹下,单击“SQLPlus”。在“请输入用户名:”的提示下,输入:system/managerassysdba。实例2:创建用户语法:CREATEUSERC##用户名IDENTIFIEDBY用户口令示例:CreateuserC##testorcuserindentifybyroot35Oracle的客户端OracleSQLDeveloper工具OracleSQLDeveloper是一个免费的集成开发环境,简化了传统部署和云部署中Oracle数据库的开发和管理。主要功能:创建连接浏览对象创建对象修改对象查询和更新数据导出数据和DDL以及导入数据模式复制和比较过程命令编辑PL/SQL运行和调试PL/SQL运行和创建报表36Oracle的客户端OracleSQLDeveloper工具37Oracle的客户端OracleSQLDeveloper工具在主界面的左侧的连接管理窗口中,可以实现如下功能:创建和测试连接:针对多个数据库、针对多种模式存储经常使用的连接导入和导出连接存储口令或在连接时提示38Oracle的客户端OracleSQLDeveloper工具浏览对象基于树的对象浏览器,将对象按类型分组。对于每个对象类型,可以应用筛选器来限制显示。包括:表、视图、索引、程序包、过程、函数、触发器、类型、序列、同义词等等。特定于每个对象类型的选项卡式详细信息显示在窗口的右边。39Oracle的客户端OracleSQLDeveloper工具创建对象为每个支持的对象类型创建对话框,并支持外部表、索引编排表、临时表和分区表等。40Oracle的客户端OracleSQLDeveloper工具修改对象大多数对象都具有一般编辑对话框,并且可以通过右键单击调用上下文菜单来进行特定修改。41Oracle的客户端OracleSQLDeveloper工具查询和更新数据使用查询创建器可以通过拖放操作快速创建SQL查询、选择表以及通过单击鼠标选择列。42创建和删除数据库Oracle数据库提供了DatabaseConfigurationAssistant(以下简称DBCA)实用工具来创建新的数据库,配置或删除已存在的数据库,该工具采用图形界面,以向导的方式提示用户一步一步来完成数据库的创建、配置和删除等操作。43创建和删除数据库创建数据库有两种方式:使用DatabaseConfigurationAssistant(DBCA)图形化工具。使用CREATEDATABASE语句。建议使用DBCA工具方式。44创建和删除数据库创建数据库运行DBCA:单击“开始”-“Oracle-OraDB12Home1”-“DatabaseConfigurationAssistant”或者在命令提示符下输入:DBCA选择“创建数据库”选项,输入参数:45参数
说明全局数据库名指定全局数据库名。存储类型将存储类型选为“文件系统”或“Oracle自动存储管理(OracleASM)”。数据库文件位置指定数据库文件的位置
快速恢复区指定快速恢复区。管理口令指定数据库的管理(例如SYS和SYSTEM账户)口令。输入的口令应当符合Oracle建议的标准,即口令的长度至少应为8个字符,并且口令必须至少包含一个大写字符,一个小写字符和一个数字。Oracle口令用户“OracleHomeUser”密码(仅限MicrosoftWindows操作系统)。如果在安装过程中指定了一个非管理员,低权限的Windows用户账户(作为OracleHomeUser)来运行数据库服务,则会提示输入该用户账户的密码。创建为容器数据库如果要创建容器数据库,请选择此选项。启用此选项将数据库创建为多租户容器数据库(CDB),可以支持零个,一个或多个用户创建的可插拔数据库(PDB)。插接式数据库名指定插接式数据库名。启用数据库合并此模式用于创建合并数据库,可以将插接式数据库与其相关联。仅当安装的Oracle主目录已启用数据库合并选项时,才能使用此选项。可以在典型和高级模式下创建合并数据库。
创建和删除数据库创建数据库创建数据库完成后,单击“口令管理…”,可以锁定或解锁数据库账户,更改账户的默认口令。单击“关闭”,完成数据库的创建。46创建和删除数据库删除数据库注意:删除数据库将把数据库的数据及其所有对象一并删除,并且无法恢复,请谨慎操作。运行DatabaseConfigurationAssistant(DBCA),选择“删除数据库”选项47创建和删除数据库删除数据库在删除数据库列表,选择要删除的数据库。如果用户ID未经过操作系统验证,那么请输入具有SYSDBA权限的数据库用户名和口令。48创建和删除数据库删除数据库在要删除的数据库概要页面,单击“完成”后,显示确认信息窗口。单击“是”,开始删除数据库操作。单击“否”,取消删除数据库操作。49本章总结Oracle数据库的历史及Oracle12c的新特性Oracle数据库的安装工具以及安装和卸载的过程;介绍了Oracle数据库的客户端工具SQL*plus和SQLDeveloper的使用方法;使用DBCA实用工具来创建和删除数据库。50谢谢!51第3章Oracle体系结构知识点回顾认识一下ORACLEORACLE的安装sqlplus工具的使用PL/SQLDEVELOPER工具简单使用53本章目标理解与oracle相关的RDBMS体系结构理解oracle实例结构理解oracle数据库的结构掌握结构化查询语言(sql)的概念及分类掌握创建新用户的方法,并授予权限和角色54Oracle数据库简介Oracle是关系型数据库管理系统(RDBMS)在管理信息系统、企业数据处理、因特网及电子商务等领域使用非常广泛在数据安全性与数据完整性控制方面性能优越跨操作系统、跨硬件平台的数据互操作能力55Oracle数据库简介基于客户机/服务器(C/S)技术客户机-用户和数据库之间的接口服务器-存储和管理数据请求响应网络服务器数据库服务器对数据库表进行最佳管理,处理多个客户端对同一数据的并发访问。全面地保持数据完整性,并控制数据库访问权限等安全性需求56Oracle体系结构数据库的体系结构是指数据库的组成、工作过程与原理,以及数据在数据库中的组织与管理机制Oracle服务器提供开放、全面和综合的信息管理,它由Oracle数据库和Oracle实例组成Oracle服务器Oracle数据库Oracle
实例Oracle数据库是一个数据的集合,该集合被视为一个逻辑单元管理数据库的后台进程和内存结构的集合称为Oracle实例
57Oracle主要组件实例内存结构后台进程
PMONSMONDBWRLGWRCKPT其他
数据库数据文件数据文件数据文件控制文件控制文件日志文件日志文件参数文件归档日志文件口令文件SGA用户进程服务器进程PGA共享池数据缓冲区日志缓冲区58Oracle实例Oracle实例是后台进程和内存结构的集合Oracle实例系统全局区后台进程分配启动59Oracle数据库Oracle数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区Oracle数据库包括逻辑结构和物理结构物理结构逻辑结构Oracle数据库物理结构包含数据库中的一组操作系统文件。逻辑结构指数据库创建之后形成的逻辑概念之间的关系60Oracle中数据库和实例的关系对于第一次接触“实例”和“数据库”的人来说,容易把二者混淆。实例是“内存”和“后台进程”的集合。数据库是数据的物理存储。特别注意,一个实例可以用于一个数据库,多个实例也可以同时用于一个数据库。举个例子,如果把数据库比作一架飞机,实例就是飞机的发动机。那么,一台发动机可以驱动飞机,两台发动机也可以同时驱动一架飞机。61Oracle物理组件物理组件就是Oracle数据库所使用的操作系统物理文件。物理文件可分为三类:物理组件数据文件控制文件日志文件日志文件记录对数据库的所有修改信息,用于故障恢复。控制文件是记录数据库物理结构的二进制文件。数据文件用于存储数据库数据,如表、索引数据等。62Oracle逻辑组件数据库的逻辑结构是从逻辑的角度分析数据库的组成。Oracle的逻辑组件包括:数据库表空间段区数据块
模式63Oracle逻辑组件
表空间表空间是数据库中最大的逻辑单位,一个Oracle数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。表空间的大小等于构成该表空间的所有数据文件大小之和。Oracle
数据库中的典型表空间是:SYSTEM
表空间、DATA
表空间、USER
表空间、TOOLS
表空间、TEMP表空间64Oracle逻辑组件
表空间数据库的控制空间分配(例如表和索引)为数据库用户设置空间配额备份或恢复数据数据库、表空间和数据文件的关系65Oracle逻辑组件段段是构成表空间的逻辑存储结构,段由一组区组成。按照段所存储数据的特征,将段分为四种类型,即数据段、索引段、回退段和临时段。区区为段分配空间,它由连续的数据块组成。当段中的所有空间已完全使用时,系统自动为该段分配一个新区。区不能跨数据文件存在,只能存在于一个数据文件中。数据块数据块是Oracle服务器所能分配、读取或写入的最小存储单元。Oracle服务器以数据块为单位管理数据文件的存储空间。模式模式是对用户所创建的数据库对象的总称。模式对象包括表、视图、索引、同义词、序列、过程和程序包等。66数据块数据区间------------------------------------------------------------------------数据段------------------------------------------------------------------------逻辑对象------------------------------------------------------------------------表空间------------------------------------------------------------------------数据库------------------------------------------------------------------------Oracle逻辑组件Oracle数据库表空间表空间表空间表索引视图……数据段数据段索引段临时段回滚段数据区间数据区间数据块数据块Oracle数据库的逻辑结构……Oracle数据库由若干个表空间组成,表空间由表组成,表由段组成,段由区间组成,区间则由数据块组成。67Oracle逻辑组件
方案方案是一组数据库对象的集合。在创建用户的时候,会同时生成一个与用户同名的方案,此方案归同名用户所有。方案对象直接处理数据库数据的逻辑结构,例如表(table)、视图(view)、索引(index)和簇(Clusters)等。表空间和方案的关系:同一方案中的对象可以存储在不同的表空间中。表空间可以存储不同方案中的对象。68Oracle逻辑组件
模式和模式对象一个模式(schema)为模式对象(scehmaobject)的一个集合,每一个数据库用户对应一个模式。模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表、视图、索引、聚集、序列、同义词、数据库链、过程和包等结构。模式对象是逻辑数据存储结构,每一种模式对象在磁盘上都有一个相应文件存储其信息。一个模式对象逻辑地存储在数据库的一个表空间中,每一个对象的数据物理地包含在表空间的一个或多个数据文件中。69会话会话是用户与Oracle服务器的单个连接当用户与服务器建立连接时创建会话当用户与服务器断开连接时关闭会话70启动Oracle实例创建用户进程创建服务器进程提交SQL查询
使用SQL*PIUS连接至数据库Oracle
默认用户只有用合法的用户帐号才能访问Oracle数据库Oracle有几个默认的数据库用户
Oracle
默认用户SYSSYSTEMSCOTTSCOTT用户是Oracle数据库的一个示范帐户,在数据库安装时创建SYSTEM
是默认的系统管理员,该用户拥有Oracle管理工具使用的内部表和视图。通常通过SYSTEM用户管理数据库用户、权限和存储等数据库中所有数据字典表和视图都存储在SYS模式中。SYS用户主要用来维护系统信息和管理实例。71Oracle的结构化查询语言(SQL)及工具SQL(StructuredQueryLanguage)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。PL/SQL语言SQL语言的扩展PL/SQL语言SQL*Plus:输入、编辑、存储、检索和运行SQL命令以及PL/SQL块的工具第三方工具:pl-sqldeveloper72工具演示演示sqlplus工具的使用演示plsqldeveloper工具的使用73SQL语言的类别
数据定义语言(DDL)CREATE命令ALTER命令DROP命令TRUNCATE命令数据操纵语言(DML)INSERTSELECTUPDATEDELETE数据控制语言(DCL)GRANTREVOKE事务处理和数据控制命令(TCL)COMMITROLLBACK74创建新用户要连接到Oracle数据库,就需要创建一个用户账户每个用户都有一个默认表空间和一个临时表空间CREATEUSER命令用于创建新用户CREATEUSER命令的语法是:
CREATEUSERusernameIDENTIFIEDBYpassword[DEFAULTTABLESPACEtablespace][TEMPORARYTABLESPACEtablespace];
CREATEUSERdavidIDENTIFIEDBYdavidpassDEFAULTTABLESPACE
USERSTEMPORARYTABLESPACETEMP75创建一个名称为david的用户,其密码为davidpass授予权限3-1权限指的是执行特定命令或访问数据库对象的权利权限有两种类型,系统权限和对象权限系统权限允许用户执行某些数据库操作,如创建表就是一个系统权限对象权限允许用户对数据库对象(如表、视图、序列等)执行特定操作角色是一组相关权限的组合,可以将权限授予角色,再把角色授予用户,以简化权限管理76授予权限3-2GRANT命令可用于为用户分配权限或角色
77
connect角色允许用户连接至数据库,并创建数据库对象Grantconnecttodavid;GrantRESOURCEtodavid;Grantcreatesequencetodavid;
resource角色允许用户使用数据库中的存储空间
此系统权限允许用户在当前模式中创建序列,此权限包含在connect角色中授予权限3-3授予用户david操作test表对象的权限78Grantselectontesttodavid;允许用户查询test表中的记录Grantupdateontesttodavid;允许用户更新test表中的记录Grantallontesttodavid;允许用户插入、删除、更新和查询test表中的记录更改和删除用户aalteruseR命令可用于更改口令
DROPUSER命令用于删除用户79alteruseRDAVIDIDENTIFIEDBYdavidpassword;修改DAVID用户的密码DROPuseRDAVIDCASCADE;删除DAVID用户模式总结ORACLE服务器包含:ORACLE数据库和ORACLE实例数据库有下面两类组件:物理组件和逻辑组件。物理组件是操作系统文件,有下面三种类型:数据库
文件或数据文件、控制文件、恢复日志文件逻辑组件决定数据库中物理空间的使用,它包括:表空
间、段、数据区、块以及模式对象。结构化查询语言(sql)的概念及分类创建新用户,并授予权限和角色80谢谢!81第4章表的设计、创建及维护知识点回顾Oracle服务器包括:oracle数据库和oracle实例Oracle实例结构Oracle数据库的物理组件和逻辑组件结构化查询语言(sql)及分类创建新用户,并授予权限和角色83本讲目标了解Oracle数据类型掌握表的设计及创建掌握数据定义语言的使用84SQL简介2-1SQL是StructuredQueryLanguage(结构化查询语言)的首字母缩写词SQL是数据库语言,Oracle使用该语言存储和检索信息表是主要的数据库对象,用于存储数据通过SQL可以实现与Oracle服务器的通信SELECTenameFROMEmp;发送SQL查询Oracle服务器enameBLAKESMITHALLENDAVIDMARTIN发送命令输出到用户端用户85SQL简介2-2SQL支持下列类别的命令:数据定义语言(DDLDataDefinitionLanguage)数据操纵语言(DMLDataManipulationLanguage)事务控制语言(TCLTransactionControlLanguage)数据控制语言(DCLDataControlLanguage)数据定义语言CREATEALTERDROP数据操纵语言INSERTSELECTDELETEUPDATE事务控制语言COMMITSAVEPOINTROLLBACK数据控制语言GRANTREVOKE86Oracle数据类型5-1创建表时,必须为各个列指定数据类型以下是Oracle数据类型的类别:数据类型字符数值日期时间RAW/LONGRAWLOB87Oracle数据类型5-2字符数据类型CHARVARCHAR2LONG当需要固定长度的字符串时,使用CHAR数据类型。CHAR数据类型存储字母数字值。CHAR数据类型的列长度可以是1到2000个字节。VARCHAR2数据类型支持可变长度字符串VARCHAR2数据类型存储字母数字值VARCHAR2数据类型的大小在1至4000个字节范围内LONG数据类型存储可变长度字符数据LONG数据类型最多能存储2GB88Oracle数据类型5-3数值数据类型可以存储整数、浮点数和实数最高精度为
38位数值数据类型的声明语法:NUMBER[(p[,s])]P表示精度,S表示小数点的位数日期时间数据类型存储日期和时间值,包括年、月、日,小时、分钟、秒主要的日期时间类型有:DATE-存储日期和时间部分,精确到整个的秒TIMESTAMP-存储日期、时间和时区信息,秒值精确到小数点后6位89Oracle数据类型5-4RAW数据类型用于存储二进制数据RAW数据类型最多能存储2000字节LONGRAW数据类型用于存储可变长度的二进制数据LONGRAW数据类型最多能存储2GBLOBLOB称为“大对象”数据类型,可以存储多达4GB的非结构化信息,例如声音剪辑和视频文件等LOB数据类型允许对数据进行高效、随机、分段的访问BLOBCLOBBFILECLOB即CharacterLOB(字符LOB),它能够存储大量字符数据BLOB即BinaryLOB(二进制LOB),可以存储较大的二进制对象,如图形、视频剪辑和声音文件BFILE即BinaryFile(二进制文件),它用于将二进制数据存储在数据库外部的操作系统文件中90Oracle数据类型5-5Oracle中伪列就像一个表列,但是它并没有存储在表中伪列可以从表中查询,但不能插入、更新和删除它们的值常用的伪列有ROWID和ROWNUMROWID是表中行的存储地址,该地址可以唯一地标识数据表中的一行,可以使用ROWID伪列快速地定位表中的一行ROWNUM是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数91数据定义语言数据定义语言用于改变数据库结构,包括创建、更改和删除数据库对象用于操纵表结构的数据定义语言命令有:CREATETABLEALTERTABLETRUNCATETABLEDROPTABLE92表的创建和维护用来创建和修改数据库表的命令被称为“数据定义语言”(DataDefinitionLanguage,DDL)命令。这些命令实际上是专门用来创建或修改数据库对象的SQL命令。93表设计3-1首先表的名称并确定结构;确定哪些列将包含在这个表中,确定任何字符或数字列所需要的宽度在Oracle中命名表和列时的规则:表和列的名称最多可以达到30个字符长,而且必须以一个字母开始,这个限制只适合于表或列的名称,而不适合用于一列中的数据量。表和列名称中允许数字,下划线(_)和数字符号(#),但是不能在表和列名称中包含任何空格。用户拥有的每一个表应该具有一个唯一的表名称,而且每一个表中的列名称也应该是唯一的不能使用Oracle“保留字”,例如:SELECT,DISTINCT,CHAR和NUMBER等。94表设计3-2确定了表的内容,可以创建列了,必须完成为每一列选择一个名称确定每一列将存储的类型。确定(在某些情况下)列的最大宽度95表设计3-3在选择列名称之前,先看一下数据类型以及他们的默认值Oracle数据类型数据类型说明VARCHAR2(n)长度可变的字符数据,其中n表示这个列的最大长度,最大大小是4000个字符。这种数据类型没有默认大小,必须指定一个最小值。例子:VARCHAR2(9),最多可以包含9个字母、数字或符号CHAR(n)长度固定的字符,其中n表示列的长度,默认大小是1,最大大小是2000个字符。例子:CHAR(9)可以包含9个字母,数字或符号,但是输入的字符少于9个,则会向右边添加空格,使数据达到9个字符的长度。NUMBER(p,s)数字列,其中p表示精度(或小数右边和左边的总位数),最大值是38位NUMBER(7,2)DATE日期类型,默认的格式“DD-MM-YY”,可以使用TO_CHAR格式显示日期其他元素LONG最多存储2G的长度可变的字符数据CLOB用于最多4GB的单字节字符数据RAW(n)最多存储2000字节的原始二进制数据。LONGRAW最多2GB的未结构化数据BLOB最多可存储4GB的未结构化数据BFILE存储了操作系统存储的一个二进制文件的文件定位器TIMESTAMPDATE的数据扩展,不需要TO_CHAR函数就可引用时,分,秒INTERVAL用来确定特定的时间间隔或时间量96创建表关键字“CREATETABLE”指示Oralce创建一个表。可以包括可选的schema(架构),表示谁将“拥有”要创建的这个表,例如:如果创建这个表的用户也就是这个将要拥有这个表的人,那么可以忽略架构,将默认采用当前的用户名。另一方面,如果使用用户名为DRAKE为某个人创建了ACCTMANAGER表,那么架构和表名称将属于DRAKE的架构,而不是属于你的架构。数据库对象的所有者有权在对象上执行这些操作。要想为其他人的架构创建一个表(也就是其他人拥有的表),你必须具有对那个用户的架构使用CREATETABLE命令的权限。CREATETABLE[schema]tablename(columnnamedatatype[DEFAULTvalue],columnnamedatatype[DEFAULTvalue],…);97定义列一个表最多可以包含1000列。CREATETABLEacctmanager(amidVARCHAR2(4),amnameVARCHAR2(20),amedateDATEDEFAULTSYSDATE,regionCHAR(2));创建表的时候允许向列分配一个默认值。默认值是用户没有在列中输入内容情况,Oracle自动存储的值。表名虽然是以小写字母输入,但ORACLE会在处理命令时自动转为大写。将表名与列名取小写字母为了与Oracle关键字区别。由于创建表的用户就是这个表的拥有者,所以省略架构名。amedate分配了一个默认值SYSDATE,表明如果用户输入新的销售经理信息,而没有包括这个人的聘用时间时,则oracle服务器会插入当前日期。注意:如果定义amedate为空,则会生成一个错误。执行了命令之后,只是创建了表结构,并没有数据。能够执行CREATETABLE命令必须有这个权限,如果没有要求管理员授予。98查看表结构:DESCRIBEDESCRIBEtablename用来显示表的结构注意:DESCRIBE是sql*plus的命令而不是SQL命令。命令的简写DESC结果中列出了定义的列和数据类型,还显示了这一列是否为空,也就是是否允许NULL值,注意:amid如果定义为了主键,则会显示NOTNULL,在讲约束的时候会讲到。99通过子查询创建表创建一个包含现有表的数据的表,可以使用CREATETABLE命令并包括一个包含子查询的AS子句。CREATETABLEtablename[(columnname,…)]AS(subquery);CREATETABLEsecustomerordersAS(SELECTcustomer#,state,ISBN,Category,quantity,cost,retailFROMcustomersNATURALJOINordersNATURALJOINOrderitemsNATURALJOINbooksWHEREstateIN('FL','GA','AL'));100修改现有表对表结构进行更改:添加一列,删除一列,更改列的大小通过ALTERTABLE命令来来实现ORACLE的特性:可以修改表而不必关闭数据库,即使用户正在访问这个表,仍然可以修改这个表而不必中断服务。
ALTERTABLEtablenameADD|MODIFY|DROPCOLUMN|coloumnname[definition];101ALTERTABLE…ADD命令示例:acctmanager表中添加电话分机号码ALTERTABLEtablenameADD(columnnamedatatype,[DEFAULT]…);ALTERTABLEacctmanagerADD(extNUMBER(4));102ALTERTBALE…MODIFY命令对列进行的更改包括:更改一列的大小(增加或减小)更改数据类型更改或添加一列的默认值ALTERTABLEtablenameMODIFY(columnnamedatatype,[DEFAULT]…);103ALTERTBALE…MODIFY命令修改这个表的时候要注意三个规则:1.一列必须与它已经包含的数据字段一样宽。(例如:假设已经将一个列定义为15个字符宽的VARCHAR2数据类型,但是,这个特定列中的最大项目只包含12个字符,因此你只能将这一列的大小减小到12个字符宽。)示例:customers表lastname列最大项字符是8,减小到6要报错ALTERTABLEcustomersMODIFY(lastnameVARCHAR(6));104ALTERTBALE…MODIFY命令2.如果一个NUMBER列已经包含了数据,那么你不能降低这一列的精确度或小数位数。ALTERTABLEbooksMODIFY(costNUMBER(4,2));105ALTERTBALE…MODIFY命令3.更改一列的默认值不会更改表中已经存在的数据值。ALTERTABLEacctmanagerMODIFY(extDEFAULT1200);同时更改多列ALTERTABLEacctmanagerMODIFY(extDEFAULT1200,amnamevarchar2(25));106ALTERTABLE…DROPCOLUMN命令使用该命令可以从一个表中删除现有列注意:因为该子句将删除列及其内容,所以使用要格外小心ALTERTABLEtablenameDROPCOLUMNcloumnname;107ALTERTABLE…DROPCOLUMN命令使用DROPCOLUMN子句时,记住以下几点:与带有ADD或MODIFY的子句的ALTERTABLE命令不同,DROPCOLUMN子句只能引用一个列。如果从表中删除一列,那么删除将是永久的,如果不小心从表中错误地删除了列,那么你不能“取消”这种损坏,唯一的选择是将这一列重新添加到表中,然后手工重新输入以前包含的所有数据。你不能删除表中剩余的最后一列,如果一个表只包含一列并且你尝试删除这一列,那么这个命令将会失败,将返回一个出错消息。108ALTERTABLE…DROPCOLUMN命令继续删除ALTERTABLEacctmanagerDROPCOLUMNext;ALTERTABLEacctmanagerDROPCOLUMNREGION;ALTERTABLEacctmanagerDROPCOLUMNAMEDATE;ALTERTABLEacctmanagerDROPCOLUMNAMNAME;ALTERTABLEacctmanagerDROPCOLUMNAMID;109ALTERTABLE…SETUNUSED/DROPUNUSEDCOLUMNS命令当Oracle服务器从一个非常大的表中删除一列时,这将降低用户的查询或其他SQL命令的处理速度,为了避免这种问题,可以在ALTERTABLE命令中包括SETUNUSED子句,将这一标记记为以后再删除.如果将一列标记为删除,那么这一列就是标记为不可用的,它不会显示在表结构中。因为这一列是不可用的,所以它也不会出现在任何查询的结果中,也不能在这一列上执行除了ALTERTABLE…DROPUNUSED命令之外的其他任何操作。换句话说,将一列设置为“unused”(不使用)之后.这一列及其所有的内容都将无法使用,以后也不能恢复它。这是推迟从存储设备中物理清除数据——通常推迟到服务器正在处理的查询很少时,例如在营业时间之后。ALTERTABLE命令使用DROPUNUSED子句来完成已经标记为“不使用”的任何列的删除过程。110ALTERTABLE…SETUNUSED/DROPUNUSEDCOLUMNS命令ALTERTABLEtablenameSETUNUSED(columnname);或者ALTERTABLEtablenameSETUNUSEDCOLUMNcolumnname;ALTERTABLEtablenameDROPUNUSEDCOLUMNS;删除已经设置为“不使用”的任何列,而且可以使用这些列中包含的数据以前所占用的任何存储空间111ALTERTABLE…SETUNUSED/DROPUNUSEDCOLUMNS命令示例:ALTERTABLEacctmanagerSETUNUSED(region);ALTERTABLEacctmanagerDROPUNUSEDCOLUMNS;112重命名表RENAMEoldtablenameTOnewtablename;Oracle允许使用RENAME…TO命令更改你所拥有的任何表的名称在一个组织工作中,不要更改其他用户访问的表的名称,除非你事先通知了他们新的表的名称RENAMEacctmanagerTOacctman;113截断表在截断一个表时,表中包含的所有行都将被删除,但表本身将会保留,换句话说,列依然存在,只是其中没有存储值。实际上与删除一个表中的所有行是相同的,但是,如果只是删除一个表中的所有行,那么这些行多占用的存储空间仍然是分配给这个表的。要想删除存储在一个表中的行并释放这些行所占有的存储空间,可以使用TRUNCATETABLE命令。TRUNCATETABLEtablename;114删除表DROPTABLEtablename;删除时一定要非常小心,删除一个表之后,表及它所包含的所有数据都将丢失,这个表所创建的任何索引也将删除,索引后面讲解。DROPTABLEacctman;115总结建表时常用的数据类型表的设计及创建掌握数据定义语言的使用create..alter…drop…116谢谢!117第5章数据完整性与约束本章目标掌握约束的主要作用。掌握常用约束的使用方式。掌握操作约束的方法。119数据完整性概念数据完整性可以帮助确保存储在数据库中数据的准确性、有效性和正确性。数据完整性控制可被视为判断数据有效与否的规则。120实现数据完整性的方法Oracle数据库有五种类型的约束主键约束(primarykey):将非NULL约束与单个声明中的唯一约束结合在一起。它禁止多行在同一列或列的组合中具有相同的值,并禁止值为null。外键约束(foreignkey):要求一个表中的值与另一个表中的值相匹配。唯一约束(unique):禁止多行在同一列或列的组合中具有相同的值,但允许某些值为null。检查约束(check):要求数据库中的值符合指定条件。非空约束(NOTNULL):禁止将数据库中的值为空(null)。121实现数据完整性的方法定义约束两种方式:作为单个列或属性的定义的一部分。这称为列级约束。作为表定义的一部分。这称为表级约束说明:只有非空约束(NOTNULL)必须在列级声明。其他约束声明在列级或表级都可以。122实现数据完整性的方法创建约束的子句CREATETABLEALTERTABLECREATEVIEWALTERVIEW在Oracle数据库中,可以在视图(View)上创建视图约束。但通常通过基表上的约束对视图实施约束。123实现数据完整性的方法创建约束的子句CREATETABLEALTERTABLECREATEVIEWALTERVIEW在Oracle数据库中,可以在视图(View)上创建视图约束。但通常通过基表上的约束对视图实施约束。只能在视图上指定唯一、主键和外键约束,并且仅在禁用NOVALIDATE模式下使用。124实现数据完整性的方法创建列级约束的语法125实现数据完整性的方法创建表级约束的语法126oracle中常用约束的用法主键约束在主键约束中,受约束的一个列或多个列组合中的值唯一标识行。每个表都有一个主键,确保不存在重复行。一个表或视图有且只有一个主键作用:在指定列或一组列中,没有两行具有重复值。主键列不允许空值。127oracle中常用约束的用法主键约束实例:创建locations_demo表,并在location_id列上定义并启用主键约束128CREATETABLElocations_demo(location_idNUMBER(4)CONSTRAINTloc_id_pkPRIMARYKEY,street_addressVARCHAR2(40),postal_codeVARCHAR2(12),cityVARCHAR2(30),state_provinceVARCHAR2(25),country_idCHAR(2));oracle中常用约束的用法主键约束也可以创建表级主键约束:129CREATETABLElocations_demo(location_idNUMBER(4),street_addressVARCHAR2(40),postal_codeVARCHAR2(12),cityVARCHAR2(30),state_provinceVARCHAR2(25),country_idCHAR(2),CONSTRAINTloc_id_pkPRIMARYKEY(location_id));oracle中常用约束的用法主键约束实例:在样例表sales创建列prod_id和cust_id复合的主键130ALTERTABLEsalesADDCONSTRAINTsales_pkPRIMARYKEY(prod_id,cust_id)DISABLE;CONSTRAINT子句还可以按以下方式使用:不定义约束名称,由Oracle为约束生成一个名称。在定义约束时,使用disable子句,表示不启用它。oracle中常用约束的用法外键约束当两个表包含一个或多个公共列时,Oracle数据库可以通过外键约束(也称为参照完整性约束)强制两个表之间的关系.外键约束要求对于定义约束的列中的每个值,必须与引用表中指定的列的值匹配。131oracle中常用约束的用法外键约束外键约束相关的概念:外键:外键约束定义中的引用了其他表的的列或列集,一般是其他表的主键列。引用键:外键引用的其他表的唯一键或主键。从表或子表:包含外键的表。此表的值依赖于引用表的唯一或主键中存在的值。引用表或父表:由子表的外键引用的表。此表的引用键确定子表中是否允许特定的插入或更新。132oracle中常用约束的用法外键约束自引用外键约束引用同一表中列的外键。空值和外键在关系模型中,外键的值与引用的主键值匹配,或者为null。133oracle中常用约束的用法外键约束引用键修改。修改或删除引用键时,外键约束可以指定要在子表的从属行上执行的下列操作:无操作:在正常情况下,如果结果违反引用完整性,则用户无法修改引用的键值。 级联删除:当删除包含引用的键值的行时,删除级联(使用DELETECASCADE子句),导致具有从属外键值的子表中的所有行也被删除。删除时设置为null:当删除包含引用的键值的行时,删除设置为null(使用DELETESETNULL子句),从而导致子表中引用外键值的所有行的值设置为null。134oracle中常用约束的用法外键约束实例:创建dept_20表,并在department_id列上定义引用departments表主键department_id列的外键约束,并启用.135CREATETABLEdept_20(employee_idNUMBER(4),last_nameVARCHAR2(10),job_idVARCHAR2(9),manager_idNUMBER(4),hire_dateDATE,salaryNUMBER(7,2),commission_pctNUMBER(7,2),department_idCONSTRAINTfk_deptnoREFERENCESdepartments(department_id));oracle中常用约束的用法外键约束实例:创建dept_20表,定义并启用两个外键约束,并使用ONDELETE子句:136CREATETABLEdept_20(employee_idNUMBER(4)PRIMARYKEY,last_nameVARCHAR2(10),job_idVARCHAR2(9),manager_idNUMBER(4)CONSTRAINTfk_mgrREFERENCESemployeesONDELETESETNULL,hire_dateDATE,salaryNUMBER(7,2),commission_pctNUMBER(7,2),department_idNUMBER(2)CONSTRAINTfk_deptnoREFERENCESdepartments(department_id)ONDELETECASCADE);oracle中常用约束的用法外键约束实例:在已创建的表dept_20中添加employee_id和hire_date列的组合外键约束并启用:137ALTERTABLEdept_20ADDCONSTRAINTfk_empid_hiredateFOREIGNKEY(employee_id,hire_date)REFERENCESjob_history(employee_id,start_date)oracle中常用约束的用法唯一性约束唯一性约束将限定一列的值或多列的组合值必须唯一。在列级定义唯一性约束时,只需要UNIQUE关键字。当在表级定义唯一性约束时,还必须指定一个或多个列。组合唯一性约束必须在表级定义。138oracle中常用约束的用法唯一性约束实例:创建promotions_var1表,为promo_id列添加唯一性约束139CREATETABLEpromotions_var1(promo_idNUMBER(6)CONSTRAINTpromo_id_uUNIQUE,promo_nameVARCHAR2(20),promo_categoryVARCHAR2(15),promo_costNUMBER(10,2),promo_begin_dateDATE,promo_end_dateDATE);oracle中常用约束的用法唯一性约束实例:创建promotions_var2表,为promo_id列添加名为promo_id_u的唯一性约束140CREATETABLEpromotions_var2(promo_idNUMBER(6),promo_nameVARCHAR2(20),promo_categoryVARCHAR2(15),promo_costNUMBER(10,2),promo_begin_dateDATE,promo_end_dateDATE,CONSTRAINTpromo_id_uUNIQUE(promo_id)oracle中常用约束的用法唯一性约束实例:为已存在的warehouses表的warehouse_id,warehouse_name列,添加名wh_unq为的唯一性约束141ALTERTABLEwarehousesADDCONSTRAINTwh_unqUNIQUE(warehouse_id,warehouse_name)oracle中常用约束的用法检查性约束检查性(check)约束即要求每一行的一列或多列的值,必须满足指定条件。检查约束的主要好处是具有非常灵活的完整性规则的能力。142oracle中常用约束的用法检查性约束创建一个divisions表,并在表的每一列中定义check约束。143CREATETABLEdivisions(div_noNUMBERCONSTRAINTcheck_divnoCHECK(div_noBETWEEN10AND99),div_nameVARCHAR2(9)CONSTRAINTcheck_divnameCHECK(div_name=UPPER(div_name)),officeVARCHAR2(10)CONSTRAINTcheck_officeCHECK(officeIN('DALLAS','BOSTON','PARIS','TOKYO'));oracle中常用约束的用法检查性约束实例:创建dept_20表,定义表级检查(check)约束。144CREATETABLEdept_20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年马拉松赛事创新科技应用报告
- 2026年铁路基建绿色创新实践报告
- 2026年化妆品行业资产轻量化发展报告
- 2026年宠物食品行业精细化喂养趋势报告
- 2026年红旗轿车行业发展行业新材料创新报告及未来五至十年行业发展趋势分析报告
- 2026年食品饮料行业报告:产品创新与用户复购趋势研究
- 2026年医疗设备行业效率优化解决方案报告
- 2026年人工智能行业投资增值潜力分析报告
- 2026年设备驱动程序行业商业计划书
- 2026年建筑行业生产计划优化与物料管控分析
- 数字智慧方案5445丨企业碳资产管理案例分享北京环境交
- 《奶牛的饲养管理》课件
- 中国文化概论教学课件
- 学生心理健康一生一策档案表
- 气管切开套管的选择与更换
- 深圳市罗湖区2022-2023学年七年级上学期期中地理试题
- 会展部门发展和规划
- 有效竞品分析(好产品竞品分析方法论)
- GB/T 9799-2024金属及其他无机覆盖层钢铁上经过处理的锌电镀层
- 半球电压力锅说明书
- 校园网规划与设计课程设计
评论
0/150
提交评论