目录
9.1 触发器
被动触发的一个功能 并不是主动执行的
关键字:trigger
触发器四要素
1.监视地点:表示你要监听哪个表的动作
2.监视事件:你要监听这个表的什么动作
触发器只能监听 增 删 改三种操作 不能监听查询
3.触发事件
触发事件 增 insert 删delete 改 update
添加之前 添加之后
删除之前 删除之后
修改之前 修改之后
4.触发时间
动作之前 before
动作之后 after 该去做一些事情
# 语法: create trigger 触发器的名字 触发时间 触发的事件 on 表名 for each row
begin
写触发了这个动作的行为;
end;
9.1.2 new和old
在监听表的动作时 我们可以根据new和old来获取这个表被操作的数据
insert
当插入了一条数据之后 表中会新增一条数据
new:可以获得新增的数据
new.列名
old:没有含义
delete
new: 没有含义 因为在删除数据之前 不会有新数据产生
old:可以获得被删除的数据
old.列名
update
new:可以获得被修改后的那一条的任何数据
new.列名
old:可以获得获得被修改前 的那一条的任何数据
old.列名
9.1.3 删除触发器
drop trigger if exists 触发器名;
9.1.4 查看触发器
show triggers;
9.2 引擎
数据库搜索以及保存数据的规则
InnoDB:可以执行存储过程 不能设置全文索引
MYisAM:不可以去执行存储过程 设置全文索引
9.3 索引
索引其实一个保存在数据库的一个文件 文件占据一定的内存
索引它包含着对数据表里所有记录的引用指针
9.3.1 在什么时候设置索引
1.有列经常 被排序或者分组或者组合查询 可以设置索引增加查询速度
index/key
2.如果一个列中出现相同的数据会降低查询速度 可以使用唯一索引来提高查询速度
unique
3.给条件列添加索引来 提高查询速度
primary key
9.3.2 创建索引的两种方法
1.创建表的时候设置
create table test(
id int,
name char(20),
primary key(id),
unique wy(name(20))
);
2.修改表结构的方式 创建
alter table 表名 add 索引类型 索引名(添加索引的列(长度));
9.3.3 删除索引
drop index 索引名 on 表名;
9.3.4 联合索引
一般多个列组成一个索引 那么以这个组合索引中所有的列去查询数据 会提高速度
alter table test add key lianhe(age, sex);
如果你使用age和sex一起当条件去查询 数据 会提高效率
9.4 事务
是一种要么同时成功 要么同时失败的概念...
相对来讲也保证了数据的安全。
案例:张三 2000 李四 2000
张三给李四转500
update user123 set money = money - 500 where name = "张三";
在mysql中 会自动提交数据 在全局变量中有@@autocommit去设置手动和自动
1:自动提交
0:手动提交
如果改成手动 数据不会真的提交到表中去 必须使用commit来提交数据
使用rollback来撤销数据
9.5 pyMySQL
把python程序中的数据保存到数据库中去
下载pymysql
pip install pymysql;
提高下载速度 -i https://pypi.douban.com/simple--->添加镜像
pip install 包名 -i https://pypi.douban.com/simple
作用:在python程序中连接 mysql
步骤
1.导入pymysql
2.调用connect方法连接数据库
con = pymysql.connect(
user='root', # 用户名
password='root', # 密码
database='test1', # 要连接的数据库
charset='utf8' # 编码格式
)
设置自动和手动提交 默认为手动提交 也建议各位手动提交 因为我们要在python程序中去
用逻辑控制和判断数据的有效性 去决定回滚或者提交
True:自动
False:手动 默认的
autocommit=True
3.通过con连接对象创建一个游标
cur = con.cursor()
cur就是游标对象
游标可以帮助执行sql语句和获取mysql返回给我们的数据
4.执行数据库操作
cur.execute('sql语句')
数据库操作有四种
增删改 只会返回影响的行数
number = cur.execute("insert into stu(s_id, s_name, mark) values(4, '小马', 90)")
number为影响行数
在python程序中 事务默认设置为手动
所以要使用commit提交数据
使用rollback回滚数据
查询 会返回查到的数据
number = cur.execute('select * from logs')
number为查询到的数据数量
获取数据的方法
1.获得一条数据
元组 = cur.fetchone() 获得结果集的一整条数据
这个元组由表中一条数据组成 一个单元格的数据 就是元组中的一个元素
游标在数据库中 就是一个指针 只能前进 不能后退
2.获得所有数据
data = cur.fetchAll()获取结果集的所有数据