数据操作语言
数据操作语言(Data Manipulation Language ,简称DML),主要用来实现对数据库表中的数据进行操作。
数据操作语言主要包括:
- 增加行数据:使用INSERT语句实现
- 修改行数据:使用UPDATE语句实现
- 删除行数据:使用DELETE语句实现
插入数据
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
- 采用这种语法一次只能追加一条记录;
- column部分叫做列名列表,value部分叫做值列表,列名列表和值列表必须在个数及数据类型上保持一致;
- 列名列表部分可以省略,如果省略,默认包括该表的所有列,列的顺序为使用 desc 表名 命令所查看的顺序;
- 列名列表部分也可以指定部分非空的列,注意值列表必须和列名列表对应;
- 字符和日期型数据必须要用单引号括起来。
插入空值null
- 隐含法:在列名列表中忽略该列。
- 显示法:指定NULL关键字或者''。
批量插入数据
使用insert语句可以一次性地向表批量插入多条记录,
INSERT INTO 表名[(字段列表)] VALUES
(值列表1),
(值列表2),
…
(值列表n);
通过子查询插入多行数据
INSERT INTO 表名[(列名1[,列名2,…,列名n])] 子查询 ;
- 不必书写values子句
- INSERT子句和数据类型必须和子查询中列的数量和类型相匹配中列的数量
修改数据
UPDATE table
SET column = value [, column = value]
[WHERE condition];
- WHERE子句用来限定修改哪些行。
- SET子句用来限定修改哪些列。
- WHERE子句中的更新条件是一个逻辑表达式,通常需要使用到关系运算符和逻辑运算符,返回True或者False。
删除数据
DELETE FROM table
[WHERE condition];
截断表
TRUNCATE TABLE table;
TRUNCATE和DELETE区别
- TRUNCATE是DDL,只能删除表中所有记录,释放存储空间,使用ROLLBACK不可以回滚。
- DELETE是DML,可以删除指定记录,不释放存储空间,使用ROLLBACK可以回滚。
事务处理
事务(Transaction),也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。
事务处理语言(Transaction Process Language ,简称TPL),主要用来对组成事务的DML语句的操作结果进行确认或取消。确认也就是使DML操作生效,使用提交(COMMIT)命令实现;取消也就是使DML操作失效,使用回滚(ROLLBACK)命令实现。
事务组成
在数据库中,事务由一组相关的DML或SELECT语句,加上一个TPL语句(COMMIT、ROLLBACK)或一个DDL语句(CREATE、ALTER、DROP、TRUNCATE等)或一个DCL(GRANT、REVOKE)语句。
事务特征:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
MySQL的事务处理
1.用begin,rollback,commit实现
begin开始一个事务 rollback事务回滚 commit 事务提交
2.直接用set来改变MySQL的自动提交模式
- set autocommit = 0 禁止自动提交
- set autocommit = 1 开启自动提交
注:当用set autocommit = 0 的时候,以后所有的sql都将作为事务处理,直到用commit确认或 rollback结束,注意当结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!
隐式结束
隐式提交:当下列任意一种情况发生时,会发生隐式提交
- 执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)语句;
- 执行一个DCL(GRANT、REVOKE)语句;
隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
- 客户端强行退出
- 客户端连接到服务器端异常中断
- 系统崩溃
设置保存点:如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。
SAVEPOINT savepointname;--定义一个保存点语句;
ROLLBACK TO savepointname;--回滚到指定保存点
注意:如上两条语句不结束事务的执行。