用户
Oracle中的用户可以分为两类:一类是Oracle数据库创建时,由系统自动创建的用户,称为系统用户,如sys和system;另一类用户是利用系统用户创建的用户,称为普通用户。平常我们登录就是该类用户。可以通过以下语句查看:
SELECT USERNAME, ACCOUNT_STATUS, DEFAULT_TABLESPACE FROM DBA_USERS;
用户密码过期处理
1 以sys模式登录
conn / as sysdba
2 修改密码(简单粗暴)
SQL> alter user test identified by [new password];
3 解锁(也许尝试多次登录,用户被锁)
SQL> alter user test account unlock;
4 设置用户密码永不过期
1 查看用户概要文件(一般是DEFAULT)
select * from dba_users where username=test;
2 查看指定概要文件(如default)的密码有效期设置(默认在default概要文件中设置了 “PASSWORD_LIFE_TIME=180天”):
SELECT * FROM dba_profiles WHERE profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
3 将密码有效期由默认的180天修改成“无限制”:sql>alter profile default limit password_life_time unlimited;
修改之后不需要重启动数据库,会立即生效。
权限
Oracle中共有两种权限:系统权限和对象权限。系统权限是指针对数据库中特点操作,比如创建数据表。
对象权限是指对已存在对象的访问和操作权限,这些权限包括:
select:用于查询表、视图和序列
insert:向表或视图中插入新的记录
update:更新表中的数据
delete:删除表中的数据
execute:函数、存储过程、程序包等的调用或执行
index:为表创建索引
reference:为表创建外键
alter:修改表或序列的属性
通常,不同的数据库用户拥有不同的使用权限,比如某用户不能delete或insert数据,这里的权限指的是对象权限。
DDL
数据库模式定义语言(Data Definition Language)。一旦执行,立即生效,不会回滚。
DDL包括:CREATE DATABASE
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE VIEW
ALTER VIEW
DROP VIEW
TRUNCATE TABLE
DELETE、TRUNCATE和DROP 的一句话区别
想删除表,当然用drop;
想保留表而将所有数据删除. 如果和事务无关,用truncate即可;
如果和事务有关,或者想触发trigger,还是用delete。
DML
数据库操纵语言(Data Manipulation Language)。执行后,需要提交才能正式生效。也可以回滚,返回之前的状态。
DML包括:SELECT
INSERT
UPDATE
DELETE
主键
主键是对表数据唯一性的规定,一张表只能有一个主键约束。主键约束和唯一性约束区别,可以这样理解,主键约束是对表数据的标示,而唯一性约束是从业务对数据的标示。创建主键方法:
ALTER TABLE 表名 ADD (
CONSTRAINT PK_HUBOHK_STORE_RATE
PRIMARY KEY
(字段1, 字段2, ...));
如果以一个字段当主键,这样写:
CREATE TABLE 表名
(
ID VARCHAR2(10 BYTE) NOT NULL PRIMARY KEY,
NAME VARCHAR2(10 BYTE) NOT NULL,
...
...
...
);
索引
注意事项1,小数据量的表不宜使用索引
2,频繁使用insert、delete和update不宜使用
使用索引误区,导致索引失效
1,使用比较运算符
select * from test where name <> 'DEMO';
2,使用函数
select * from test where instr(name, '_') = 5;
3,联合索引
建立的索引,由3个字段组成
CREATE INDEX idx_test ON test
(col_1, col_2, col_3);
使用其中一个字段作为查询条件:select * from test where col_2 = 'RED';这种情况,索引效果失效。
只有当查询条件中包含前导列(即联合索引的第一列),才能发挥联合索引idx_test的作用。
写法:
CREATE INDEX 索引名 ON 表名
(字段1, 字段2, ...)
触发器
触发器,不允许显示调用,只能在Oracle在合适的时机自动调用。可以在动作执行之前或执行之后,进行自定义操作。
创建语句触发器:
create or replace trigger tr_employee_log
before insert or update
on t_employees
begin
insert into employee_log values(user, sysdate);
end;
当尝试向表 t_employees插入数据时,那么同样的employee_log也会查询一条数据,用来记录日志。
行触发器,顾名思义指的是针对行数据操作,必须包含for each row子句。
常见的用法,转换大小写、取最大值、数据初始0