包括:SELECT(查询)、UPDATE(更新)、INSERT(插入)、DELETE(删除) 用法: (1.)SELECT:SELECT用法 (2.)UPDATE:UPDATE 表名 SET 要更新的内容设置 WHERE 筛选要更新的字段 demo:UPDATE emp SET empno=7054 WHERE empno=7788; (3.)INSERT:INSERT INTO 表名(字段1,字段2,…) VALUES (val1,val2…) demo:INSERT INTO teacher VALUES(224,‘男’,25,5000) ; (4.)DELETE:DELETE FROM 表名 WHERE 要删除的条件筛选 demo:DELETE FROM emp WHERE empno=7788;
包括:CREATE(创建)、DROP(删除)、RENAME(重命名) CREATTE: 1.创建表格 CREATE TABLE teacher( tno NUMBER(3) NOT NULL UNIQUE, tsex VARCHAR2(10), tage NUMBER(2), tsal NUMBER(7)); 插入数据 INSERT INTO teacher VALUES(224,‘男’,25,5000) ; INSERT INTO teacher VALUES(256,‘男’,30,15000) ; INSERT INTO teacher VALUES(222,‘女’,32,15000) ; INSERT INTO teacher VALUES(222,‘男’,22,6000); INSERT INTO teacher(tsex,tage,tsal) VALUES(‘女’,25,5000) ; 非空约束:NOT NULL 唯一约束:UNIQUE 两者结合:主键约束:PRIMARY KEY 保证数据 2.约束: 创建主键约束句法:CONSTRAINT + 自定义键名(一般以pk_开头) + PRIMARY KEY(被约束字段名称) 创建CHECK约束句法:CONSTRAINT + 自定义键名(一般以ck_开头) + CHECK(被检查的字段的条件) CREATE TABLE teacher( tname number(2) , tage number(2), CONSTRAINT pk_tname PRIMARY KEY(tname), CONSTRAINT ck_tage CHECK(tage BETWEEN 1 AND 100)); 创建外键约束句法:CONSTRAINT + 自定义键名(一般以fk_开头)+FOREIGN KEY(被约束的字段)+REFERENCES +父表(父表中需要约束子表的字段) create table sc( sno varchar2(10), cno varchar2(10), score number(4,2), CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno), CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno) ); 3.约束的联级操作:联级删除、联级更新 删除表格或者更新表格时,若其存在字表(从表),需使用到级联删除和级联更新: 删除表格: 方法一:先把子表数据删除,再删除父表的数据; 方法二:使用级联删除,直接删除父表的数据即可,子表数据自动删除,但要在子表创建外键约束时使用ON DELETE CASCADE create table sc( sno varchar2(10), cno varchar2(10), score number(4,2), CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno) ON DELETE CASCADE, CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno) ON DELETE CASCADE ); 更新表格: 方法一:先更新子表数据为NULL,再更新父表数据,最后将子表数据更新为和父表一致的新字段; UPDATE sc SET sno=NULL WHERE sno=‘s101’; UPDATE student SET sno=‘s111’ WHERE sno=‘s101’; UPDATE sc SET sno=‘S111’ WHERE sno IS NULL; 方法二:使用级联更新(Orcale不支持,需使用触发器),使用ON UPDATE CASCADE create table sc( sno varchar2(10), cno varchar2(10), score number(4,2), CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno) ON UPDATE CASCADE, CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno) ON UPDATE CASCADE ); 4.索引的创建和删除 CREATE INDEX 自定义索引名 ON (数据表)字段; DROP INDEX 索引名;
句法: DECLARE—声明变量 BEGIN —表示开始 NULL; ----过程语句 END; ---- 结束 /
说明: 开启打印功能: SET SERVEROUTPUT ON; 输出语句:类似java的“+”拼接,在plsql中为“||” DBMS_OUTPUT.put_line() DBMS_OUTPUT.put_line(‘hello’||‘world’)
声明变量:DECLARE关键字 例子:键盘输入学生编号,输出学生姓名 DECLARE v_empno NUMBER; v_ename VARCHAR2(10); DEGIN DBMS_OUTPUT.put_line(‘输入编号:’); v_empno:=&empno; SELECT ename INTO v_ename FROM emp WHERE empno=v_empno; DBMS_OUTPUT.put_line(‘学生叫’||v_ename) END; /
表级触发器:在一个DML语句中只触发一次,例如在一个INSERT语句中插入500条数据,则只触发一次,在行级触发器就会触发500次 句法:CREATE OR REPLACE TRIGGER 自定义名 触发条件(BEFORE…)ON 作用表名 例子:周四不能修改和更新数据 CREATE OR REPLACE TRIGGER emp_trigger BEFORE INSERT OR UPDATE ON emp DECLARE v_date VARCHAR2(50); BEGIN SELECT TO_CHAR(SYSDATE,‘day’) INTO v_date FROM dual; IF v_date=‘星期四’ THEN DBMS_OUTPUT.put_line(‘周四不许上班’); END IF; END; / 一条INSERT 增加多条数据,此时只触发一次 INSERT INTO emp(empno,sal) SELECT 1006,5000 FROM dual union SELECT 1007,5000 FROM dual union SELECT 1008,6000 FROM dual union SELECT 1009,5000 FROM dual ;
行级触发器: CREATE OR REPLACE TRIGGER 自定义名 触发条件(BEFORE…)ON 作用表名 FOR EACH ROW 例子: 增加员工信息的薪资在1000-5000之间 CREATE OR REPLACE TRIGGER emp_trigger BEFORE INSERT ON emp FOR EACH ROW BEGIN IF :new.sal>5000 OR :new.sal<1000 THEN RAISE_APPLICATION_ERROR(-20001,‘薪资不在允许范围’); END IF; END; /
INSERT INTO emp(empno,sal) VALUES(1006,6000); INSERT INTO emp(empno,sal) VALUES(1006,6000); INSERT INTO emp(empno,sal) VALUES(1006,6000); INSERT INTO emp(empno,sal) VALUES(1006,7000); 利用行级触发器实现级联更新: CREATE OR REPLACE TRIGGER dept_trigger BEFORE UPDATE OF deptno ON dept FOR EACH ROW BEGIN UPDATE emp SET deptno=:new.deptno WHERE deptno=:old.deptno; END; /