2026/6/20 6:26:38
网站建设
项目流程
做网站算软件行业吗,电子邀请函制作免费模板,丽江市住房与城乡建设局网站,大连网站建设特色Oracle 数据表对象 —— 语法知识点详解与案例实践 一、环境准备#xff1a;Oracle 安装与配置#xff08;简要指南#xff09; 说明#xff1a;本章内容基于 Oracle Database。以下为在 Windows 或 Linux 上安装 Oracle Database 的基本步骤#xff08;以 Oracle 21c Exp…Oracle 数据表对象 —— 语法知识点详解与案例实践一、环境准备Oracle 安装与配置简要指南说明本章内容基于 Oracle Database。以下为在 Windows 或 Linux 上安装 Oracle Database 的基本步骤以 Oracle 21c Express Edition 为例。1. 下载 Oracle Database访问官网https://www.oracle.com/database/technologies/xe-downloads.html下载 Oracle Database 21c XE免费版2. 安装步骤Windows 示例以管理员身份运行安装程序OracleXE213_Win64.exe设置数据库口令如oracle123选择安装路径默认即可安装完成后服务会自动启动OracleServiceXEOracleXETNSListener3. 连接数据库使用 SQL*Plus 或 SQL Developer 连接# 使用 sqlplus 命令行sqlplus sys/oracle123localhost:1521/XE as sysdba或创建普通用户推荐-- 创建表空间可选CREATETABLESPACEusers_ts DATAFILEusers_ts.dbfSIZE100M AUTOEXTENDON;-- 创建用户CREATEUSERhr IDENTIFIEDBYhr123DEFAULTTABLESPACEusers_ts;-- 授予权限GRANTCONNECT,RESOURCE,CREATEVIEWTOhr;然后用hr/hr123登录进行练习。二、数据表操作语法详解与案例1. 数据表概述表是 Oracle 中存储数据的基本逻辑单元。每个表由行记录和列字段组成。表属于某个用户Schema如hr.employees。2. 创建数据表CREATE TABLE语法CREATETABLE[schema.]table_name(column_name datatype[DEFAULTexpr][column_constraint],...[table_constraint])[TABLESPACEtablespace_name];案例创建员工表-- 创建 employees 表CREATETABLEemployees(emp_id NUMBER(6)PRIMARYKEY,-- 主键约束first_name VARCHAR2(20),-- 可为空last_name VARCHAR2(25)NOTNULL,-- 非空约束email VARCHAR2(30)UNIQUE,-- 唯一性约束phone VARCHAR2(20),hire_dateDATEDEFAULTSYSDATE,-- 默认当前日期job_id VARCHAR2(10),salary NUMBER(8,2)CHECK(salary0),-- 检查约束隐式manager_id NUMBER(6),dept_id NUMBER(4));注释VARCHAR2是 Oracle 推荐的变长字符串类型。DEFAULT SYSDATE表示若未提供值则自动填入系统当前日期。CHECK约束确保工资大于 0。3. 数据表的逻辑结构段Segment表在物理上对应一个数据段。区Extent由多个连续数据块组成。块Block最小 I/O 单元默认 8KB。可通过USER_SEGMENTS查看SELECTsegment_name,segment_type,bytes/1024/1024ASsize_mbFROMuser_segmentsWHEREsegment_nameEMPLOYEES;4. 数据表的特性支持分区Partitioning支持压缩Compression支持并行处理可设置存储参数如 PCTFREE, INITTRANS5. 维护数据表(1) 增加字段ADD COLUMN-- 添加奖金字段ALTERTABLEemployeesADD(bonus NUMBER(8,2));(2) 删除字段DROP COLUMN-- 删除 phone 字段ALTERTABLEemployeesDROPCOLUMNphone;⚠️ 注意删除字段不可逆且可能影响性能标记删除后续清理。(3) 修改字段MODIFY COLUMN-- 修改 salary 精度并设默认值ALTERTABLEemployeesMODIFY(salary NUMBER(10,2)DEFAULT5000.00);-- 修改字段为非空ALTERTABLEemployeesMODIFY(first_name VARCHAR2(20)NOTNULL);(4) 重命名表RENAME-- 重命名表RENAMEemployeesTOemp_info;-- 或ALTERTABLEemp_infoRENAMETOemployees;(5) 改变表空间和存储参数-- 移动表到新表空间ALTERTABLEemployees MOVETABLESPACEusers_ts;-- 修改存储参数需启用 row movementALTERTABLEemployees MOVE PCTFREE20INITTRANS4;(6) 删除表DROP TABLE-- 普通删除可闪回DROPTABLEemployees;-- 彻底删除不可恢复DROPTABLEemployeesPURGE;-- 闪回恢复如果未 purgeFLASHBACKTABLEemployeesTOBEFOREDROP;(7) 修改表状态-- 设置为只读ALTERTABLEemployeesREADONLY;-- 恢复为读写ALTERTABLEemployeesREADWRITE;6. 数据完整性与约束约束用于保证数据的准确性与一致性。(1) 非空约束NOT NULL-- 创建时定义CREATETABLEtest_notnull(id NUMBER,name VARCHAR2(20)NOTNULL);-- 或通过修改添加需先确保无空值ALTERTABLEemployeesMODIFY(last_name VARCHAR2(25)NOTNULL);(2) 主键约束PRIMARY KEY-- 创建表时定义CREATETABLEdepartments(dept_id NUMBER(4)PRIMARYKEY,dept_name VARCHAR2(30)NOTNULL);-- 或单独添加ALTERTABLEemployeesADDCONSTRAINTemp_pkPRIMARYKEY(emp_id);(3) 唯一性约束UNIQUEALTERTABLEemployeesADDCONSTRAINTemp_email_ukUNIQUE(email);(4) 外键约束FOREIGN KEY-- 先确保主表存在CREATETABLEdepartments(dept_id NUMBER(4)PRIMARYKEY,dept_name VARCHAR2(30));-- 在 employees 中添加外键ALTERTABLEemployeesADDCONSTRAINTemp_dept_fkFOREIGNKEY(dept_id)REFERENCESdepartments(dept_id)ONDELETESETNULL;-- 或 CASCADE / NO ACTION默认外键选项说明ON DELETE CASCADE主表删除从表级联删除。ON DELETE SET NULL主表删除从表字段设为 NULL要求字段可为空。(5) 禁用和激活约束-- 禁用外键约束常用于大批量导入ALTERTABLEemployeesDISABLECONSTRAINTemp_dept_fk;-- 激活约束会验证现有数据ALTERTABLEemployeesENABLECONSTRAINTemp_dept_fk;-- 启用但不验证已有数据需谨慎ALTERTABLEemployeesENABLENOVALIDATECONSTRAINTemp_dept_fk;(6) 删除约束-- 删除约束保留列ALTERTABLEemployeesDROPCONSTRAINTemp_email_uk;-- 删除主键同时删除唯一索引ALTERTABLEemployeesDROPPRIMARYKEY;三、综合性案例案例目标创建部门表和员工表建立主外键关系。插入测试数据。修改表结构增加字段、修改约束。演示约束禁用与启用。删除表并恢复闪回。步骤 1创建表结构-- 创建部门表CREATETABLEdepartments(dept_id NUMBER(4)PRIMARYKEY,dept_name VARCHAR2(30)NOTNULL,location VARCHAR2(50));-- 创建员工表暂不加外键CREATETABLEemployees(emp_id NUMBER(6),first_name VARCHAR2(20),last_name VARCHAR2(25)NOTNULL,email VARCHAR2(30),hire_dateDATEDEFAULTSYSDATE,salary NUMBER(8,2)CHECK(salary0),dept_id NUMBER(4));-- 添加主键ALTERTABLEemployeesADDCONSTRAINTemp_pkPRIMARYKEY(emp_id);-- 添加唯一约束ALTERTABLEemployeesADDCONSTRAINTemp_email_ukUNIQUE(email);-- 添加外键引用 departmentsALTERTABLEemployeesADDCONSTRAINTemp_dept_fkFOREIGNKEY(dept_id)REFERENCESdepartments(dept_id)ONDELETESETNULL;步骤 2插入测试数据-- 插入部门INSERTINTOdepartmentsVALUES(10,HR,Beijing);INSERTINTOdepartmentsVALUES(20,IT,Shanghai);-- 插入员工INSERTINTOemployees(emp_id,first_name,last_name,email,salary,dept_id)VALUES(101,Alice,Smith,aliceexample.com,8000,10);INSERTINTOemployees(emp_id,first_name,last_name,email,salary,dept_id)VALUES(102,Bob,Lee,bobexample.com,9000,20);步骤 3修改表结构-- 增加字段ALTERTABLEemployeesADD(commission_pct NUMBER(2,2));-- 修改字段默认值ALTERTABLEemployeesMODIFY(commission_pctDEFAULT0.1);-- 尝试插入违反外键的数据会失败-- INSERT INTO employees VALUES (103, Tom, King, tomexample.com, SYSDATE, 7000, 99); -- 错误dept_id99 不存在步骤 4禁用约束并批量导入-- 禁用外键假设要导入历史数据ALTERTABLEemployeesDISABLECONSTRAINTemp_dept_fk;-- 插入无效 dept_id临时允许INSERTINTOemployees(emp_id,first_name,last_name,email,salary,dept_id)VALUES(103,Charlie,Brown,charlieexample.com,6000,99);-- 修复数据或删除无效行DELETEFROMemployeesWHEREdept_id99;-- 重新启用约束ALTERTABLEemployeesENABLECONSTRAINTemp_dept_fk;步骤 5删除与闪回-- 删除表放入回收站DROPTABLEemployees;-- 查看回收站SHOWRECYCLEBIN;-- 闪回恢复FLASHBACKTABLEemployeesTOBEFOREDROP;-- 重命名恢复后的表如果名字冲突FLASHBACKTABLEBIN$...$TOBEFOREDROPRENAMETOemployees_old;四、总结操作类型关键语法创建表CREATE TABLE ...增加字段ALTER TABLE ... ADD (...)修改字段ALTER TABLE ... MODIFY (...)删除字段ALTER TABLE ... DROP COLUMN ...重命名表RENAME old TO new添加主键ADD CONSTRAINT pk PRIMARY KEY (...)添加外键ADD CONSTRAINT fk FOREIGN KEY (...) REFERENCES ...禁用约束ALTER TABLE ... DISABLE CONSTRAINT ...删除表DROP TABLE ... [PURGE]闪回表FLASHBACK TABLE ... TO BEFORE DROP最佳实践建议所有约束命名如emp_pk便于管理。生产环境避免频繁DROP COLUMN。大批量数据操作前考虑禁用约束并事后验证。使用PURGE谨慎避免无法恢复。如有进一步需求如分区表、物化视图、索引组织表等高级特性可继续扩展本章内容。