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

如果 UPDATE 语句的中WHERE 子句未使用索引会有什么后果 关于update语句中的where子句_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()

如果 UPDATE 语句的中WHERE 子句未使用索引会有什么后果 关于update语句中的where子句_mysql_02

改进数据库连接

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))