<span style="font-size:14px;">--EmpAndDept5 --主要关于更新表格、数据库备份、日志的开启、删除和通过python来调用mysql --将select的数据返回创建一个新表 create table emp2 as select empno,sal from emp where 1=0; --这种方式可以创建一个包含列字段但是没有数据的方法,因为后面的where始终为false --将depno为20的部门的每个员工的薪水更新为现在的110%,要求永久保存,使用update update emp set sal=sal*1.1 where deptno=10; --仅更新在emp_bonus中有奖金的人的薪水(1.1倍) update emp set sal=sal*1.1 where empno in (select empno from emp_bonus); --使用exists实现跟in一样的功能 update emp e set sal=sal*1.1 where exists(select null from emp_bonus eb where e.empno=eb.empno); --记住任何时候都要记得where,除非你想全部的数据都更新 --删除重复数据,先insert一个,因为主键的原因,empno不一样,但是我们知道这两就是一个人,是重复的 insert into emp(ename,job,mgr,hiredate,sal,comm,deptno) values('smith','clerk',7902,1980-12-27,1064.80,null,10); delete from emp where empno not in (select max(empno) from emp group by ename); --这时会发现delete报错了,原因是因为修改一个表和子查询不能是同一个表(不知道为啥书上的就可以通过。。。) --有一个办法是将他变成孙子查询! delete from emp where empno not in (select * from (select max(empno) from emp group by ename) a ); --删除表格 --delete和drop的区别,delete删除的是数据,表列元素还在,drop删除的是整个表 delete from pet; drop table pet; --删除单个记录 delete from emp where empno=1000; --数据库备份和恢复 --有几种方法: --No.1 土方法:找到电脑上存放mysql数据库的文件夹(一般默认是在mysql文件夹的data里),直接复制文件夹中数据库内的内容.... -- 需要恢复的时候就创建一个新数据库将内容复制进去覆盖就行了 -- 缺点:依赖于windows的文件存储系统,不能移植到其他类型机器上 --No.2 mysqldump法 --cmd模式下进到bin目录下输入:mysqldump -u root -p basename > backup.sql --basename为你要备份的数据库名字,backup为导出的文件名,会在bin下生成back.sql文件,或者你在backup.sql前加上路径如:C:\安装文件备份\backup.sql --提示locktable错误则在basename后面加上--skip-lock-tables --恢复数据库 --从cmd进入数据库界面,执行以下命令,即可 create database restoretest; use RestoreTest; source C:/User/backup.sql; --注:路径最好不要包含中文,我用了中文结果source不到了 -- 路径最好用/而不是\,source下容易因为转义字符的存在而出错,否则这里要用\\ -- 优点:生成的文件可移植到其他机器上 -- 缺点:速度较慢 --No.3 采用第三方软件备份(这里就不介绍了) --日志 --其中的二进制日志记载了你的一系列sql操作,如当系统崩溃,数据库资料丢失,我们通过数据库备份文件恢复之后, --可以让服务器执行二进日志,将数据库恢复到崩溃之前的状态 --可以通过以下命令查看是否开启了相关的日志: show global variables like '%log%'; show global variables like 'log_bin'; show binary logs; --查看二进制日志 show master status; --查看当前使用的日志(主要查看现在是用的哪个二进制日志) --要永久开启二进制日志和其他日志,可以配置my.ini文件,配置方法可以查看我的另一篇博文:http://blog.csdn.net/databatman/article/details/49951853 --注:网上大部分的配置都是针对mysql5.6版本以前的,基本已经过时了,此配置方法是针对mysql5.6.x以后版本的 --关于使用日志恢复数据库的博文 http://blog.csdn.net/alvine008/article/details/9097105 --本来想自己写一个,后来发现这个已经写得很nice了,毕竟现在的我还没在企业实践过,写出来也是半吊子,就不写啦 --综上,时间轴一般是: -- 1.备份数据库,同时启动了二进制日志 -- 2.一段时间后,数据库意外崩溃 -- 3.使用以前的数据库备份来恢复数据库 -- 4.同时调用从备份到崩溃前的日志恢复数据库到崩溃前状态 --删除数据库 drop database if exists Heros; --如果存在,就删除 --用python来调用mysql数据库 --参见本篇博文: --或者见另一个代码文件:python-mysql.py </span>
先安装python与mysql的关联库:在python的script文件夹中,cmd模式下输入:
pip install mysql-connector-python --allow-external mysql-connector-python
#!usr/bin/env python #-*- coding:utf-8 -*- import mysql.connector #mysql-connector-python包 #connect用于连接数据库 #cursor.execute用于执行create、insert、update、select等等一系列语句 #创建一个连接数据库的对象con、cursor con=mysql.connector.connect(host='localhost',user='root',password='1991423',database='cookbook',use_unicode=True) cursor=con.cursor() #创建表格 sql1=u"create table pytest (id int primary key,name varchar(20),sex nchar(1) default '男' check(sex in ('男','女')))" cursor.execute(sql1) #插入数据的两种写法 #1、小心这种写法,回想一下mysql的插入语句,因为mysql本身在插入数据时字符串就要加'', # 所以你写的让execute传人数据库的语句也要包含'',包含的方法有: # ①外面用双引号"",内部就可以用单引号而不冲突了 # ②用转义字符\'即可 cursor.execute(u"insert into pytest values(1,'bob','男')") #2、推荐! #考虑到数据库是开放用来给用户查询的,所以时常需要修改输入的值,因此这种方法用的较多 sql2=u'insert into pytest values(%s,%s,%s)' parameter=[2,'Kate','女'] cursor.execute(sql2,parameter) #将insert的数据更新储存到数据库 con.commit() #在数据库的操作界面用selcet * from pytest会发现id=2女生那栏显示的是乱码(可能你的不会遇到) #原因是上面的代码在传入中文的时候两者的编码可能不一样导致,可以如下用unicode格式更新一下 #顺便复习下update语句 sql3=u'update pytest set sex=%s where id=%s' parameter=[u'女',2] cursor.execute(sql3,parameter) con.commit() #查询select cursor.execute('select * from pytest') #使用fetchall获得所有的返回值 #还有fetchone返回一个,fetchmany返回多个,scroll函数等 #返回的是list,内部每个实例都是tuple values=cursor.fetchall() n=cursor.rowcount #统计execute影响到的行数,像select选出了2行,所以这里n=2 print values print n #注:每次调用完select都必须fetchall,才能进行下一次的查询,否则会报错 #记得关闭cursor和conn,避免数据库泄露 cursor.close() con.close() #为了避免在执行出错的时候仍然能关闭数据库,多要跟try except finally结合
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320107391860b39da6901ed41a296e574ed37104752000
mysql代码github地址:
https://github.com/databatman/SQLCookBook-MysqlVersion
PS:所有的mysql的EmpAnd1-n代码都会上传到这个文件夹,顺便求关注啊,虽然还是菜鸟一个,啊哈