1.ACID特性(事务是恢复和并发的控制的基本单位)
- Atomic(原子性):一个事务中的所有操作,要么全部完成,要么全部不完成
- Consistency(一致性):事务执行前后数据库都必须处于一致性状态
- Isolation(隔离性):数据所处的状态要么是修改前的状态,要么是修改以后的状态
- Durability(持久性):事务一旦成功结束,更新就必须永久保存下来
2.SQL语句基础
- SQL语句的关键字不区分大小写
- 标识符必须以字母开头
- 标识符包括字母、数字和三个特殊字符(#_$)
3.常用数据类型
1. 字符类型
- CHAR:一个定长字符串,当位数不足自动用空格填充来达到其最大长度。
- VARCHAR2:目前这也是VARCHAR 的同义词。这是一个变长字符串,与CHAR 类型不同,它不会用空格填充至最大长度。
2.数字类型
- NUMBER:该数据类型能存储精度最多达38位的数字。每个数存储在一个变长字段中,其长度在0~22字节之间。
- NUMBER( p,s ) p表示精度(总长度),s表示小数位置且四舍五入
3.日期类型
-
DATE:一个7字节的定宽日期/时间数据类型。其中总包含7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。
-
TIMESTAMP:一个7 字节或12.字节的定宽日期/时间数据类型。它与DATE 数据类型不同,因为TIMESTAMP 可以包含小数秒(fractional second);带小数秒的TIMESTAMP 在小数点右边最多可以保留9位。
4.二进制及大文本数据
-
BLOB:BLOB包含不需要进行字符集转换的“二进制“数据,如果要存储电子表格、字处理文档、图像文件等就很适合采用
-
CLOB:CLOB包含要进行字符集转换的信息。这种数据类型很适合存储纯文本信息。
4.SQL(Structured Query Language) 结构化查询语言
- DQL:数据查询语言 SELECT
- DML:数据操作语言 INSERT,UPDATE,DELETE
- TPL:事务处理语言 BEGIN TRANSACTION,COMMIT,ROLLBACK
- DCL:数据控制语言 GRANT,REVOKE
- DDL:数据定义语言 CREATE,ALTER,DROP
- CCL:指针控制语言 DECLARE CURSOR
1.用户管理
-
create user 用户名 identified by 密码;
(oracle 有个毛病,密码必须以字母开头,如果不以字母开头,它不会创建用户)
-
alter user 用户名 identified by 新密码;
-
drop user 用户名;
-
grant connect to 用户名;
-
grant all on emp to 用户名;
-
revoke select on emp from 用户名;
-
三种标准性角色
- connect:最终用户
- resource:开发人员
- DBA:系统管理员
- with admin option 权限转授
2.表
- oracle 支持的数据类型
- 建表:create table 表名();
- 查看表结构:DESC student;
- 修改表:
-
添加一个字段
ALTER TABLE student add (classId NUMBER(2));
-
修改一个字段的长度
ALTER TABLE student modify (sname VARCHAR2(30));
-
修改字段的类型/或是名字(不能有数据),不建议做
ALTER TABLE student modify (sname CHAR(30));
ALTER TABLE student rename column name to sname; -
删除一个字段不建议做(删了之后,顺序就变了。加就没问题,因为是加在后面)
ALTER TABLE student DROP COLUMN sal;
-
修改表的名字(很少有这种需求)
RENAME student to stu;
- 删除表:DROP TABLE student;
- 插入数据:INSERT INTO student VALUES();
- 修改数据:UPDATE student SET sex = '女' WHERE xh= 'A001';
- 删除数据
- 表结构还在,数据可以恢复:DELETE FROM student;
- 表结构还在,数据不可恢复:truncate TABLE student;
- 删除结构和记录:DROP TABLE student;
- 删除一条记录:delete from student WHERE xh= 'A001';
3.函数
length()、substr(char,m,n) 取字符串的子串,从m位置取n个、concat()、
nvl()、upper()、lower()、
trunc() 截取数字、round() 四舍五入、mod(m,n) 取余、
floor()、ceil()、replace(ename,'A','B')、
sysdate、add_months(d,n)、last_day(d) 该日期当月的最后一天、
to_char(date,format)
4.约束
- 最好把每个约束都定义名字方便查错
-
非空约束和唯一约束
a、非空约束 NOT NULL:使表的列不能为空 CREATE TABLE temp(tem int not null); b、唯一约束UNIQUE:约束列值不能重复,但可以为null,系统会自动建立索引。 CREATE TABLE temp(tem int UNIQUE); ALTER TABLE temp ADD CONSTRAINT con_name UNIQUE(colname);
-
主键
a、建表时定义 CREATE TABLE temp (tem int [CONSTRAINT t_pk] PRIMARY KEY); b、建表时定义 CREATE TABLE temp (tem int, CONSTRAINT con_tem_pk PRIMARY KEY(tem); c、建表后定义 CREATE TABLE temp(tem int); ALTER TABLE temp ADD CONSTRAINT con_tem_pk PRIMARY KEY(tem);
-
外键
a、建立表时定义: CREATE TABLE subTemp(t int [CONSTRAINT s_fk_t] REFERENCES temp(t)); b、建立表时定义: CREATE TABLE empcon(deptno Number, CONSTRAINT empcon_deptno_fk FOREIGN KEY(deptno) REFERENCE deptcon(deptno)); c、定义表后定义 ALTER TABLE empcon ADD CONSTRAINT empcon_deptno_fk FOREIGN KEY(deptno) REFERENCES deptcon(deptno);
-
检查约束
a、建立表时定义: CREATE TABLE temp(t int CHECK(t in (1,2,3))); b、建立表时定义: CREATE TABLE temp(t int, CONSTRAINT t_Ck CHECK(t>10)); c、定义表后定义 ALTER TABLE empcon ADD CONSTRAINT empcon_deptno_ck check t>20;
-
维护约束
1、a、如果增加not null约束使用: ALTER TABLE tab MODIFY col [CONSTRAINT c_name] NOT NULL; b、如果是增加UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK约束: ALTER TABLE tab ADD [CONSTRAINT c_name] CON_TYPE (column); 2、修改约束名: -- 约束是ORACLE中的对象,在同一个用户中是不允许相同的。 修改:ALTER TABLE tab RENAME CONSTRAINT old_cK TO new_ck; 3、删除约束: ALTER TABLE tab DROP CONSTRAINT c_name|PRIMARY KEY[CASCADE]; 4、禁止约束 ALTER TABLE tab DISABLE CONSTRAINT c_name [CASCADE]; 5、激活约束 ALTER TABLE tab ENABLE CONSTRAINT c_name;
5.索引
1.索引用于加快数据定位的。通过索引,可以大大降低IO次数,提高效率。
2.索引的自动建立:
当我们建立主键约束和唯一性约束时,系统会给我们自动建立唯一索引。
3.索引的分类:
- 单列索引和复合索引:单列索引就是索引列为一列,复合索引就是索引列为多列。
- 唯一索引和非唯一索引:唯一索引是指索引列的值不重复。非唯一索引则相反
a、建立索引:
CREATE INDEX ind_name ON tab(col,col2…);
b、删除索引:
DROP INDEX ind_name;
c、显示索引信息:
select index_name,uniqueness,status
from user_indexes where table_name=‘EMP’;
6.序列
是用来生成唯一数字的数据库对象。也成为序列生成器。
a、建立序列:
CREATE SEQUENCE no_id
START WITH 100 --开始标号
INCREMENT BY 1 --增量
MAXVALUE 999 --最大值
b、使用序列:
insert into tab(tid) values(no_id.nextval);
-- nextval的值是每调用一次就增加一次
-- currval的值调用时,还是和自身会话的当前值一样
c、修改序列:
ALTER SEQUENCE s_name [INCREMENT BY n][MAXVLUE n];
-- 初始化值不能修改
d、删除序列:
DROP SEQUENCE s_name;
7.视图
a、 创建视图
create view 视图名 as select 语句[with read only];
b、创建或修改视图
create or replace view 视图名 as select 语句 [with read only];
c、删除视图
drop view 视图名;
d、查看视图信息
select text from user_views where view_name=‘v_name’;
8.同义词:synonym
create synonym e for emp;
9.事务
- 设置保存点:savepoint a;
- 取消部分事务:rollback to a;
- 取消全部事务:rollback;
- 提交事务:commit;
- 设置只读事务:set transaction read only;
10.备份还原
-
导出表
exp userid=scott/tiger@myoral tables=(emp,dept) file=d:\e1.dmp
-
导入表
imp userid=scott/tiger@myorcl tables=(emp) file=d:\xx.dmp;
4.查询
1.普通查询
- case when ... then ... end
- decode
select decode('苹果','苹果',1,'梨子',2,0) from dual;
结果为:1
select decode('梨子','苹果',1,'梨子',2,0) from dual;
结果为:2
select decode('橘子','苹果',1,'梨子',2,0) from dual;
结果为:0
第一个参数是需要比较的值,第二个,第四个,是匹配值,匹配成功第二个则输出1,匹配成功第四个输出2,都没匹配输出0
2.分组查询
- group by 用于对查询的结果分组统计;having 子句用于限制分组显示结果
- select 列表项中不存在的列可以出现在 group by 的列表项中
- select 列表项中出现的列必须全部出现在 group by 后面。(聚合函数除外)
3.自连接
- 自连接是指在同一张表的连接查询
4.子查询
- 子查询是指嵌入在其他 sql 语句中的 select 语句,也叫嵌套查询。
5.分页查询
-
根据 rowid(不变的) 来分
-
按分析函数来分
-
按 rownum (改变的)来分
startnum=6;
Endnum=10;
6.合并查询
- union 操作符用于取得两个结果集的并集,会自动去掉结果集中重复行
- union all 操作符与 union 相似,但是它不会取消重复行,而且不会排序
- intersect 使用该操作符用于取得两个结果集的交集
- minus 使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不存在第二个集合中的数据。
网友评论