Oracle 复制表结构(含索引、主键)操作指南
1. 复制基础表结构
-- 创建空表结构(不复制数据)
CREATE TABLE new_table AS
SELECT * FROM old_table
WHERE 1=0;
2. 复制主键约束
-- 查询原表主键信息
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'OLD_TABLE'
AND constraint_name IN (
SELECT constraint_name
FROM user_constraints
WHERE table_name = 'OLD_TABLE'
AND constraint_type = 'P'
);
-- 创建新主键(需替换实际约束名和列名)
ALTER TABLE new_table
ADD CONSTRAINT new_pk_constraint PRIMARY KEY (column1, column2);
3. 复制索引
-- 查询原表索引信息
SELECT index_name, column_name, index_type, uniqueness
FROM user_ind_columns
JOIN user_indexes USING (index_name)
WHERE table_name = 'OLD_TABLE';
-- 创建新索引(示例)
CREATE INDEX new_idx_name ON new_table (column_name);
CREATE UNIQUE INDEX new_uniq_idx ON new_table (column1, column2);
4. 复制其他约束(可选)
-- 检查约束示例
ALTER TABLE new_table
ADD CONSTRAINT chk_salary CHECK (salary > 0);
-- 唯一约束示例
ALTER TABLE new_table
ADD CONSTRAINT uniq_email UNIQUE (email);
注意事项
-
对象命名冲突:建议为新约束/索引添加前缀(如
new_pk_
) -
权限需求:需要
CREATE TABLE
和CREATE INDEX
权限 -
未包含对象:
-
不会自动复制外键约束
-
不包含触发器、序列等对象
-
不复制表注释和列注释
-
-
数据存储参数:默认使用当前用户的表空间设置