SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言(TCL)。
1、DCL:数据控制语言
用来控制数据库的访问,授权,角色控制等
- GRANT 授权
- REVOKE 取消授权
2、TCL :事务控制语言
事务 是由若干项的DML操作组合而成。DDL语句 和DCL 是没有事务的。
- SAVEPOINT 设置保存点
- ROLLBACK 回滚
- SET SAVEPOINT 设置保存点,可以回滚到此处
- SET TRANSACTION 改变事务选项
1 . 事务的作用:
可以保证数据的完整性
数据发生改变可以在提交之前进行预览
delele 将数据库中的数据放到缓冲区
如果执行rollback 则将数据在还原到数据库
如果执行commit 则直接将缓冲区的数据删除update 将元数据先拷贝到缓冲区
如果执行rollback 则还原
如果执行commit 则删除元数据 保存新数据
2 . 事务的特性(ACID四大特性)
原子性: 事务是一个完成的操作 是不可分割的。如果一个事务中包含了多条DML语句 要么都成功 要么都是失败
一致性: 一个查询的结果必须与数据库在查询开始的状态一直
隔离性: 对于不同的回话,未完成的事务(没有提交的事务)必须不可见
持久性:事务一旦提交 数据的更改是不可逆
3、DDL :数据(模式)定义语言
用于定义数据库的结构 比如创建 修改或删除数据库对象。
包括:show、drop、create、truncate、alter等
DDL语言的操作:
DDL 操作是隐性提交的,不能rollback,不会触发触发器
关于数据库 database
- 查看所有数据库名称:
show database;
- 删除数据库:
drop database 数据库名;
- 切换数据库:
use database 数据库名;
- 查看数据库定义的信息:
show create database 数据库名;
- 修改数据库默认的字符集:
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
关于表 table
- 创建表:
create table 表名;
- 查看数据库中所有的表:
show tables;
- 删除表:
drop table 表名;
- 查看表结构:
desc 表名;
- 更改表名:
rename table 表名 to 新表名;
- 修改表:
增加列:alter table 表名 add 列名 类型(长度) [约束];
更改列名:alter table 表名 change 旧列名 新列名 类型(长度) [约束];
修改字段长度:alter table 表名 modify 列名 类型(长度) [约束];
删除列:alter table 表名 drop 列名;
truncate
删除表中记录,不改变结构
4、DML 数据操作语言
DML 用于查询与修改数据记录 (增删查改):insert、delete、select、update
数据处理:
- insert :添加数据到数据库中:
-- 格式
insert into 表名(列名1,列名2……) values(值1,值2……)
-- 简写语法(不推荐) 给表中的所有字段插入值
insert into 表名 values(值,值,.....)
注意:
- 使用这种语法每次只能向表中插入一条数据
- 列名与列值的类型、个数、顺序要一一对应。没有指定要插入的列时,表示按创建表时列的顺序插入所有列的值
- 值不要超出列定义的长度。
- 如果有的列没有明确的制定某一列的值 则该列默认添加null值
- 插入的日期和字符一样,都使用单引号括起来。
创建插入脚本,仅限于oracle的单独操作:
-- 从其他表拷贝数据
insert into emp2 select * from emp where deptno=30;
- update :更新数据库中的数据:
UPDATE 表名 SET 列名=值 [WHERE 条件表达式];
-- 特别注意:更新操作一定不要忘记where条件 否则将更新所有的记录
- delete :删除数据库中的数据:
DELETE FROM 表名 [WHERE 条件表达式];
-- 没有限制条件时,删除所有数据
在实际开发中,删除分为逻辑删除和物理删除
物理删除就是使用delete 语句 直接将数据从数据库中删除
逻辑删除只是在逻辑上表示删除了该数据 但是物理上该数据依然存在。
逻辑删除就是给表中设计一个字段,来表示该记录是否有效,这样的字段一般是只有两值(0,1) 。逻辑删除本质上执行的是update语句
- select :查询数据库中的数据
select (列名) from 表名 [where 条件表达式];
5、drop、delete、truncate 三者的区别
- drop :属于DDL语言,drop语句将表所占用的空间全释放掉。
- truncate :属于DDL语言,速度快,效率高,会删除表中所有记录,当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,
- delete :属于DML语言,执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。 DELETE操作不会减少表或索引所占用的空间。
- 在速度上,一般来说,drop> truncate > delete
- RUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。
truncate与不带where的delete :只删除数据,而不删除表的结构(定义) - 应用范围: TRUNCATE 只能对TABLE; DELETE可以是table和view
DDL | show、drop、create、truncate、alter |
---|---|
DML | insert、delete、select、update |
DCL | GRANT 授权、REVOKE 取消授权 |
TCL | SAVEPOINT 设置保存点 、 ROLLBACK 回滚、SET SAVEPOINT 设置保存点,可以回滚到此处、 SET TRANSACTION 改变事务选项 |