创建表、约束、修改表
复制表
--复制表
CREATE TABLE MYEMP AS SELECT * FROM EMP;
insert操作
--insert操作
语法:insert into 表名(字段1,字段2....) values (值1,值2....)
INSERT INTO MYEMP (empno,ename,job,mgr,hiredate,sal,comm,deptno)
VALUES (9527,'唐伯虎','SALESMAN',7839,sysdate,2500,130,40);
INSERT INTO MYEMP (empno,ename,job,sal,comm,deptno)
VALUES (1521,'wow','CLERK',1600,null,10);
INSERT INTO MYEMP VALUES (3306,'lol','PERSIDENT',7788,to_date('2008-2-14','yyyy-mm-dd'),1000,0,30);
SELECT * FROM MYEMP;
delete操作
--delete操作
语法:delete from 表名 where 条件
DELETE FROM MYEMP WHERE EMPNO=9257;
------截断表truncate;截断表功能上类似于没有where子句的delete
语法:truncate table 表名;
truncate与delete的区别:
delete会记录日志,所以速度较慢;而truncate不会记录日志,清空表并释放表所占的资源,所以速度快
delete可以根据条件只删除部门数据,而truncate只能一次清空表中所有数据
update操作
--update操作
语法:update 表名 set 字段1=值1,字段2=值2... where 条件
UPDATE MYEMP SET SAL=888,COMM=222 WHERE ENAME='LOL';
创建表
--创建表
create table 表名(字段名 类型 [default 默认的值],字段名 类型[default 默认的值],...)
create table 表名 as(select语句)
select语句:select * from 表名1:复制一张表,和select 表中的结构和数据一样
select语句:select * from 表名1 where 1=2:复制一张表,和select 表中的结构一样
创建一张person表(身份证号pid,姓名name,生日bithday,性别sex 默认性别是男)
CREATE TABLE PERSON
(
PID NUMBER (20),
NAME VARCHAR2(10),
BIRTHDAY DATE,
SEX VARCHAR2(2) DEFAULT '男'
);
创建表并添加约束
--创建表并添加约束
CREATE TABLE goods(
goodsid varchar2(8),
goodname varchar2(20),
unitprice number(10,2),
category varchar2(8),
provider varchar2(30),
CONSTRAINT goodsid_pk PRIMARY KEY(goodsid),--添加主键约束
CONSTRAINT unitprice_ck check(unitprice>0) --添加检查约束
);
CREATE TABLE customer(
customerid varchar2(5),
name varchar2(8) NOT NULL, --添加非空约束
address varchar2(20),
email number(10,2),
sex varchar2(8),
cardid varchar2(30),
CONSTRAINT customerid_pk PRIMARY KEY(customerid),
CONSTRAINT email_uq unique(email), --添加唯一约束
CONSTRAINT sex_ck check(sex in ('male','female'))
);
CREATE TABLE purchase(
customerid varchar2(8),
goodsid varchar2(8),
nums number(2),
CONSTRAINT customer_fk FOREIGN KEY(customerid) REFERENCES customer_wzl(customerid),
CONSTRAINT goods_fk FOREIGN KEY(goodsid) REFERENCES goods_wzl1(goodsid), --添加外键约束
CONSTRAINT nums_ck check(nums between 1 and 30)
);
修改表
--修改表
添加列:alter table 表名 add(字段名 类型 [default 默认的值],字段名 类型[default 默认的值],...);
---为person增加一个字段(address)
alter table person add(address varchar2(50));
修改列的类型和默认值:alter table 表名 modify(字段名 类型 [default 默认的值],字段名 类型[default 默认的值],...);
---修改person字段sex的默认值为女:
alter table person modify(sex varchar2(5) default '女');
字段重命名:alter table 表名 rename column 旧的字段名 to 新的字段名;
为表重命令:rename 旧的表名 to 新的表名
删除列:alter table 表名 drop column 字段名;
删除表
--删除表
drop table 表名;
添加注释
--添加注释
可以为表或字段添加注释
comment on table 表名 is 注释;
comment on column 表名.列名 is 注释;
---给表a添加注释
SQL>comment on table a is 'test table';
---查看表a的注释
SQL>select * from user_tab_comments where table_name='A';
---给表a中列birthday添加注释
SQL>comment on column a.birthday is '出生日期';
---查看字段的注释
SQL>select * from user_col_comments where table_name='A';
行号、物理地址
--行号、物理地址
7)ROWNUM 行号,伪列
SELECT ROWNUM,DEPTNO,DNAME FROM DEPT; --行号,伪列
查询出emp表的前5条记录
SELECT * FROM EMP WHERE ROWNUM<=5;
查询出emp表的第6条到第9条的记录 --ROWNUM没有>,>=的用法
SELECT TEMP.RM,TEMP.EMPNO,TEMP.ENAME
FROM (SELECT ROWNUM RM,EMPNO,ENAME FROM EMP) TEMP
WHERE TEMP.RM BETWEEN 6 AND 9;
ROWID 物理地址 --ROWID 物理地址 ,主要用于删除表中大量重复的记录
SELECT ROWID ,DEPT.* FROM DEPT;
集合操作
--集合操作
UNION: 并
SELECT * FROM EMP UNION SELECT * FROM EMP WHERE DEPTNO=10;
UNION ALL:并,不去除重复记录
SELECT * FROM EMP UNION ALL SELECT * FROM EMP WHERE DEPTNO=10;
MINUS:取2个查询结果中不同的部分
SELECT * FROM EMP MINUS SELECT * FROM EMP WHERE DEPTNO=10;
INTERSECT: 交叉
SELECT * FROM EMP INTERSECT SELECT * FROM EMP WHERE DEPTNO=10;
事务操作
--事务操作
--事务处理:用来保证数据的完整性,事务中所有的操作要么都成功,要么都失败
--事务特性:原子性、一致性、永久性、隔离性
在Oracle中每打开一个窗口,都会与数据库建立一个会话Session,一个Session对数据库所做的修改,不会立即更新到数据库中,而是只在在缓冲区中,允许回滚操作
--事务操作
commit 提交事务
rollback 回滚事务
事务保存点
可以把一个事务分成多个部分
设置回滚点:
savepoint 事务保存点
rollback to 事务保存点
注:一旦提交了事务,则肯定无法回滚
commit操作被内置在DDL语句中,即执行DDL操作时会自动提交事务
表的管理
--表的管理
1)基本数据类型
字符型:
varchar2(n):实际占用多少就多少
char(n):如果不足,是以空格来填充
char(2):a
数值型
number(p,s)
s=0
number(p,0)=number(p):整数
s>0:小数的右边S位
number(p点,s)
4566.45
number(6,2)
s<0:小数点左边S位
日期型
date表示日期,默认格式为:31-5月-14
larger object(4G)
clob 大文本数据
blob 二进制大数据