数据库(九)------高级查询(六)

目录

9.1 触发器

9.1.2 new和old

9.1.3 删除触发器

9.1.4 查看触发器

9.2 引擎

9.3 索引

9.3.1 在什么时候设置索引

9.3.2 创建索引的两种方法

9.3.3 删除索引

9.3.4 联合索引 

9.4 事务

9.5 pyMySQL


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()获取结果集的所有数据

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值