mysql操作介绍

Mysql事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如,你操作一个数据库,公司的一个员工离职了,你要在数据库中删除他的资料,也要删除该人员相关的,比如邮箱,个人资产等。这些数据库操作语言就构成了一个事务。 
在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务,所以很多情况下我们都使用innodb引擎。 
事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。 
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性) 
1、事务的原子性:一组事务,要么成功;要么撤回。 
2、稳定性 : 有非法数据(外键约束之类),事务撤回。 
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 
4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。 
而mysql在默认的情况下,他是把每个select,insert,update,delete等做为一个事务的,

登录mysql服务器,进入mysql,执行以下命令:

mysql> show variables like 'auto%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
| autocommit               | ON    |
| automatic_sp_privileges  | ON    |
+--------------------------+-------+
4 rows in set (0.00 sec)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如上所示: 有一个参数autocommit就是自动提交的意思,每执行一个msyql的select,insert,update等操作,就会进行自动提交。 
如果把改选项关闭,我们就可以每次执行完一次代码就需要进行手动提交,connect对象给我们提供了两种办法来操作提交数据。 
mysql事务的方法 
commit():提交当前事务,如果是支持事务的数据库执行增删改后没有commit则数据库默认回滚,白操作了 
rollback():取消当前事务 
我们先创建一个员工表:

  create table employees (
        emp_no int not null auto_increment,
        emp_name varchar(16) not null,
        gender enum('M', 'F') not null,
        hire_date date not null,
        primary key (emp_no)
        );
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其中,emp_no为员工id,为主键且唯一 
emp_name为:员工的名字 
fender为:性别,只有M和F两种选择 
hire_date为:雇佣的时间。 
为了试验的效果,我们插入几条数据:

insert into employees(emp_no, emp_name, gender, hire_date) values(1001, 'lingjiang', 'M', '2015-04-01');
insert into employees(emp_no, emp_name, gender, hire_date) values(1002, 'xiang', 'M', '2015-04-01');
insert into employees(emp_no, emp_name, gender, hire_date) values(1003, 'shang', 'M', '2015-04-01');
mysql> select * from employees;
+--------+-----------+--------+------------+
| emp_no | emp_name  | gender | hire_date  |
+--------+-----------+--------+------------+
|   1001 | lingjiang | M      | 2015-04-01 |
|   1002 | xiang     | M      | 2015-04-01 |
|   1003 | shang     | M      | 2015-04-01 |
+--------+-----------+--------+------------+
a) rows in set (0.00 sec)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

游标操作mysql数据

通过python代码增加一条数据到数据库中,代码如下:

import MySQLdb
#连接数据库需要ip,用户密码,库名,字符集编码
#conn=MySQLdb.connect(host="192.168.1.204",user="root",passwd="123456",db="python",charset="utf-8")

def connect_mysql():
    db_config = {
        'host': '192.168.1.204',
        'port': 3306,
        'user': 'root',
        'passwd': '123456',
        'db': 'python',
        'charset': 'utf8'
    }
    try:
        cnx = MySQLdb.connect(**db_config)
    except Exception as e:
        raise e
    return cnx

if __name__ =='__main__':
#定义sql语句
    sql = '''create table test(id int not null);insert into test(id) values(100);'''
    cnx=connect_mysql()
#定义游标
    cus=cnx.cursor()
    try:
#执行sql
        cus.execute(sql)
#关闭游标
        cus.close()
#提交sql语句
        cnx.commit()
    except Exception as e:
#回滚
        cnx.rollback()
        print('Error')
#        raise e
    finally:
        cnx.close()
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

运行该代码块后,查看Mysql

mysql> select * from test;
+-----+
| id  |
+-----+
| 100 |
+-----+
1 row in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值