**三范式
**
步骤
pip install pymysql
from pymysql import *
用于建立Python与数据库的连接
创建对象:调用connect()方法
conn=connect(参数列表)
Connection对象的方法
cus=conn.cursor()
示例
from pymysql import *
# 建立数据库连接
conn=connect(host="localhost",port=3306,user="root",password="123456",database="python01",charset="utf8")
# 获取Cursor对象
cursor=conn.cursor()
# 查询数据表
cursor.execute("select *from person")
# 获取所有结果集
lines=cursor.fetchall()
print(lines)
for line in lines:
print(line)
# 插入数据
count=cursor.execute("insert into person(id,name,age) values(12,'李天王',333),(13,'哪吒',222)")
print("插入成功条数:",count)
# 修改表数据
count=cursor.execute("update person set name='白蛇' where id=8")
print("修改成功条数:",count)
# 删除表数据
count=cursor.execute("delete from person where id=5")
print("删除成功条数:",count)
# 修改数据表后,需要提交
conn.commit()
# 再次查询数据表
cursor.execute("select *from person")
print(cursor.fetchall())
# 关闭Cursor对象,关闭数据库连接
cursor.close()
conn.close()
**输出结果
**
**视图
**
定义视图
create view 视图名称 as select 语句;
查看视图
show tables;
使用视图
select * from v_person
删除视图
drop view 视图名称;
视图的作用
示例
# 创建视图, 查询订单与订单收货 信息表,生成一个虚拟表(视图)
create view v_order_info as SELECT a.order_no,a.order_price,b.receive_name,b.receive_phone FROM `order` a, order_receive b where a.order_no=b.order_no;
# 查看视图的内容
SELECT * from v_order_info;
**事务
**
事务的四大特性(ACID)
**事务的命令
**
begin;
或者
start transaction;
commit;
rollback;
**示例
**
BEGIN;
# 修改person表,id=1 的名称 (此语句执行后,由于没有提交,别的查询语句查询时,不会查到修改的数据)
update person set name='小白' where id=1;
# 提交事务,这个语句执行后,数据表中的名称变更为 小白
COMMIT;
事务隔离级别要解决的问题
事务的隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 可能 | 可能 | 可能 |
读已提交 | 不可能 | 可能 | 可能 |
可重复读 | 不可能 | 不可能 | 可能 |
串行化 | 不可能 | 不可能 | 不可能 |
索引
索引的使用
show index form 表名;
ALTER TABLE 表名
ADD UNIQUE INDEX 索引名 (字段) USING BTREE ;
ALTER TABLE 表名
DROP INDEX 索引名;
示例
**创建一个数据表,并插入99万条记录,用作测试索引
**
CREATE TABLE `test_index` (
`id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
from pymysql import *
# 建立数据库连接
conn=connect(host="localhost",port=3306,user="root",password="123456",database="python01",charset="utf8")
# 获取Cursor对象
cursor=conn.cursor()
for i in range(100000):
cursor.execute("insert into test_index(id,name) values (%d,'testindex')" %i)
# 修改数据表后,需要提交
conn.commit()
# 关闭Cursor对象,关闭数据库连接
cursor.close()
conn.close()
set profiling=1
SELECT * from test_index where id=88888;
show profiles;
ALTER TABLE `test_index`
ADD UNIQUE INDEX `idx_id` (`id`) USING BTREE ;
SELECT * from test_index where id=88888;
show PROFILES;
最终结果
注意
**建立太多的索引会影响更新和插入数据的速度,因为它需要同样更新每个索引文件,对于一个经常更新和插入的表格,没有必要为一个很少使用的where子句单独建立索引。 **
**建立索引会占用磁盘空间
**
MySQL的主从
mysqldump -uroot -pmysql --all-databases --lock-all-tables > /tmp/master_data.sql
mysql -uroot -p密码 新数据库名 < master_data.sql
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
log_bin = var/log/mysql/mysql-bin.log
server-id = 1
server mysql restart
mysql -uroot -p密码
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
FLUSH PRIVILEGES;
SHOW MASTER STARTS;
change master to master_host='主服务器ip地址' ,master_user=’slave',master_password='slave',master_log_file='mysql-bin.000006',master_log_pos=590
show master status;
start slave;
show slave status \\G;
全部0条评论
快来发表一下你的评论吧 !