1. 修改数据
首先,我们把分数低于5分的成绩所有都加60分。
结果:
383
解释:
1.刚开始,我们可以查到分数小于5分的总个数有383个
2.select *,
(grade+60) as newGrade from Score where Grade <5;这个sql是把所有的成绩小于5的都列出来,然后最后加一列分数加60分的结果。
3.update Score
set grade = grade + 60 where grade < 5;是把分数小于5的所有成绩都加60分
最后在检查分数小于5的个数为0,说明所有低于5分的分数都发生了改变
程序如下:
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.xie
-
# @Time :2017-11-23 16:58
-
# @file :modifydata.py
-
-
import MySQLdb
-
def connect_mysql():
-
db_config = {
-
'host': '10.89.1.10',
-
'port': 3306,
-
'user': 'demo',
-
'passwd': '123qaz',
-
'db': 'python_test',
-
'charset': 'utf8'
-
}
-
cnx = MySQLdb.connect(**db_config)
-
return cnx
-
-
-
if __name__ == '__main__':
-
cnx = connect_mysql()
-
-
sql = '''select *, (grade+60) as newGrade from Score where Grade <5;'''
-
update = '''update Score set grade = grade + 60 where grade < 5; '''
-
try:
-
cus_start = cnx.cursor()
-
cus_start.execute(sql)
-
result1 = cus_start.fetchall()
-
print(len(result1))
-
cus_start.close()
-
-
cus_update = cnx.cursor()
-
cus_update.execute(update)
-
cus_update.close()
-
-
cus_end = cnx.cursor()
-
cus_end.execute(sql)
-
result2 = cus_end.fetchall()
-
print(len(result2))
-
cus_end.close()
-
-
cnx.commit()
-
except Exception as e:
-
cnx.rollback()
-
print('error')
-
raise e
-
finally:
-
cnx.close()
2. 索引
MySQL索引的概念
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
索引类别
2.1.普通索引
2.2. 唯一索引
2.3. 主索引
2.4. 复合索引
2.5 . 外键索引
mysql主键和索引的区别:
1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。
所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。
主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。
2. 一个表中可以有多个唯一性索引,但只能有一个主键。
3. 主键列不允许空值,而唯一性索引列允许空值。
4. 索引可以提高查询的速度。
创建Course的CouID的字段为主键 Score的SID字段为主键
Student的StdID字段为主键 Teacher的TID字段为主键
以下是没做索引时的查询:
做索引时的查询:
程序代码:
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.xie
-
# @Time :2017-11-23 17:46
-
# @file :demo.py
-
-
-
import MySQLdb
-
def connect_mysql():
-
db_config = {
-
'host': '10.89.1.10',
-
'port': 3306,
-
'user': 'demo',
-
'passwd': '123qaz',
-
'db': 'python_test',
-
'charset': 'utf8'
-
}
-
cnx = MySQLdb.connect(**db_config)
-
return cnx
-
-
-
if __name__ == '__main__':
-
cnx = connect_mysql()
-
sql1 = '''alter table Score add index idx_StdID_CID(StdID, CID);'''
-
sql2 = '''alter table Score add index idx_CID_StdID(CID,StdID);'''
-
sql3 = '''explain select * from Score where StdID = 16213;'''
-
try:
-
cus = cnx.cursor()
-
cus.execute(sql1)
-
cus.close()
-
-
cus = cnx.cursor()
-
cus.execute(sql2)
-
cus.close()
-
-
cus = cnx.cursor()
-
cus.execute(sql3)
-
result = cus.fetchall()
-
print(result)
-
cus.close()
-
-
cnx.commit()
-
except Exception as e:
-
cnx.rollback()
-
print('error')
-
raise e
-
finally:
-
cnx.close()
阅读(20749) | 评论(0) | 转发(0) |