数据操作语言#DML(data manipulation language)
插入数据
insert into dept[列column1....] values (值value1,.....)
注意事项:
1、这种语法每次只能向里面插入一条记录;
2、列名可以省略,省略后每列数据都要插入。列的顺序为使用desc 表名 命令查到的顺序。
3、非空列的数据必须插入,否则会报错。
4、字符型和日期型数据必须用单引号括起来。
插入日期
1、sysdate() 函数记录当前日期和时间。
2、插入日期值,以文本形式输入'1988-10-17'
批量插入数据
insert into 表名[(字段列表)] values
(值列表1),
(值列表2),
.....
(值列表n);
通过子查询插入多行数据
insert into 表名(列名1)[,列名2,........列名n] 子查询;
例:
创建表
create table manager as selectfrom emp where 1=0;
向表中插入职位为manager的记录
insert into manager selectfrom emp where job='manager';
修改数据(update)
update table set column = value [,column2 = value2...] [where condition];
-where 子句用来限定修改哪些行。
-set子句用来限定修改哪些列。
-where 子句中的更新条件是一个逻辑表达式,通常需要使用到关系运算符和逻辑运算符,返回TRUE或者false。
无标题.png
使用where子句修改指定的记录
例:把员工编号为7782的部门编号修改为20.
update emp set deptno = 20 where empto = 7782;
注意:如果不加where语句限制,那么所有员工部门编号都会被设置为20.
一次修改多列
例如:
把部门编号为10的员工,部门编号调整为20,工资增加100.
update emp set deptno = 20,sal = sal+100 where deptno = 10;
删除数据
使用delete语句删除表中满足条件的行记录
delete from table [where condition];
例如:
delete from emp where job = 'clerk';
如果不加where子句则删除全部员工记录。
注意事项
如果删除数据行主键作为外键被其他表引用则该行数据不能被删除。
截断表
TRUNCATE TABLE table;
例如;
TRUNCATE TABLE EMP;
TRUNCATE 和delete的区别
-truncate是DDL,只能删除表中所有记录,释放存储空间,使用rollback不可以回滚。
-delete是DML,可以删除指定记录,不释放存储空间,使用rollback可以回滚。
事务(transcation)
事务:也成工作单元,是由一个或者多个sql语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。
事务处理语言:transaction process language 简称TPL,主要用来对组成事务的DML语句操作结果进行确认或者取消。
确认使用commit
取消使用rollback
事务特性(ACID)
-原子性(atomicity)即不可分割,要么一起成功,要么一起失败
-一致性(consistency)一旦事务完成,不管成功失败整个系统处于数据一致的状态。
-隔离性(lsolation)一个事务不会被另一个事务干扰。
-持久性(durability)也成为永久性,一旦事务提交,对数据的改变是永久的,不可以再被回滚。
事务组成
-在数据库中,事务由一组相关的DML或select语句,加上一个tpl语句(commit、rollback)或一个ddl语句(create、alter、drop、truncate等)或一个DCL(grant、revoke)语句。
例:
-insert...
-update...
-delete...
-select...
-insert...
-commit; 前6条语句组成一个事务
-update...
-delete...
-create...后三条语句组成第二个事务
MySQL的事务处理两种方法
-1、用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit事务提交
-2直接用set来改变MySQL的自动提交模式
MySQL是默认自动提交的,也就是你提交一个sql,就直接执行!可以通过以下两个来实现事务的处理;
set autocommit = 0;禁止自动提交
set autocommit = 1;开启自动提交
注意事项
方法二使用set autocommit = 0的时候,所有的sql都将作为事务处理,直到用commit确认或者rollback结束,结束的同时也开启了新的事务。
方法一只将当前的作为一个事物。
隐式结束
-隐式提交:当发生下列任一情况时,会发生隐式提交
1、执行一个ddl(create、alter、drop、truncate、rename)语句;
2、执行一个dcl(grant、revoke)语句。
-隐式回滚:当下列任一情况发生时,会发生隐式回滚。
1、客户端强行退出
2、客户端连接到服务器端异常中断
3、系统崩溃
设置保存点
如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起点,可以通过保存点(savepoint)实现。
-SAVEPOINT savepointname;定义一个保存点语句;
-ROLLBACK TO savepointname;回滚到指定保存点;
网友评论