「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。
1. DDL
1.1 创建表
基本格式:
CREATE TABLE 表名 (
列名 类型,
列名 类型,
列名 类型,
……
)
例如:
CREATE TABLE t_student (
stu_id number(9),
stu_name varchar2(50),
stu_age number(2),
stu_date date
……
)
从已有的数据创建表:
CREATE TABLE stud2 AS SELECT * FROM stud
1.2 修改表
- 修改表名称:
RENAME 表名 to 新表名
- 给表添加备注:
COMMENT ON TABLE 表名 IS '表的说明'
- 给列添加备注:
COMMENT ON COLUMN 表名.列名 IS '列的说明'
- 修改表结构:
ALTER TABLE 表名 ……(后面要跟的语句取决写下面的新增/修改/删除列的应用场景)
- 给表增加列:
ALTER TABLE 表名 ADD 列名 列类型
- 删除列:
ALTER TABLE 表名 DROP COLUMN 列名
- 修改列:
修改列名和列类型
ALTER TABLE 表名 MODIFY 列名 列类型
更改列名
ALTER TABLE 表名 RENAME COLUMN 旧列名 to 新列名
删除列
ALTER TABLE 表名 DROP COLUMN 列名
1.3 删除表
DROP 表名
1.4 查询用户所有表
SELECT * FROM user_tables
1.5 查看表结构
SELECT table_name,column_name, data_type, data_length, data_precision FROM user_tab_columns;
1.6 查看表备注
SELECT * FROM user_tab_comments
1.7 查看列备注
SELECT * FROM user_col_comments
2. DML
2.1 向表中写入新数据行 ( insert )
- 指定列名插值:
INSERT INTO 表名 (列名1,列名2,列名3...) VLAUES (列1的值,列2的值,列3的值...)
- 向所有列插值:
INSERT INTO 表名 VLAUES (列1的值,列2的值,列3的值…)
- 插入的结果从其它表查出来:
INSERT INTO temp2 SELECT * FROM temp2
- 插值时使用序列:
INSERT INTO 表名 (id,列名2,列名3...) VLAUES (序列名称.NEXTVAL,列2的值,列3的值...)
注:序列要先创建,创建和使用序列参考序列章节
2.2 修改数据行 ( update )
基本格式:
UPDATE 表名 SET 字段1=字段1的值,字段2=字段2的值…… WHERE 字段1=字段1的值 [and/or] 字段2=字段2的值……
例1:
UPDATE t_student SET age=20,name=’张三’ WHERE id=1
更新学生表当中id为1的学生信息为:年龄20岁,姓名张三
例2:
UPDATE t_student SET age=20,sex=’女’ WHERE name=’张三’ AND phone=’13012345678’
更新学生表当中姓名为张三,并且手机号为13012345678为学生信息为:年龄20岁,姓名张三
2.3 删除数据行 ( delete )
基本格式:
DELETE FROM 表名 WHERE字段1=字段1的值 [AND/OR] 字段2=字段2的值……
例如:
DELETE FROM t_student WHERE id=1
删除id为1的这个学生的信息
2.4 截断表 ( truncate )
基本格式:
TRUNCATE TABLE表名
截断表指的是将表恢复到初始新建状态,从表中删除所有的行和重置表的存储区域。
2.5 drop,delete,truncate的区别
1.delete和truncate都是只删除表的数据,而不删除表的结构(定义),drop删除数据和定义。
2.delete语句是dml,事务提交之后才生效。truncate和drop是ddl,操作立即生效不需提交事务,不能回滚。
3.delete如果有相应的trigger,执行的时候将被触发。truncate,drop操作不触发trigger。
4.truncate 将表重置回到最开始。而delete只删除数据,不释放存储空间,等待写入新的数据来覆盖旧的数据。
5.速度一般来说: drop> truncate > delete。
6.truncate只能删除全部的数据,而delete可以通过where条件来筛选要删除的数据。