1、Oracle 体系结构Oracle 数据库从存储结构上可以分为物理存储结构与逻辑存储结构,从实例结构上可以分为内存结构与进程结构。 Oracle 的物理存储结构是由存储在磁盘中的操作系统文件所组成的,Oracle 在运行时需要使用这些文件。一般,Oracle 数据库在物理上主要由 3种类型的文件组成,分别是数据文件(*.dbf) 、控制文件( *.ctl)和重做日志文件(*.log ) 。 数据文件数据文件(Data File)是指存储数据库数据的文件。数据库中的所有数据最终都保存在数据文件中,例如,表中的记录和索引等。如果数据文件中的某些数据被频繁访问,则这些数据会被存储在内存的缓冲区中。读
2、取数据时,Oracle 系统会首先从内存的数据缓冲区中查找相关数据信息,如果找不到,则从数据库文件中把数据读取出来,存放到内存的数据缓冲区中,供查询使用;存储数据时,修改后的数据信息,也是先存放在内存的数据缓冲区中,在满足写入条件(例如执行提交操作)时,由 Oracle 的后表空间 说明system 系统表空间,用于存储系统的数据字典、系统的管理信息和用户数据表等sysaux 辅助系统表空间。用于减少系统表空间的负荷,提高系统作业效率。该表空间由 Oracle 系统自动维护,一般不用于存储用户数据temp 临时表空间。用于存储临时的数据,例如存储排序时产生的临时数据。一般情况下,数据库中的所有
3、用户都使用 temp 作为默认的临时表空间undotbs1 撤销表空间。用于在自动撤销管理方式下存储撤销信息。在撤销表空间中,除了回退段以外,不能建立任何其他类型的段。所以,用户不可以在撤销表空间中创建任何数据库对象users 用户表空间。用于存储永久性用户对象和私有信息表空间. . .表空间数据库段. . .段区. . .区数据块数据块. . .台进程 DBWn 将数据写入数据文件。特点数据文件一般有以下几个特点: 一个表空间由一个或多个数据文件组成。 一个数据文件只对应一个数据库。而一个数据库通常包含多个数据文件。 数据文件可以通过设置其参数,实现其自动扩展的功能。如果想要了解数据文件的信
4、息,可以查询数据字典 dba_data_files 和v$datafile。数据字典介绍Oracle 数据字典(Data Dictionary)是存储在数据库中的所有对象信息的知识库,Oracle 数据库管理系统使用数据字典获取对象信息和安全信息,而用户和数据库系统管理员则用数据字典来查询数据库信息。Oracle 数据字典保存有数据库中对象和段的信息,例如表、视图、索引、包、存储过程以及与用户、权限、角色、审计和约束等相关的信息。 数据字典视图类型视图类型 说明USER 视图 USER 视图的名称以 user_为前缀,用来记录用户对象的信息。例如 user_tables 视图ALL 视图 AL
5、L 视图的名称以 all_为前缀,用来记录用户对象的信息以及被授权访问的对象信息。例如 all_synonyms 视图DBA 视图 DBA 视图的名称以 dba_为前缀,用来记录数据库实例的所有对象的信息。例如 dba_tables 视图V$视图 V$视图的名称以 v$为前缀,用来记录与数据库活动相关的性能统计动态信息。例如 v$datafile 视图GV$视图 GV$视图的名称以 gv$为前缀,用来记录分布式环境下所有实例的动态信息。例如 gv$lock 视图基本的数据字典字典名称 说明dba_tables 所有用户的所有表的信息dba_tab_columns 所有用户的表的字段信息dba_
6、views 所有用户的所有视图信息dba_synonyms 所有用户的同义词信息dba_sequences 所有用户的序列信息dba_constraints 所有用户的表的约束信息dba_indexes 所有用户的表的索引简要信息dba_ind_columns 所有用户的索引的字段信息与数据库组件相关的数据字典组件 数据字典中的表或视图说明数据库 v$datafile 记录系统的运行情况dba_tablespaces 系统表空间的基本信息表空间dba_free_space 系统表空间的空闲空间的信息v$controlfile 系统控制文件的基本信息v$controlfile_record_se
7、ction系统控制文件中记录文档段的信息控制文件v$parameter 系统各参数的基本信息dba_data_files 系统数据文件以及表空间的基本信息v$filestat 来自控制文件的数据文件信息数据文件v$datafile_header 记录数据文件头部分的基本信息常用动态性能视图视图名称 说明v$fixed_table 显示当前发行的固定对象的说明v$instance 显示当前实例的信息v$latch 显示锁存器的统计数据v$librarycache 显示有关库缓存性能的统计数据v$rollstat 显示联机的回滚段的名字v$rowcache 显示活动数据字典的统计v$sga 显示有
8、关系统全局区的总结信息v$sgastat 显示有关系统全局区的详细信息v$sort_usage 显示临时段的大小及会话v$sqlarea 显示 SQL 区的 SQL 信息SQLPlus 连接数据库SQL*Plus 工具SQL*Plus 工具主要用于数据查询和数据处理。利用 SQL*Plus 可以将SQL 和 Oracle 专有的 PL/SQL 结合起来进行数据查询和处理。SQL*Plus 工具可以实现以下功能: 连接数据库,完成数据库管理。 对数据表可以执行插入、修改、删除、查询操作、以及执行 SQL、PL/SQL 块。 查询结果的格式化、运算处理、保存、打印以及输出 Web 格式。 显示任何
9、一个表的字段定义,并与终端用户交互。 运行存储在数据库中的子程序或包。 启动/停止数据库实例。 SQL*Plus 连接与断开数据库1启动 SQL*Plus,连接到默认数据库2从命令行连接数据库3使用 SQL*Plus 命令连接与断开数据库在 SQL*Plus 中输入 SQL 语句时,一旦执行该语句,则 SQL*Plus 会将该语句保存到缓冲区中,该语句不再获得焦点,也就不能再接受编辑操作。如果还需要对缓冲区中的语句进行编辑操作,则可以使用 SQL*Plus 语句实现。Oracle 数据库提供了一些 SQL*Plus 语句,这些语句由相应的命令实现,例如 APPEND(可以简写为 A)命令。如下
10、表所示。 SQL*Plus 语句命令 说明APPEND text 将 text 附加到当前行之后CHANGE /old/new 将当前行中的 old 替换为 newCLEAR BUFFER 清除缓存区中的所有行INPUT text 插入指定的文本 textDEL m n 删除从第 m 行到第 n 行之间的命令行LIST n 列出第 n 行RUN或 / 显示缓冲区中保存的语句,并运行这些语句n 将第 n 行作为当前行n text 使用 text 文本替代第 n 行信息0 text 在第一行之前插入 text 文本创建简单报表报表所谓报表就是用表格、图表等格式来动态显示数据。计算机上的报表的主要特
11、点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离,用户可以只修改数据,或者只修改格式。为报表设置页眉和页脚命令 说明TTITLE printspec text | variable . | OFF | ON 指定出现在报表中每一个页面顶端的页眉。其中 printspec 的可选值有 LEFT、CENTER、RIGHT、BOLD、FORMAT text、COL n、SKIP n和 TAB n。ON 选项表示启用设置;OFF 选项表示取消设置。还可以带有用户变量(内容由系统来维护) ,如 SQL.PNO 页号、SQL.LNO 行号等BTITLE printspec text | v
12、ariable . | OFF | ON 指定出现在报表中每一个页面底端的页脚计算小计BREAK 命令和 COMPUTE 命令在执行查询操作或创建报表时,可以使用 BREAK 和 COMPUTE 命令,用来对输出的结果进行统计计算。其中使用 BREAK 命令,可以让 SQL*Plus 根据列值的范围分隔输出结果,可以使得重复的列值不进行显示;COMPUTE子句可以让 SQL*Plus 计算一列的值,并在最后输出显示。用法如下:BREAK ON column_name SKIP nCOMPUTE function LABEL label OF column_name ON break_colum
13、n_name语法说明如下: column_name 表示对哪一列执行操作。 SKIP n 表示在指定列的值变化之前插入 n 个空行。 function 表示执行的操作,例如 SUM(求和) 、MAXIMUM(最大值) 、MINIMUM(最小值) 、AVG(平均值) 、COUNT(非空值的列数) 、NUMBER(行数) 、VARIANCE(方差)以及 STD(均方差)等。 LABEL 指定显示结果时的文本信息。格式化列的显示效果COLUMN 命令可以对列的显示效果,包括列标题和列数据,进行格式化。该命令的语法如下:COLUMN column_name | ALIAS alias options
14、语法说明如下: column_name 指定列名。 ALIAS alias 指定要格式化的列的别名。 options 指定用于格式化列或别名的一个或者多个选项。 OPTION 选项选项 说明FORMAT format 将列或列名的显示格式设置为由 format 字符串指定的格式,format 可以使用的格式如下表HEADING text 设置由 text 字符串指定的列标题JUSTIFY LEFT | CENTER | RIGHT 将列的输出信息设置为左对齐、居中对齐或右对齐WRAPPED 在输出结果中将一个字符串的末尾换行显示。该选项可能导致单个单词跨越多行WORD_WRAPPED 与 WR
15、APPED 选项类似,但是单个单词不会跨越多行CLEAR 清除列的格式化TRUNCATED 删除第一行的字符串NULL text 指定列为空值时显示的内容PRINT 显示列标题NOPRINT 隐藏列标题format 格式元素元素说明 举例An 为VARCHAR 类型的列内容设置宽度。如果内容超过指定的宽度,则内容自动换行A59 设置 NUMBER 列的显示格式 999 999$ 浮动的货币符号 $9999L 本地货币符号 L9999. 小数点位置 9999.99, 千位分隔符 9,999SQL*Plus 命令命令 说明HELP topic 查看命令的使用方法,topic 表示需要查看的命令名称
16、。例如:HELP DESCHOST 使用该命令可以从 SQL*Plus 环境切换到操作系统环境,以便执行操作系统命令HOST 操作系统命令 执行操作系统命令,例如:HOST notepad.exeCLEAR SCREEN 清除屏幕内容SHOW ALL | USER | SGA| ERRORS | RELEASE| PARAMETERS 查看 SQL*Plus 的所有系统变量值信息、当前是哪个用户在使用 SQL*Plus、显示 SGA 大小、查看错误信息、数据库版本信息、系统初始化参数信息DESCRIBE 查看对象的结构,这里的对象可以是表、视图、存储过程、函数和包等。例如:DESC dualD
17、ESCRIBE 命令DESCRIBE 命令语法如下:DESCRIBE schema. object connect_identifier 语法说明如下:DESCRIBE: DESCRIBE 可以简写为 DESC。schema:指定对象所属的用户名,或者所属的用户模式名称。object:表示对象的名称,如表名或视图名等。connect_identifier : 表示数据库连接字符串。使用 EDIT 命令编辑缓冲区内容使用 EDIT 命令,可以将 SQL*Plus 缓冲区的内容复制到一个名为afiedt.buf 的文件中,然后启动操作系统中默认的编辑器打开这个文件,并且文件内容能够进行编辑。在 W
18、indows 操作系统中,默认的编辑器是Notepad(记事本) 。EDIT file_name 其中,file_name 默认为 afiedt.buf,也可以指定一个其他的文件。使用 SPOOL 命令复制输出结果到文件使用 SPOOL 命令实现将 SQL*Plus 中的输出结果复制到一个指定的文件中,或者把查询结果发送到打印机中,直到使用 SPOOL OFF 命令为止。SPOOL 命令的语法如下:SPOOL file_name CREATE | REPLACE | APPEND | OFF | OUT file_name 指定一个操作系统文件。CREATE 创建一个指定的 file_name
19、 文件。REPLACE 如果指定的文件已经存在,则替换该文件。APPEND 将内容附加到一个已经存在的文件中。OFF 停止将 SQL*Plus 中的输出结果复制到 file_name 文件中,并关闭该文件。OUT 启动该功能,将 SQL*Plus 中的输出结果复制到 file_name 文件。使用 GET 命令读取文件内容到缓冲区使用 GET 命令的语法如下:GET FILE file_name LIST | NOLIST 语法说明如下:file_name 表示一个指定文件,将该文件的内容读入 SQL*Plus 缓冲区中。LIST 列出缓冲区中的语句。NOLIST 不列出缓冲区中的语句。设置一
20、行显示的字符数量使用 LINESIZE 命令可以设置一行数据可以容纳的字符数量,默认数量为80。如果 LINESIZE 的值比较小,那么表中一行数据,有可能在屏幕上需要分多行显示;如果 LINESIZE 的值设置大一些,一行数据就可以在屏幕的一行中进行显示了。LINESIZE 命令的语法如下:SET LINESIZE n其中,n 表示屏幕上一行数据可以容纳的字符数量,有效范围是 1 32767。设置一页显示多少行数据使用 PAGESIZE 命令,可以设置每一页的大小,从而控制每一页显示的数据量。PAGESIZE 命令的语法如下:SET PAGESIZE n其中,参数 n 表示每一页大小的正整数
21、,最大值可以为 50,000,默认值为 14。页并不是仅仅由输出的数据行构成的,而是由 SQL*Plus 显示到屏幕上的所有输出结果构成,包括标题和空行等。 使用 SAVE 命令将缓冲区内容保存到文件使用 SAVE 命令可以将当前缓冲区的内容保存到文件中,这样,即使缓冲区中的内容被覆盖,也保留有前面的执行语句。SAVE 命令的语法如下:SAVE FILE file_name CREATE | REPLACE | APPEND 语法说明如下:file_name 表示将 SQL*Plus 缓冲区的内容保存到由 file_name 指定的文件中。CREATE 表示创建一个 file_name 文件,
22、并将缓冲区中的内容保存到该文件。该选项为默认值。APPEND 如果 file_name 文件已经存在,则将缓冲区中的内容,追加到 file_name 文件的内容之后;如果该文件不存在,则创建该文件。REPLACE 如果 file_name 文件已经存在,则覆盖 file_name 文件的内容;如果该文件不存在,则创建该文件。使用 SPOOL 命令复制输出结果到文件使用 SPOOL 命令实现将 SQL*Plus 中的输出结果复制到一个指定的文件中,或者把查询结果发送到打印机中,直到使用 SPOOL OFF 命令为止。SPOOL 命令的语法如下:SPOOL file_name CREATE | R
23、EPLACE | APPEND | OFF | OUT file_name 指定一个操作系统文件。CREATE 创建一个指定的 file_name 文件。REPLACE 如果指定的文件已经存在,则替换该文件。APPEND 将内容附加到一个已经存在的文件中。OFF 停止将 SQL*Plus 中的输出结果复制到 file_name 文件中,并关闭该文件。OUT 启动该功能,将 SQL*Plus 中的输出结果复制到 file_name 文件。使用 START 命令读取并运行文件内容START 命令可以读取文件中的内容到缓冲区中,然后在 SQL*Plus 中运行这些内容。START 命令的语法如下:S
24、TART url | file_name 语法说明如下:url 用来指定一个 URL 地址,例如 http:/host.domain/script.sql。file_name 指定一个文件。该命令将 file_name 文件的内容读入SQL*Plus 缓冲区中,然后运行缓冲区中的内容。使用(2)在操作系统中,将磁盘中的 myspace02.dbf 文件移动到新的目录中,例如移动到 F:oraclefile 目录中。文件的名称也可以修改,例如修改为myspace03.dbf。(3)使用 ALTER TABLESPACE 语句,将 myspace 表空间中myspace02.dbf 文件的原名称与
25、路径修改为新名称与路径,如下:ALTER TABLESPACE myspaceRENAME DATAFILE E:appAdministratororadataorclmyspace02.dbfTO F:oraclefilemyspace03.dbf;(4)修改 myspace 表空间的状态为 ONLINE,如下:ALTER TABLESPACE myspace ONLINE;增加表空间大小创建表空间时,必需在物理磁盘上为表空间创建数据文件。数据文件的大小决定了创建的表空间的大小。构成表空间的数据文件可以位于不同的物理磁盘上,表空间的大小就等于不同物理磁盘上所有数据文件的大小之和。如果在使用表
26、空间的过程中,出现表空间不足的情况,那么就需要增加表空间的大小,具体实现时,可以采用增加数据文件的大小,也可以增加一个新的数据文件来增大表空间。修改表空间中数据文件的大小修改数据文件需要使用 ALTER DATABASE 语句,其语法如下:ALTER DATABASE DATAFILE file_name RESIZE newsize K | M;语法说明如下:file_name 数据文件的名称与路径。RESIZE newsize 修改数据文件的大小为 newsize。增加表空间的数据文件增加表空间的大小,除了可以修改其对应的数据文件的大小以外,还可以选择为其增加新的数据文件。增加新的数据文件
27、需要使用 ALTER TABLESPACE 语句,其语法如下:ALTER TABLESPACE tablespace_nameADD DATAFILE file_name SIZE number K | M AUTOEXTEND OFF | ON NEXT number K | M MAXSIZE UNLIMITED | number K | M , ;重命名表空间在需要的情况下,可以对表空间的名称进行修改。修改表空间的名称,不会影响到表空间中的数据。但不能修改系统表空间 system 与 sysaux的名称。重命名表空间的语法如下:ALTER TABLESPACE tablespace_na
28、me RENAME TO new_tablespace_name;注意:如果表空间的状态为 OFFLINE,则无法重命名该表空间。 删除表空间删除表空间需要使用 DROP TABLESPACE 语句,其语法如下:DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES 语法说明如下:INCLUDING CONTENTS表示删除表空间的同时,删除表空间中的所有数据库对象。如果表空间中有数据库对象,则必须使用此选项。AND DATAFILES表示删除表空间的同时,删除表空间所对应的数据文件。如果不使用此选项,则删除表空间实际上
29、仅是从数据字典和控制文件中将该表空间的有关信息删除,而不会删除操作系统中与该表空间对应的数据文件。切换日志文件组日志文件组是循环使用的,当一组日志文件被写满时,Oracle 系统自动切换到下一组日志文件。在需要的时候,数据库管理员也可以手动切换日志文件组。切换日志文件组需要使用如下语句:ALTER SYSTEM SWITCH LOGFILE ;清空日志文件组如果日志文件组中的日志文件受损,将导致数据库无法将受损的日志文件进行归档,这会最终导致数据库停止运行。此时,在不关闭数据库的情况下,可以选择清空日志文件组中的内容。清空日志文件组语法如下:LTER DATABASE CLEAR LOGFIL
30、E GROUP group_number ;注意:被清空的日志文件组不能处于 CURRENT 状态,也就是说不能清空数据库当前正在使用的日志文件组。当数据库中只有两个日志文件组时,不能清空日志文件组。创建日志文件组语法如下:ALTER DATABASE database_nameADD LOGFILE GROUP group_number(file_name , file_name , )SIZE size REUSE;语法说明如下:GROUP group_number 为日志文件组指定组编号。file_name 为该组创建日志文件成员。SIZE number 指定日志文件成员的大小。REUS
31、E 如果创建的日志文件成员已存在,可以使用 REUSE 关键字覆盖已存在的文件。但是该文件不能已经属于其他日志文件组,否则无法替换。创建日志文件创建日志文件,一般是指向日志文件组中添加日志成员,需要使用 ALTER DATABASE ADD LOGFILE MEMBER 语句。例如,向日志文件组 GROUP 4 中添加一个新的日志文件:alter database add logfile memberf:oraclefilelogfileredo03.logto group 4;归档日志Oracle 利用重做日志文件记录对数据库的操作,但是重做日志文件组是循环使用的,当所有的日志文件都被填满时
32、,系统自动切换到第一组日志文件,当然数据库管理员也可以使用命令手工切换。而在循环使用日志文件时,日志文件中已经存在的日志内容将会被覆盖。为了完整地记录数据库的全部操作,Oracle 提出了归档日志的概念。如果是非归档日志模式,则切换日志文件时,日志文件中原有内容将被新的内容覆盖;如果是归档日志模式,则切换日志文件时,系统会首先对日志文件进行归档存储,之后才允许向文件中写入新的日志内容。 Oracle 日志模式Oracle 数据库有两种日志模式:非归档日志模式(NOARCHIVELOG)在非归档日志模式下,如果发生日志切换,则日志文件中原有内容将被新的内容覆盖;归档日志模式(ARCHIVELOG
33、 )在归档日志模式下,如果发生日志切换,则 Oracle 系统会将日志文件通过复制保存到指定的地方,这个过程叫“归档” ,复制保存下来的日志文件叫“归档日志” ,然后才允许向文件中写入新的日志内容。设置数据库模式在安装 Oracle Database 11g 时,默认设置数据库运行于非归档模式,这样可以避免对创建数据库的过程中生成的日志进行归档,从而缩短数据库的创建时间。在数据库成功运行后,数据库管理员可以根据需要修改数据库的运行模式。如果要修改数据库的运行模式,可以使用如下语句:ALTER DATABASE ARCHIVELOG | NOARCHIVELOG ;其中,ARCHIVELOG 表
34、示归档模式;NOARCHIVELOG 表示非归档模式。删除日志文件删除日志文件的语法如下:ALTER DATABASE DROP LOGFILE MEMBER logfile_name ;删除日志文件需要注意如下几点:该日志文件所在的日志文件组不能处于 CURRENT 状态,需要执行一次手工日志切换,将该日志文件组的状态修改为 INACTIVE。该日志文件所在的日志文件组中必须还包含有其他日志成员。如果数据库运行在归档模式下,则应该在删除日志文件之前,确定它所在的日志文件组已经被归档,否则会导致数据丢失。状态值日志组的状态:ACTIVE、CURRENT、INACTIVE、UNUSED日志文件的
35、状态:VALID、INVALID 、STALE删除日志文件组删除日志文件组的语法如下:ALTER DATABASE DROP LOGFILE GROUP group_number ;删除日志文件组需要注意如下几点:一个数据库至少需要两个日志文件组。日志文件组不能处于 CURRENT 状态。如果数据库运行在归档模式下,应该确定该日志文件组已经被归档。设置归档目标归档目标就是指存放归档日志文件的目录。一个数据库可以有多个归档目标。在创建数据库时,默认设置了归档目标,可以通过db_recovery_file_dest 参数查看。设置归档目标的语法形式如下:ALTER SYSTEM SET log_a
36、rchive_dest_N = LOCATION | SERVER = directory ;其中,directory 表示磁盘目录;LOCATION 表示归档目标为本地系统的目录;SERVER 表示归档目标为远程数据库的目录。 设置归档日志名称通过参数 log_archive_format,可以设置归档日志名称格式。语法形式:ALTER SYSTEM SET log_archive_format = fix_name%S_%R.%T SCOPE = scope_type ;语法说明如下:fix_name%S_%R.%T其中,fix_name 是自定义的命名前缀;%S 表示日志序列号;%R 表
37、示联机重做日志(RESETLOGS)的 ID 值;%T 表示归档线程编号。log_archive_format 参数的值必须包含 %S、%R 和%T 匹配符。SCOPE = scope_typeSCOPE 有 3 个参数值:MEMORY、SPFILE 和 BOTH。其中,MEMORY表示只改变当前实例运行参数;SPFILE 表示只改变服务器参数文件SPFILE 中的设置;BOTH 则表示两者都改变。重新定义日志成员重新定义日志成员,是指为日志成员组重新指定一个日志成员。 例如:GROUP 4 文件组中包含一个 redo01.log 文件,现在移除该文件,改为包含 redo01_new.log。
38、 CHECK 约束CHECK 约束是指检查性约束,使用 CHECK 约束时,将对输入的每一个数据进行检查,只有符合条件的记录才会保存到表中,从而保证数据的有效性和完整性。CHECK 约束具有以下 4 个特点:在 CHECK 约束的表达式中,必须引用表中的一个或者多个列;并且表达式的运算结果是一个布尔值。在一个列中,可以定义多个 CHECK 约束。对于同一列,可以同时定义 CHECK 约束和 NOT NULL 约束。CHECK 约束既可以定义在列级别中,也可以定义在表级别中。创建表时,为表定义 CHECK 约束,需要使用 CHECK(约束条件)语句。例如,创建表 STUDENT3,为 STUDE
39、NTAGE 列指定 CHECK 约束,如下:SQL create table student3(2 studentid number(4) not null primary key,3 studentcode varchar2(10) unique,4 studentname varchar2(20),5 studentage number(3) constraint stu3_ck check(studentage 0),6 studentaddress varchar2(40)7 );表已创建。FOREIGN KEY 约束FOREIGN KEY 约束是指外键约束,用于引用本表或另一个表中的
40、一列或一组列。引用列与被引用列可以在同一个表中,这种情况称为“自引用” 。被引用的列或列组应该具有主键约束或惟一约束。引用列的取值只能为被引用列的值或 NULL 值。可以为一个列或一组列定义 FOREIGN KEY 约束。如果引用列中存储了被引用列的某个值,则不能直接删除被引用列中的这个值,否则会与第二条相矛盾。如果一定要删除,需要先删除引用列中的这个值,然后再删除被引用列中的这个值。学号s 1 2 3 4s 1 2 3 5s 1 2 3 6s 1 2 3 7姓名王雪杨小雨寒林舒昊所在班级1123班级编号123班级名称J a v a 1 班J a v a 2 班W e b 1 班班级人数3 4
41、2 62 8学生 班级添加 FOREIGN KEY 约束在创建表时,为列添加 FOREIGN KEY 约束,形式如下:column_name1 data_type CONSTRAINT constraint_name REFERENCES table_name2 (column_name2)或CREATE TABLE table_name (column_name data_type , , CONSTRAINT constraint_name FOREIGN KEY (column_name1) REFERENCES table_name2 (column_name2) , )其中,REFE
42、RENCES 关键字用于定义 column_name1 列指向其他表或本表)中的 column_name2 列。也可以为已创建的表中的列添加 FOREIGN KEY 约束,如下:ALTER TABLE table_name1 ADD CONSTRAINT constraint_name FOREIGN KEY (column_name1) REFERENCES table_name2 (column_name2);NOT NULL 约束NOT NULL 约束是指非空约束,用于要求向表中添加记录时必须为被约束的列提供数据,否则将出现错误。NOT NULL 约束只能在列级别上定义,一个表中可以定义
43、多个 NOT NULL 约束。添加 NOT NULL 约束在创建表时,为列添加 NOT NULL 约束,形式如下:column_name data_type CONSTRAINT constraint_name NOT NULL其中,CONSTRAINT constraint_name 表示为约束指定名称。也可以为已创建的表中的列添加 NOT NULL 约束,这时就需要使用ALTER TABLE MODIFY 语句,形式如下:ALTER TABLE table_name MODIFY column_name CONSTRAINT constraint_name NOT NULL;删除 NOT
44、NULL 约束如果需要删除表中的列上的 NOT NULL 约束,依然是使用 ALTER TABLE MODIFY 语句,形式如下:TABLE table_name MODIFY column_name NULL;PRIMARY KEY 约束PRIMARY KEY 约束是指主键约束,用于惟一标识一行记录。在一个表中只能定义一个 PRIMARY KEY 约束,该约束可以定义在单独的列上,也可以定义在多个列上(表级约束) 。定义了 PRIMARY KEY 约束的列或列组合不能有重复值,也不能有 NULL 值。添加 PRIMARY KEY 约束在创建表时,为列添加 PRIMARY KEY 约束,形式如
45、下:column_name data_type CONSTRAINT constraint_name PRIMARY KEY 或 CREATE TABLE table_name (column_name data_type , , CONSTRAINT constraint_name PRIMARY KEY (column_name) , )也可以为已创建的表中的列添加 PRIMARY KEY 约束,形式如下:ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name);删除 PRIMARY KE
46、Y 约束删除列上的 PRIMARY KEY 约束,需要使用 ALTER TABLE DROP 语句,不过形式上只能采取指定约束名的方式,如下:ALTER TABLE table_name DROP CONSTRAIN constraint_name;如果在添加约束时使用 CONSTRAINT 子句为其指定了约束名,那么这里就可以直接使用该名称。而如果没有使用 CONSTRAINT 子句,则约束名由Oracle 自动创建,此时就可以通过连接数据字典 user_cons_columns 和user_constraints 来查看约束名称。UNIQUE 约束UNIQUE 约束是指惟一约束,用于要求列
47、中不允许出现重复值。可以为单独的列添加一个 UNIQUE 约束,也可以为多个列添加一个 UNIQUE 约束(属于表级约束) 。如果为多个列添加一个 UNIQUE 约束,只需要保证这多个列的值不全部相同即可。添加 UNIQUE 约束在创建表时,为列添加 UNIQUE 约束,形式如下:column_name data_type CONSTRAINT constraint_name UNIQUE或CREATE TABLE table_name (column_name data_type , , CONSTRAINT constraint_name UNIQUE (column_name) , )也
48、可以为已创建的表中的列添加 UNIQUE 约束,这时就需要使用 ALTERTABLE ADD 语句,形式如下:ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);删除 UNIQUE 约束删除列上的 UNIQUE 约束,可以使用 ALTER TABLE DROP 语句,形式如下:ALTER TABLE table_name DROP UNIQUE (column_name);如果约束有名称,也可以使用指定名称的方式删除该约束,语句形式为如下:ALTER TABLE table DROP CONSTRAINT constraint_name;视图 USER_CONSTRAINTS通过查询数据字典视图 USER_CONSTRAINTS,可以了解当前用户模式中所有约束的基本信息。列 类型 说明owner VARACHAR2(30)约束的所有者constraint_name VARACHAR2(30 约束名)constraint_type VARACHAR2(1) 约束类型,值为 P、R、C、U、V 或 Otable_name VARACHAR2(30)约束定义所针对的表名status VARACHAR2(8) 约束的状态。值为