DML 之 update
语法
UPDATE table
SET column = value [, column = value]
[WHERE condition];
- WHERE子句用来限定修改哪些行。
- SET子句用来限定修改哪些列。
- WHERE子句中的更新条件是一个逻辑表达式,通常需要使用到关系运算符和逻辑运算符,返回True或者False。
- 使用 WHERE 子句指定要修改的记录
把员工编号为7782的部门编号修改为20
update emp set deptno = 20 where empno=7782;
把部门编号为 10 的员工, 工资 +100
update emp set sal=sal +100 where deptno=10;
- 修改部门20的员工信息,把82年之后入职的员工入职日期向后调整10天
update emp set hiredate=DATE_ADD(hiredate,interval 10 DAY)
WHERE deptno=20 AND hiredate>'1982-12-31';
- 修改奖金为null的员工,奖金设置为0
update emp set COMM=0 where COMM is null;
- 修改工作地点在NEW YORK或CHICAGO的员工工资,工资增加500
UPDATE emp e set e.sal = e.sal + 500
WHERE (SELECT loc from dept WHERE DEPTNO = e.DEPTNO ) in ('NEW YORK', 'CHICAGO')
删除
DELETE FROM table
[WHERE condition];
删除工作是CLERK
DELETE FROM emp WHERE job='CLERK'
全部删除
DELETE FROM emp
事务
- 事务(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)语句。
例:如下语句组成两个事务。
INSERT….
UPDATE….
DELETE….
SELECT….
INSERT…
COMMIT;-- 前6条语句,组成第1个事务
UPDATE…
DELETE….
事物的特征
事务特征可用四个字母的缩写表示:即ACID
- 原子性(Atomicity)
事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。 - 一致性(Consistency)
一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。 - 隔离性(Isolation)
一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。 - 持久性(Durability)
也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。
Python 操作 mysql
# 需要使用第三方库区连接mysql pymysql
# pip install + 名字
# 终端进行安装
# pip install pymysql
import pymysql
print(pymysql.__version__)
# 创建连接对象
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
password='root',
database='studydatabase1',
charset='utf8')
print(conn)
# 获取游标对象
cursor = conn.cursor()
# 查询 SQL 语句
sql = "select * from emp_back;"
# 执行 SQL 语句 返回值就是 SQL 语句在执行过程中影响的行数
row_count = cursor.execute(sql)
print("sql 语句 执行影响的行数 {}".format(row_count))
for line in cursor.fetchall():
print(line)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
改进数据库连接
try:
# 尝试执行的代码
except 异常类:
# 发生异常的时候要执行的事情
finally:
无论是否有异常都会执行的事情
from pymysql import connect, Error
# 创建连接对象
conn = None
try:
conn = connect(host='localhost',
port=3306,
user='root',
password='root',
database='studydatabase1',
charset='utf8')
print(conn)
except Error as e:
print("连接失败{}".format(e))
finally:
try:
conn.close();
print("数据库连接已关闭")
except Exception as e:
print("数据库连接失败{}".format(e))
使用with
from pymysql import connect, Error
# 创建连接对象
conn = None
try:
conn = connect(host='localhost',
port=3306,
user='root',
password='root',
database='studydatabase1',
charset='utf8')
# 使用 with 就会自动进行 close
# cursor = conn.cursor() + cursor.close
with conn.cursor() as cursor:
# 查询 SQL 语句
sql = "select * from emp_back;"
# 执行 SQL 语句 返回值就是 SQL 语句在执行过程中影响的行数
row_count = cursor.execute(sql)
print("sql 语句 执行影响的行数 {}".format(row_count))
for line in cursor.fetchall():
print(line)
except Error as e:
print("连接失败{}".format(e))
finally:
try:
conn.close();
print("数据库连接已关闭")
except Exception as e:
print("数据库连接失败{}".format(e))