数据更新:
|- CREATETABLE 新建表名 ASSELECT *|[列名1,列名2,...] FROM 被复制表名; //复制表数据,Oracle专用。
|- INSERTINTO 表名称 [(列名称1,列名称2,...)] VALUES (值1,值2,...);//增加数据,建议写完整格式,即添加上值对应的列名
|- 字符串:使用单引号“‘“
|- 数字:直接编写
|- 日期:当前日期(SYSDATE)、使用TO_DATE()转换,按照日期格式写
|- UPDATE 表名称 SET字段1=值1,字段2=值2,...[WHERE更新条件(s)];
//修改指定数据表中的数据,WHERE 字句中可以使用IN、BETWEEN...AND、LIKE等进行限定查询。当数据库更新数据时,其他用户不能针对当前数据进行任何操作。
|- DELETEFROM 表名称 [WHERE删除条件(s)]; //删除指定数据,分物理删除和逻辑删除。物理删除即DELECT字段,逻辑删除为添加一个字段如flag(默认值为1),‘删除’数据则使用flag=0,搜索时使用WHERE flag=1。
例1:INSERT INTO MYEMP (EMPNO,ENAME,JOB,SAL) VALUES(5369,'WENWEN', ‘TEACHER’,’2500’); |
例2:UPDATE MYEMP SET SAL=0 WHERE ENAME='SMITH'; |
例3:UPDATE MYEMP SET SAL=( SELECT SAL FROM MYEMP WHERE ENAME='SMITH') WHERE ENAME='ALLEN'; |
例4:UPDATE MYEMP SET SAL=SAL*1.2 WHERE SAL<( SELECT AVG(SAL) FROM MYEMP); |
------------------------------------------------------------------------------------------------------------
事务处理: //事务是针对数据更新使用的,只有DML的更新操作才存在事务的支持
|- Session(会话,表示唯一的一个登陆用户)
|- COMMIT:事务提交,即如果已经执行了多条操作,那么只有执行了commit之后更新才会真正发出;在没有执行commit之前,所有更新操作都会保存在缓冲区。
|- ROLLBACK:事务回滚操作,即如果发现更新操作有问题,则恢复所有的更新操作,以保证原本的数据不被破坏。
-------------------------------------------------------------------------------------------------------------
伪列:
|- ROWNUM:显示每行的行号1,2,3,4... //操作:1、取出第一行记录(只能取出第一行);2、取出前N行记录(可通过子查询查询n-m行或后n行数据)。
|- ROWID:行ID,每一行的ID都唯一 //例:AAASO3AAEAAAAITAAA,数据的对象编号:AAASO3,数据保存文件编号:AAE,数据保存的块号:AAAAIT,数据的保存行AAA。
例1:SELECT ROWNUM,EMPNO,ENAME,JOB,SAL FROM EMP; |
例2:SELECT * FROM EMP WHERE ROWNUM=1; |
例3:SELECT * FROM EMP WHERE ROWNUM<=10; |
例4:SELECT * FROM ( SELECT * FROM EMP WHERE ROWNUM<=10) WHERE EMPNO NOT IN ( SELECT EMPNO FROM EMP WHERE ROWNUM<5); //通过子查询,查询5-10行的数据 |
例5:SELECT * FROM ( SELECT ROWNUM RN,EMPNO,ENAME,JOB FROM EMP WHERE ROWNUM<=10) WHERE RN>=5; //创建一个带有序号的表,并将ROWNUM使用别名重命名(伪列变实列) |
例6:SELECT DEPTNO,DNAME,LOC,MIN(ROWID) FROM MYDAPT GROUP BY DEPTNO,DNAME,LOC; //通过ROWID找到重复数据的最早数据 |
例7:DELETE FROM MYDAPT WHERE ROWID NOT IN( SELECT MIN(ROWID) FROM MYDAPT GROUP BY DEPTNO,DNAME,LOC); //删除重复数据并保留最早数据 |
----------------------------------------------------------------------------------------------------------------
DDL
表结构:
数据类型 | 作用 |
VARCHAR2(n) | 字符型,n表示最大长度,一般保存长度较小的内容(200字以内),oracle独占,通用SQL使用VARCHAR(n) |
NUMBER(n,m) | NUMBER(n):整数,最多不超过n个长度 |
NUMBER(n,m):小数占m位,整数占n-m位 | |
NUMBER:既可以整数也可以小数 | |
DATE | 日期时间数据 |
CLOB | 大文本数据,最多保存4G文字 |
BLOB(不常用) | 二进制数据,最多保存4G数据(文字、图片、音频) |
|- CREATE TABLE表名称( 列名称 数据类型 [DEFAULT默认值],
列名称 数据类型 [DEFAULT默认值],
...
列名称 数据类型 [DEFAULT默认值]
);//创建新表
|- RENAME 旧表名称 TO新表名称; //数据表重命名
|- TRUNCATE TABLE 表名称; //截断表,立即清空表数据并释放表所占用的数据空间(oracle独占)
|- CREATETABLE 新表名称 AS子查询; //复制表
|- DROPTABLE 表名称; //删除表(扔入回收站)
|- DROPTABLE 表名称 PURGE; //彻底删除(不经过回收站完全删除)
|- SELECT* FROM USER_RECYCLEBIN; //查看回收站
|- PURGETABLE 表名称(回收站内的); //删除回收站内的表
|- PURGERECYCLEBIN; //清空回收站
|- FLASHBACKTABLE 表名 TOBEFORE DROP; //闪回(从垃圾箱恢复被删除的数据表)
|- ALTERTABLE 表名称 ADD(
列名称数据类型 [DEFAULT默认值],
列名称数据类型 [DEFAULT默认值],...
);//添加表中的数据列
|- ALTER TABLE表名称 MODIFY(
列名称数据类型 [DEFAULT默认值],
列名称数据类型 [DEFAULT默认值],...
);//修改表中的数据列
|- ALTER TABLE表名称 DROP COLUMN 列名称;//删除表中的数据列
例1:CREATE TABLE member( mid NUMBER, name VARCHAR2(50) DEFAULT ‘无名氏’, age NUMBER(3), birthday DATE DEFAULT SYSDATE, note CLOB); |
例2:CREATE TABLE EMP1 AS (SELECT * FROM EMP); |
例3:CREATE TABLE DEPTINFOR AS SELECT d.DEPTNO,d.DNAME,d.LOC,temp.COUNT,temp.AVG FROM DEPT d,( SELECT DEPTNO,COUNT(EMPNO) COUNT,AVG(SAL) AVG FROM EMP GROUP BY DEPTNO ) temp WHERE d.DEPTNO=temp.DEPTNO(+); |
例4:CREATE TABLE DEPTINFOR AS SELECT * FROM EMP WHERE 1=2; //仅复制表结构,但不复制数据 |
例5:FLASHBACK TABLE EMP1 TO BEFORE DROP; //闪回 |
----------------------------------------------------------------------------------------------------------------
约束:
|- 非空约束:NOTNULL,简称NK //该字段的内容不允许设置为null值
|- 唯一约束:UNIQUE,简称NK //该列的内容不允许重复(空NULL不受该限制,即允许多值为空NULL)
|- 为约束设置名称:CONSTRAINT 设置的名称约束名(列名[,列名...]) //为约束的报错提示信息设置易读的代码名称
|- 主键约束:PRIMARYKEY,简称PK //非空约束+唯一约束不允许重复,也不允许为空
|- 检查约束:CHECK,简称CK //在进行数据更新操作前设置过滤条件
|- 外键约束:FOREIGNKEY,简称FK //控制子表中某一列(父表该列必须设置主键约束或者唯一约束)的内容与父表中的数据范围相匹配
|- 有约束强制删除表:DROP TABLE 表名CASCADE CONSTRAINT;
|- 数据的级联删除:ON DELETE CASCADE; //父表数据删除,对应子表数据自动删除
|- 数据的级联更新:ON DELETE SET NULL; //父表数据删除,对应字表数据的对应内容设置为NULL
|- 增加约束(不要使用):ALTER TABLE 表名称 ADD CONSTRAINT约束名约束类型(字段)[选项];//如有违反主键的数据,则不能添加约束;增加非空约束,只能通过修改表结构完成
|- 删除约束(不要使用):ALTER TABLE 表名称 DROP CONSTRAINT约束名; //删除非空约束,只能通过修改表结构完成
例1:CREATE TABLE member( name VARCHAR2(10) NOT NULL, age NUMBER(3)); //name列不允许插入空 |
例2:CREATE TABLE member( name VARCHAR2(10) NOT NULL UNIQUE, age NUMBER(3)); //name列不允许插入空且值不允许重复 |
例3:CREATE TABLE member( name VARCHAR2(10), age NUMBER(3), email VARCHAR2(30), CONSTRAINT uk_email UNIQUE(email)); //为约束设置名称 |
例4:CREATE TABLE member( name VARCHAR2(10), age NUMBER(3), email VARCHAR2(30), CONSTRAINT age_check CHECK(age BETWEEN 0 AND 200)); //添加约束条件 |
例5:CREATE TABLE member( name VARCHAR2(10), mid NUMBER, CONSTRAINT pk_mid PRIMARY KEY(mid));
CREATE TABLE book( num NUMBER(5), title VARCHAR2(20), mid NUMBER, CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid)); //REFERENCES参考其他表中的某列数据 |
例6:CREATE TABLE member( name VARCHAR2(10), mid NUMBER, CONSTRAINT pk_mid PRIMARY KEY(mid));
CREATE TABLE book( num NUMBER(5), title VARCHAR2(20), mid NUMBER, CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid) ON DELETE CASCADE); //级联删除 |
----------------------------------------------------------------------------------------------------------------
序列:
CREATE SEQUENCE 序列名称
[INCREMENT BY 步长]
[START WITH 开始值]
[MAXVALUE 最大值|NOMAXVALUE]
[MINVALUE 最小值|NOMAXVALUE]
[CYCLE|NOCYCLE] //是否循环
[CACHE 缓存数据|NOCACHE];
序列对象.nextval:表示进行序列增长,每调用一次,序列加上指定的步长;
序列对象.currval:表示取得当前的序列内容,不管如何调用,序列内容不改变。
例1: INSERT INTO mytab (mid,name) VALUES(myseq.nextval,'张三’); |
例2:SELECT * FROM user_sequences; //查看序列数据字典 |
----------------------------------------------------------------------------------------------------------------
同义词 (oracle独占)//其他用户可以直接通过别名而不是“用户名.表名称”访问某用户的数据表
|- CREATE[PUBLIC] SYNONYM 同义词名称 FOR用户名.表名称;//不加PUBLIC,system用户不能使用;
----------------------------------------------------------------------------------------------------------------
视图
|- CREATE [OR REPLACE] VIEW 视图名称 AS子查询 [ WITH READ ONLY];
//用视图封装复杂的子查询;OR REPLACE:如果没有该视图,创建新视图,如果该视图已存在,则修改替换该视图;WITH READ ONLY:不允许修改视图值
|- DROPVIEW 视图名称; //删除视图
例1:SELECT * FROM user_views; //查看视图数据字典 |
----------------------------------------------------------------------------------------------------------------
索引
|- CREATE INDEX 索引名 ON用户名.表名称(字段); //创建索引,将该字段使用二叉树检索(修改时消耗大量资源)
----------------------------------------------------------------------------------------------------------------
用户管理 //使用sys用户
|- CREATE USER 新用户名 IDENTIFIED BY密码; //创建新用户,但新没有session会话权限
|- GRANTCREATE SESSION TO 用户名; //为用户分配session会话权限
|- GRANTCREATE TABLE TO 用户名; //为用户分配创建数据表权限
。。。。。。
|- GRANTCONNECT, RESOURSE TO 用户名;//为用户分配角色,一次性分配权限
|- ALTER USER 用户名 IDENTIFIED BY新密码;//修改用户密码
|- ALTERUSER 用户名PASSWORD EXPIRE; //用户登录后需要立即修改密码
|- ALTERUSER 用户名 ACCOUNTLOCK; //锁定用户
|- ALTERUSER 用户名 ACCOUNTUNLOCK; //解锁用户
|- GRANTSELECT,INSERT,UPDATE,DELETE ON用户名1.表名 TO用户名2; //对象权限:将用户1的某数据表的查看、插入、更新、删除的权限授予给用户2
|- REVOKECONNECT,RESOURSE FROM 用户名;
REVOKE CREATE SESSION,CREATE TABLEFROM用户名; //撤销权限
|- DROPUSER 用户名CASCADE; //删除用户
----------------------------------------------------------------------------------------------------------------
备份
|- exp //备份数据,在cmd命令行的备份目录中启用exp
|- imp //还原数据,在cmd命令行的备份目录中启用img
|- 冷备份: 1、使用sys登录;
2、找到控制文件:SELECT* FROM v$controlfile;
3、找到重做文件:SELECT* FROM v$logfile;
4、找到数据文件:SELECT* FROM v$datefile;
5、找到配置文件:SHOWPARAMETER pfile;
6、关闭数据库服务:SHUTDOWNIMMEDIATE;
7、拷贝以上文件到指定备份目录
8、启动数据库服务:STARTUP
----------------------------------------------------------------------------------------------------------------
Oracle分页
SELECT *
FROM (
SELECT ROWNUM rowno,表名.*
FROM 表名
WHERE ROWNUM <=20
)
WHERE rowno>=10;