开启学习之旅吧!活到老~学到老!
文章目录
目录
前言
本篇内容主要介绍 MySQL的索引与事务,并附上实例以便大家更容易理解。
一、索引
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。索引所起的作用类似书籍目录,可用于快速定位、检索数据。
1.查看索引
show index from 表名;
主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)会自动创建对应列的索引。
#查看学生表已有的索引
show index from student;
2.创建索引
create index 索引名 on 表名(字段名);
对于非主键、非唯一约束、非外键的字段,可以创建普通索引。
#创建班级表中,name字段的索引
create index idx_classes_name on classes(name);
3.删除索引
drop index 索引名 on 表名;
#删除班级表中name字段的索引
drop index idx_classes_name on classes;
3.索引实例
-- 创建用户表
DROP TABLE IF EXISTS test_user;
CREATE TABLE test_user (
id_number INT,
name VARCHAR(20) comment '姓名',
age INT comment '年龄',
create_time timestamp comment '创建日期'
);
drop function if exists rand_name;
create function rand_name(n INT, l INT)
returns varchar(255)
begin
declare return_str varchar(255) default '';
declare i int default 0;
while i < n do
if i=0 then
set return_str = rand_string(l);
else
set return_str =concat(return_str,concat(' ', rand_string(l)));
end if;
set i = i + 1;
end while;
return return_str;
end $$
delimiter ;
// 产生随机字符串
drop function if exists rand_string;
delimiter $$
create function rand_string(n INT)
returns varchar(255)
begin
declare lower_str varchar(100) default
'abcdefghijklmnopqrstuvwxyz';
declare upper_str varchar(100) default
'ABCDEFJHIJKLMNOPQRSTUVWXYZ';
declare return_str varchar(255) default '';
declare i int default 0;
declare tmp int default 5+rand_num(n);
while i < tmp do
if i=0 then
set return_str = concat(return_str,substring(upper_str,floor(1+rand()*26),1));
else
set return_str = concat(return_str,substring(lower_str,floor(1+rand()*26),1));
end if;
set i = i + 1;
end while;
return return_str;
end $$
delimiter ;
//产生随机数字
drop function if exists rand_num;
delimiter $$
create function rand_num(n int)
returns int(5)
begin
declare i int default 0;
set i = floor(rand()*n);
return i;
end $$
delimiter ;
//向用户表批量添加数据
drop procedure if exists insert_user;
delimiter $$
create procedure insert_user(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat
set i = i + 1;
insert into test_user values ((start+i) ,rand_name(2,5),rand_num(120),CURRENT_TIMESTAMP);
until i = max_num
end repeat;
commit;
end $$
delimiter ;
//执行存储过程,添加8000000条用户记录
call insert_user(1, 8000000);
create index idx_test_user_id_number on test_user(id_number);
二、事务
1.事务的概念
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。
2.事务的使用
(1)开启事务:start transaction;
(2)执行多条SQL语句;
(3)回滚或提交:rollback/commit;
说明:rollback即是全部失败,commit即是全部成功。
start transaction;
// 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
//四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
commit;