数据库之事务,存储过程,索引

来源:互联网 发布:爬虫爬数据库犯法吗 编辑:程序博客网 时间:2024/06/05 20:43

1.清楚having

//例子1#havingSELECT * FROM deposite;#按照银行名进行分组,查看银行名,存款总数,存储金额大于20000的并按照金额排序select b_name,sum(amount) from deposite inner join bank on deposite.b_id=bank.b_idinner join customer on deposite.c_id=customer.c_idgroup by b_namehaving sum(amount)>20000order by sum(amount);//例子2假设中国CN显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。SELECT region, SUM(population), SUM(area)FROM CNGROUP BY regionHAVING SUM(area)>1000000

索引

定义:对数据库表中的一列或者多列的值
进行排序的一种结构,旨在挺高数据的查询效率。
作用:
提高查询速度
确保数据的唯一性
使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间
等等
分类:
主键索引(PRIMARY KEY)
唯一索引(UNIQUE)
常规索引(INDEX)
全文索引(FULLTEXT) 只能用于MyISAM类型的数据表,只能用于 CHAR 、 VARCHAR、TEXT数据列类型
使用场景:
在WHERE,ORDER BY 子句中经常使用的字段
字段的值是多个(例如性别字段则不适合)
字段内容不是经常变化的
不宜过多添加索引,每添加一条索引都会占用磁盘空间
代码:
create table student(
studentno int(4) not null,
pwd varchar(20) default null,
studentname varchar(20),
sex tinyint(1),
gradeid int(11),
phone varchar(50),
address varchar(50)
) engine=innodb default charset=utf8;
#查看索引
show index from student;
#添加主键索引
alter table student add primary key(studentno);
#添加唯一索引
alter table student add unique index(gradeid);
#添加普通索引
alter table student add index (studentname);
/先修改为myisam类型数据库/
alter table student engine=myisam;
#添加全文索引
alter table student add fulltext(studentname);
#查看索引
show index from student;

事务:

定义:
事务就是将一组SQL语句放在同一批次内去执行,
如果一个SQL语句出错,
则该批次内的所有SQL都将被取消
注意:
MySQL事务处理只支持InnoDB和BDB数据表类型
原则:
原子性:事务的一组操作是原子的不可再分割的,这组操作要么同时完成要么同时不完成
一致性:几个并行执行的事务,
其执行结果必须与按某一顺序串行执行的结果相一致。
隔离性:当多个事务同时操作一个数据库时,可能存在并发问题,
此时应保证各个事务要进行隔离,事务之间不能互相干扰。
持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,不能再回滚。
语法:
set autocommit=0;#关闭自动提交模式,默认为开启
start transaction; #开启一个事务,表示事务的起点
#一系列的操作
update account set cash=cash-500 where name=’买家’;
update account set cash=cash+500 where name=’卖家’;
#commit;#将一个事务提交给数据库
rollback;#将事务回滚,
set autocommit=1;#设置为自动提交
案例:?A账户成功减少500元,B账户应该增加500元,
但一些错误导致未增加成功,
这时则需返回A账户的500元,达到账户总额的平衡
create table account (
id int(10) auto_increment primary key,
name varchar(20),
cash decimal(9,2)
);
insert into account values (null,’买家’,1000), (null,’卖家’,1000);
set autocommit=0;#关闭自动提交模式,默认为开启
start transaction; #开启一个事务,表示事务的起点
#一系列的操作
update account set cash=cash-500 where name=’买家’;
update account set cash=cash+500 where name=’卖家’;
commit;#将一个事务提交给数据库
#rollback;#将事务回滚,
set autocommit=1;#设置为自动提交

存储过程

存储过程:是一段预先编译并存储在数据库中的一段sql语句的集合
创建存储过程:
#创建存储过程update_salary
DELIMITER $$

    CREATE PROCEDURE update_salary()     BEGIN         UPDATE salary=salary+salary WHERE salary<5000;        #其他的代码    END $$DELIMITER ;删除:DROP PROCEDURE update_salary;查看:SHOW PROCEDURE STATUS LIKE 'update_salary';delimiter $$    create procedure update_salary()    begin    update salary=salary*1.2 where c_id<101004;    end $    delimiter;
0 0
原创粉丝点击