ORACLE对表的操作汇总

1、创建表

语法1:
CREATE TABLE 表名(
	字段名 数据类型 [[CONSTRAINT 约束名] 约束][DEFAULT 默认值],
	字段名 数据类型 [[CONSTRAINT 约束名] 约束][DEFAULT 默认值],
	...
	字段名 数据类型 [[CONSTRAINT 约束名] 约束][DEFAULT 默认值]
)

语法2:通过子查询创建表,这种方式创建表只有非空约束能继承,默认值和其他约束不能继承
CREATE TABLE 表名 AS
SELECT 字段名,... FROM 表名2 WHERE ...

例1:创建表
CREATE TABLE job(
  id NUMBER(6),
  code VARCHAR2(10),
  name VARCHAR2(10)
)

例2:创建表时给字段加默认值和约束条件,(不给约束起名字,没有名字的约束系统会自动给约束起名字)
CREATE TABLE emp(
  id NUMBER(6) PRIMARY KEY, --主键约束
  code VARCHAR2(10) UNIQUE, --唯一约束
  name VARCHAR2(10) NOT NULL, --非空约束
  sex VARCHAR2(10) CHECK(sex in('男','女')), --检查约束
  age number(2) DEFAULT 20,--默认值
  job_id NUMBER(6), 
  FOREIGN KEY(job_id) REFERENCES job(id) --外键约束
)

例3:创建表时给字段加默认值和约束条件,同时给约束起名字
CREATE TABLE emp(
  id NUMBER(6) CONSTRAINT pri_emp PRIMARY KEY, --主键约束,pri_emp为约束名
  code VARCHAR2(10) CONSTRAINT uni_emp UNIQUE, --唯一约束,uni_emp为约束名
  name VARCHAR2(10) CONSTRAINT not_emp NOT NULL,--非空约束,not_emp为约束名
  sex VARCHAR2(10) CONSTRAINT check_emp CHECK(sex in('男','女')),--检查约束,check_emp为约束名
  age number(2) DEFAULT 20,--默认值,默认值不属于约束
  job_id NUMBER(6), 
  CONSTRAINT foreign_emp FOREIGN KEY(job_id) REFERENCES job(id) --外键约束,foreign_emp为约束名
)
注:(1)Foreign Key的可选参数ON DELETE CASCADE,它的含义是如果删除外键主表里的内容,子表里相关的内容将一起被删除,
如果没有ON DELETE CASCADE参数,子表里有内容,父表里的主关键字记录不能被删除掉
(2)创建外键约束时,子表主键一定要存在才能成功 

例4:复制emp_test表的结构和数据
CREATE TABLE emp AS SELECT id,code,name FROM emp_test WHERE name in('张三','李四');

例5:只复制emp_test表的结构,不复制emp_test表的数据
CREATE TABLE emp AS SELECT id,code,name FROM emp_test WHERE 1=2;	字段名 数据类型 [[CONSTRAINT 约束名] 约束][DEFAULT 默认值],
	字段名 数据类型 [[CONSTRAINT 约束名] 约束][DEFAULT 默认值],
	...
	字段名 数据类型 [[CONSTRAINT 约束名] 约束][DEFAULT 默认值]
)

语法2:通过子查询创建表,这种方式创建表只有非空约束能继承,默认值和其他约束不能继承
CREATE TABLE 表名 AS
SELECT 字段名,... FROM 表名2 WHERE ...

例1:创建表
CREATE TABLE job(
  id NUMBER(6),
  code VARCHAR2(10),
  name VARCHAR2(10)
)

例2:创建表时给字段加默认值和约束条件,(不给约束起名字,没有名字的约束系统会自动给约束起名字)
CREATE TABLE emp(
  id NUMBER(6) PRIMARY KEY, --主键约束
  code VARCHAR2(10) UNIQUE, --唯一约束
  name VARCHAR2(10) NOT NULL, --非空约束
  sex VARCHAR2(10) CHECK(sex in('男','女')), --检查约束
  age number(2) DEFAULT 20,--默认值
  job_id NUMBER(6), 
  FOREIGN KEY(job_id) REFERENCES job(id) --外键约束
)

例3:创建表时给字段加默认值和约束条件,同时给约束起名字
CREATE TABLE emp(
  id NUMBER(6) CONSTRAINT pri_emp PRIMARY KEY, --主键约束,pri_emp为约束名
  code VARCHAR2(10) CONSTRAINT uni_emp UNIQUE, --唯一约束,uni_emp为约束名
  name VARCHAR2(10) CONSTRAINT not_emp NOT NULL,--非空约束,not_emp为约束名
  sex VARCHAR2(10) CONSTRAINT check_emp CHECK(sex in('男','女')),--检查约束,check_emp为约束名
  age number(2) DEFAULT 20,--默认值,默认值不属于约束
  job_id NUMBER(6), 
  CONSTRAINT foreign_emp FOREIGN KEY(job_id) REFERENCES job(id) --外键约束,foreign_emp为约束名
)
注:(1)Foreign Key的可选参数ON DELETE CASCADE,它的含义是如果删除外键主表里的内容,子表里相关的内容将一起被删除,
如果没有ON DELETE CASCADE参数,子表里有内容,父表里的主关键字记录不能被删除掉
(2)创建外键约束时,子表主键一定要存在才能成功 

例4:复制emp_test表的结构和数据
CREATE TABLE emp AS SELECT id,code,name FROM emp_test WHERE name in('张三','李四');

例5:只复制emp_test表的结构,不复制emp_test表的数据
CREATE TABLE emp AS SELECT id,code,name FROM emp_test WHERE 1=2;

2、删除表

语法:
DROP TABLE 表名;

例:
DROP TABLE emp;

3、修改表名

语法:
RENAME 旧表名 TO 新表名;

例:
RENAME emp TO new_emp;

4、添加字段

语法:
ALTER TABLE 表名 ADD 字段名 数据类型;

例:
ALTER TABLE emp ADD age number(2);

5、删除字段

语法:
ALTER TABLE 表名 DROP COLUMN 字段名;

例:
ALTER TABLE emp DROP COLUMN age;

6、修改字段名

语法:
ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名;

例:
ALTER TABLE emp RENAME COLUMN age TO new_age;

7、修改字段类型或长度

语法:
ALTER TABLE 表名 MODIFY(字段名 新数据类型(长度));

例:ALTER TABLE emp MODIFY(age varchar2(5));

8、添加或修改注释(当注释信息为空时为删除注释,因为注释会进行覆盖,为空就相当于删除了注释)

语法:
COMMENT ON TABLE 表名 is 注释信息; --表添加注释
COMMENT ON COLUMN 表名.字段名 is 注释信息; --字段添加注释

例:
COMMENT ON TABLE emp is '员工信息表'; --添加表注释
COMMENT ON COLUMN emp.name is '员工名字';--添加字段注释

COMMENT ON TABLE emp is ''; --删除表注释
COMMENT ON COLUMN emp.name is '';--删除字段注释

10、添加或修改字段默认值(当默认值为空时为删除默认值)

语法:
ALTER TABLE 表名 MODIFY 字段名 DEFAULT 默认值;

例:
ALTER TABLE emp MODIFY sex DEFAULT '女';--添加默认值
ALTER TABLE emp MODIFY sex DEFAULT null;--删除默认值

11、添加和删除主键约束

一个表只能有一个主键,一个主键可以是一个或多个字段组成,多个字段组成的主键叫联合主键
语法:
ALTER TABLE 表名 ADD [CONSTRAINT 约束名] PRIMARY KEY(字段名,字段名,...); --添加主键约束
ALTER TABLE 表名 DROP PRIMARY KEY; --直接删除主键约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名; --根据约束名称删除

例:
ALTER TABLE emp ADD PRIMARY KEY(id,code); --添加主键约束
ALTER TABLE emp ADD CONSTRAINT pri_emp PRIMARY KEY(id,code); --添加主键约束,起名为pri_emp 
ALTER TABLE emp DROP PRIMARY KEY; --删除主键约束
ALTER TABLE emp DROP CONSTRAINT pri_emp; --根据约束名称删除主键约束

12、添加和删除外键约束

语法:
ALTER TABLE 主表名 ADD [CONSTRAINT 约束名] FOREIGN KEY (主表字段名,主表字段名,...) REFERENCES 子表名(子表字段名,子表字段名,...);
注:主表字段个数与子表字段个数需要相同,子表字段为主键字段,若子表主键由多个字段组成,需要全部列出
ALTER TABLE 主表名 DROP CONSTRAINT 约束名; --只能根据约束名删除外键约束

例:
ALTER TABLE emp ADD FOREIGN KEY (job_id) REFERENCES job(id);--添加外键约束
ALTER TABLE emp ADD CONSTRAINT foreign_emp FOREIGN KEY (job_id) REFERENCES job(id); --添加外键约束
ALTER TABLE emp DROP CONSTRAINT foreign_emp;--删除外键约束

13、添加和删除唯一约束

语法:
ALTER TABLE 表名 ADD [CONSTRAINT 约束名] UNIQUE (字段名,字段名,...); --添加唯一约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名; --删除唯一约束
ALTER TABLE 表名 DROP UNIQUE (字段名,字段名,...); --删除唯一约束

例:
ALTER TABLE emp ADD UNIQUE (id,code);  --添加唯一约束
ALTER TABLE emp ADD CONSTRAINT unique_emp UNIQUE (id,code); --添加唯一约束
ALTER TABLE emp DROP UNIQUE (id,code); --删除唯一约束
ALTER TABLE emp DROP CONSTRAINT unique_emp; --删除唯一约束

14、添加和删除检查约束

语法:
ALTER TABLE 表名 ADD [CONSTRAINT 约束名] CHECK (检查条件);--添加检查约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名; --删除检查约束

例:
ALTER TABLE emp ADD CHECK (sex in('男','女')); --添加检查约束
ALTER TABLE emp ADD CONSTRAINT check_emp CHECK (sex in('男','女'));--添加检查约束
ALTER TABLE emp DROP CONSTRAINT check_emp;--删除检查约束

15、添加和删除非空约束

语法:
ALTER TABLE 表名 MODIFY(字段名 NOT NULL,字段名 NOT NULL,...); --添加非空约束
ALTER TABLE 表名 MODIFY(字段名 CONSTRAINT 约束名 NOT NULL,字段名 CONSTRAINT 约束名 NOT NULL,...);  --添加非空约束
ALTER TABLE 表名 MODIFY(字段名 NULL,字段名 NULL,...); --删除非空约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名; --删除非空约束

例:
ALTER TABLE emp MODIFY(id NOT NULL,code NOT NULl); --添加非空约束
ALTER TABLE emp MODIFY(id CONSTRAINT not_emp NOT NULL,code CONSTRAINT not_emp2 NOT NULl); --添加非空约束
ALTER TABLE emp MODIFY(id NULL,code NULl); --删除非空约束
ALTER TABLE emp DROP CONSTRAINT SYS_C0011104; --删除非空约束

16、插入表数据

语法:
INSERT INTO 表名(字段名,字段名,...) VALUES(值1,值2,...);--插入单条记录

INSERT ALL
INTO 表名(字段名,字段名,...) VALUES(值1,值2,...)
INTO 表名(字段名,字段名,...) VALUES(值1,值2,...)
...
SELECT 1 FROM dual; --插入多条记录

INSERT INTO 表名(字段名,字段名,...)
SELECT 字段,字段,... FROM 表名2 WHERE ...; --通过子查询插入数据

例:
INSERT INTO job(id,code,name) VALUES(1,'NO1','测试');--插入单条记录

INSERT ALL
INTO job(id,code,name) VALUES(1,'NO1','测试')
INTO job(id,code,name) VALUES(2,'NO2','开发')
INTO job(id,code,name) VALUES(3,'NO3','运维')
SELECT 1 FROM dual;  --插入多条记录

INSERT INTO job(id,code,name)
SELECT id,code,name from job2 WHERE name<>'实习生'; --通过子查询插入数据

17、修改表数据

语法:
UPDATE 表名 SET 字段1=值1,字段2=值2,,... WHERE ...;

例:
UPDATE job SET name='数据库' WHERE id=3;

18、删除表数据

语法:
DELETE [FROM] 表名 WHERE ...;
TRUNCATE TABLE 表名;
注:TRUNCATE 功能上与不带 WHERE 的 DELETE 语句效果相同,均删除表中的全部行,但 TRUNCATE 速度更快,使用的系统和日志资源少
DELETE 每删除一行数据都会在事务日志中做记录
TRUNCATE 是通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放

DELETE\TRUNCATE\DROP三者的比较:
DELETE TABLE:删除数据,但不释放空间,不删除定义
TRUNCATE TABLE:删除数据,释放空间,但不删除定义
DROP TABLE:删除数据,释放空间,删除定义

例:
DELETE job WHERE id=1;
TRUNCATE TABLE job;

19、查询表数据

语句:
SELECT 字段1,字段2,,... FROM 表名 WHERE ...

例:
SELECT id,code,name FROM job where id=1;

各种简单、高级查找语句略。

20、生效和失效约束

使某个约束失效
语法:alter table tb_name disable constraint constraint_name [cascade];
注意:添加cascade表明要让该表所有的外键约束都级联失效。

使某个约束生效
语法:
alter table tb_name enable constraint constraint_name;
当启用unique和primary key约束时,会自动创建索引。
例如:alter table test enable constraint test_id_pk;

猜你喜欢

转载自blog.csdn.net/cc_0101/article/details/81009709