一、plsql操作
-
免密登录
tools->preferences->logon history->fexed users->user21/user21
-
关键字转大写
tools->preferences->Editor->keywords->uppercase
-
view查看表结构,edit修改表结构
-
query data 查看表里的记录,edit data修改表里的记录
二、外键约束
-
外键,第三范式,别的表中
-
创建一个班级表
CREATE TABLE t_clazz(
ID number PRIMARY KEY,
name varchar(20) NOT NULL,
remark varchar(50)); -
给t1表增加班级这一列
ALTER TABLE t1 ADD clazz NUMBER;
-
给t1表增加外键,参照班级表的id
-- 外键什么都不写(no action),当子表有关联时删除父表记录会报错
ALTER TABLE t1 ADD CONSTRAINT t1_fk FOREIGN KEY(clazz)
REFERENCES t_clazz(ID);
-- 设置为set null,删除父表记录时,把子表相应外键置为空
ALTER TABLE t1 ADD CONSTRAINT t1_fk FOREIGN KEY(clazz)
REFERENCES t_clazz(ID) ON DELETE SET NULL;
-- cascade级联删除,删除父表时,子表相应的记录也会被删除
ALTER TABLE t1 ADD CONSTRAINT t1_fk FOREIGN KEY(clazz)
REFERENCES t_clazz(ID) ON DELETE CASCADE; -
删除外键约束
ALTER TABLE t1 DROP CONSTRAINT t1_fk;
三、truncate
-
作用:截断表,删除表中的数据,但是保留表的结构和索引、触发器等对象
-
delete删除表中的记录,对表也没有影响(DML)
-
truncate(DDL),类似于drop table,然后再create table,假设truncate命令执行后,后台drop表,然后再create表,对于客户感觉不到
四、DML(数据操作语言,增删改)
-
插入
-- insert不写列时,指定的值的顺序一定要和表结构中的列的顺序保持一致
insert into 表名(列1,列2,...) values(值1,值2,...);
-- 向班级表中添加数据
INSERT INTO t_clazz VALUES(1,'name1','');
-- 向t1表中添加数据
INSERT INTO t1(id,NAME,age,sex,clazz) VALUES(3,'name1',10,0,1); -
修改
-- set后面是要修改的条件
-- 把所有记录都修改
UPDATE t_clazz SET NAME='新名称';
-- 把id为1的记录修改
UPDATE t_clazz SET NAME='新名称1' WHERE ID=1; -
删除
DELETE FROM t_clazz WHERE ID=1;
-- delete针对表中的数据,trunicate针对表对象的
-- delete不会释放空间,truncate会释放空间
-- delete可以恢复数据,truncate不可以恢复
-- drop释放空间,表上的所有对象都丢失了,truncate不会丢失表上的对象
-- 有害化排序:delete->truncate->drop
五、DQL(数据查询语言)
-
sys登录
-
账号:sys 密码:orcl
-
-
获取当前用户下所有的表的信息
SELECT * FROM User_Tables t;
-
获取当前表的所有字段信息
SELECT * FROM User_Tab_Columns WHERE table_name='T_CLAZZ';
-
给表起别名
as 或者是空格
SELECT sal,empno,ename,sal+100 sal2,comm,sal+comm money FROM emp; -
scott是Oracle一个测试账号,默认是锁定,要解锁,解锁完了要修改密码(强制)
-- scott下面有几张表,供测试使用
-- 以sysdba登录
sqlplus / as sysdba
-- 解锁scott账号
alter user scott account unlock;
-- 修改scott密码
alter user scott identified by scott;
-- 登录scott账号
sqlplus scott/scott -
查询空或者非空
SELECT SAL FROM emp WHERE SAL IS NULL;
-
where过滤
-- 查询工资大于3000的员工
SELECT empno,ename,sal FROM emp WHERE sal>=3000; -
去重
-- 查询部门里面有人的部门号
SELECT DISTINCT deptno FROM emp;
-- distinct对后面的字段都进行过滤
SELECT DISTINCT deptno,sal FROM emp; -
排序
-- 升序ASC,降序DESC
SELECT * FROM emp ORDER BY sal;
SELECT * FROM emp ORDER BY sal;
-- 部门升序,部门中的员工工资降序
SELECT * FROM emp ORDER BY deptno ASC,sal DESC;
六、作业
-
按照emp表中的入职时间降序查询
-
获取emp表中的所有职位信息,不要重复显示
-
显示每个员工的sal增加500后的信息
-
JavaScript中找出数组重复的元素
[10,9,3,7,2,8,4,5,7,9],找出9和7