创建表
--建表语法结构: /* CREATE TABLE 表名( 字段名1 数据类型, 字段名2 数据类型 .... ); */ --建一张老师表,里面包含老师编号,老师姓名,老师联系方式,老师入职日期 CREATE TABLE TEACHER( TNO NUMBER, TNAME VARCHAR2(30), TPHONE CHAR(11), THIREDATE DATE );
复制表
--复制表结构,但是不复制数据 --语法结构:CREATE TABLE 表名 AS SELECT查询语句 WHERE 1 = 2; CREATE TABLE DEPT_BAK AS SELECT * FROM DEPT WHERE 1 = 2; --复制表结构,同时复制数据 --语法结构:CREATE TABLE 表名 AS SELECT查询语句 [WHERE 1 = 1]; CREATE TABLE DEPT_BAK_ALL AS SELECT * FROM DEPT WHERE 1 = 1;
删除表
--删除表 --语法结构:DROP TABLE 表名; DROP TABLE STUDENT;
新增/插入数据
--单行数据插入的语法结构: --语法结构:INSERT INTO 表名(字段名1,字段名2,字段名3...) VALUES(插入值1,插入值2,插入值3...); INSERT INTO TEACHER (TNO, TNAME, TPHONE, THIREDATE) VALUES(1,‘zhangsan‘,‘13300000000‘,SYSDATE); INSERT INTO TEACHER (TNO, TNAME, THIREDATE) VALUES(2,‘lisi‘,SYSDATE - 1); INSERT INTO TEACHER (TNO, TNAME, TPHONE) VALUES(3,‘wangwu‘,‘133‘); --多行数据插入 --语法结构:INSERT INTO 表名 SELECT 查询语句; INSERT INTO TEACHER SELECT * FROM TEACHER; INSERT INTO TEACHER (TNO, TNAME, TPHONE, THIREDATE) SELECT T.TNO, T.TNAME, T.TPHONE, T.THIREDATE FROM TEACHER T;
给表新增字段
--语法结构:ALTER TABLE 表名 ADD 字段名 数据类型; ALTER TABLE TEACHER ADD TLOC VARCHAR2(100);
删除表中数据
--删除表中的所有数据 /* TRUNCATE和DELETE都能把表中的数据全部删除,他们的区别是: 1. TRUNCATE是DDL命令,删除的数据不能恢复; DELETE命令是DML命令,删除后的数据可以通过日志文件恢复。 2. 如果一个表中数据记录很多,TRUNCATE相对DELETE速度快。 */ --语法结构:TRUNCATE TABLE 表名; TRUNCATE TABLE TEACHER; --语法结构:DELETE FROM 表名; DELETE FROM TEACHER; --删除表中符合条件的数据行 --删除TEACHER表中姓名叫WANGWU的老师信息 --DELETE FROM 表名 WHERE 筛选条件; DELETE FROM TEACHER WHERE TNAME = ‘wangwu‘;
删除表中字段
--删除表中的某一列(字段) --语法结构:ALTER TABLE 表名 DROP COLUMN 字段名; ALTER TABLE TEACHER DROP COLUMN TLOC;
修改表名
--语法结构:ALTER TABLE 旧表名 RENAME TO 新表名; ALTER TABLE TEACHER RENAME TO T_TEACHER;
修改列名
--语法结构:ALTER TABLE 表名 RENAME COLUMN 旧列名 TO 新列名; ALTER TABLE T_TEACHER RENAME COLUMN TPHONE TO T_PHONE;
修改字段的数据类型
--语法结构:ALTER TABLE 表名 MODIFY 字段名 新的数据类型; --注意点:如果表中已经有数据,那么修改数据类型时传入的范围精度必须大于数据中的最大长度 ALTER TABLE T_TEACHER MODIFY T_PHONE VARCHAR2(11); --注意点:如果表中已有数据,那么修改数据类型时,不能由一种数据类型改成另外一种数据类型 ALTER TABLE T_TEACHER MODIFY THIREDATE VARCHAR2(100);
数据行的修改(更新数据)
--整列数据都更新 --语法结构:UPDATE 表名 SET 字段名 = 值; UPDATE T_TEACHER SET T_LOC = ‘zhongguo‘; --只更新部分符合要求的数据行 --语法结构:UPDATE 表名 SET 字段名 = 值 WHERE 筛选条件; UPDATE T_TEACHER SET T_PHONE = ‘186xxxxxxx‘ WHERE T_PHONE IS NULL;
总结:
*******DROP、TRUNCATE、DELETE三者的区别:******
(1)DROP:删除表结构以及表中数据,释放空间。简单来说就是把整个表都去掉。DROP 语句将删除表的结构、被依赖的约束、触发器、索引,但是依赖于该表的存储过程、函数将被保留,其状态会变成 INVALID。
(2)TRUNCATE:删除表中所有的数据,释放空间,但不是删除表结构。表结构、约束、索引等保持不变。
(3)DELETE:DELETE 语句用于删除表中的行。执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行回滚操作。不带 WHERE 的 DELETE 语句与 TRUNCATE 语句都是只删除表中的数据,保留表结构。
(4)对于由 FOREIGN KEY(外键)约束引用的表,不能使用 TRUNCATE TABLE 语句,而应该使用不带 WHERE 的 DELETE 语句。由于 TRUNCATE TABLE 记录在日志中,所以它不能激活触发器。
(5)执行速度:DROP > TRUNCATE > DELETE。
(6)DELETE 是属于数据库操作语言(DML),这个操作会放到 ROLLBACK SEGEMENT 中,事务提交之后才生效;如果有相应的触发器,执行的时候将被激活。TRUNCATE、DROP是属于数据库定义语言(DDL),操作立即生效,原数据不放到 ROLLBACK SEGEMENT 中,不能回滚,操作不激活触发器。