Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建表的副本,并在创建时为其提供约束_Sql_Database_Oracle_Copy_Constraints - Fatal编程技术网

Sql 创建表的副本,并在创建时为其提供约束

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

我是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)
添加外键约束

但在通过查询创建表副本时是否可以提供约束

例如,我们可以这样做:

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;