Sql 创建表的副本,并在创建时为其提供约束
我是Oracle数据库的新手。我知道我们可以使用Sql 创建表的副本,并在创建时为其提供约束,sql,database,oracle,copy,constraints,Sql,Database,Oracle,Copy,Constraints,我是Oracle数据库的新手。我知道我们可以使用 CREATE TABLE copy\u emp(eid、ename、job、mid、sal、dept\u id) 选择员工id、职员姓名、职务id、经理id、工资、部门id 以后我们可以使用 alter table copy\u emp add constraint epk foreign KEY(dept\u id)引用departments(dept\u id)添加外键约束 但在通过查询创建表副本时是否可以提供约束 例如,我们可以这样做: C
CREATE TABLE copy\u emp(eid、ename、job、mid、sal、dept\u id)
选择员工id、职员姓名、职务id、经理id、工资、部门id代码>
以后我们可以使用
alter table copy\u emp add constraint epk foreign KEY(dept\u id)引用departments(dept\u id)
添加外键约束
但在通过查询创建表副本时是否可以提供约束
例如,我们可以这样做:
CREATE table copy_emp(eid, ename,job,mid,sal,dept_id constraint dpt_fk references copy_dept(department_id) ON DELETEcascade)
as
SELECT employee_id,
concat(first_name,last_name),job_id,manager_id,salary,department_id
FROM employees;
如果是,那么在创建表副本时是否可以提供约束条件?如果不是,那么查询是什么?如果不是,那么为什么?否,您不能这样做;你的第二句话(稍加修改)将被删除
其中提到:
对表的定义查询的限制
表查询受以下限制:
- 表中的列数必须等于子查询中的表达式数
- 列定义只能指定列名、默认值和完整性约束,而不能指定数据类型
- 不能在包含
作为子查询的的CREATE TABLE
语句中定义外键约束,除非该表是引用分区的,并且该约束是该表的分区引用约束。在所有其他情况下,必须创建不带约束的表,然后稍后使用altertable
语句添加它
可以提供其他约束,如注释中链接到的答案@Jeff,因此您可以添加主键:
CREATE table copy_emp(eid primary key, ename,job,mid,sal,dept_id)
as
SELECT employee_id,
concat(first_name,last_name),job_id,manager_id,salary,department_id
FROM employees;
或(只要约束名称是唯一的)
看到这个答案了吗
CREATE table copy_emp(eid primary key, ename,job,mid,sal,dept_id)
as
SELECT employee_id,
concat(first_name,last_name),job_id,manager_id,salary,department_id
FROM employees;
CREATE table copy_emp(eid, ename,job,mid,sal,dept_id,
constraint emp_pk primary key (eid))
as
SELECT employee_id,
concat(first_name,last_name),job_id,manager_id,salary,department_id
FROM employees;