From 1938806d7e5fde2401bd6b6fd90b90743f722f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BC=9F=E7=85=8C?= <15160768245@163.com> Date: Mon, 21 Oct 2024 07:17:08 +0800 Subject: [PATCH 1/2] commit homework --- ...42\345\274\225\347\273\203\344\271\240.md" | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 "\350\260\242\344\274\237\347\205\214/20241018-\346\225\260\346\215\256\345\272\223\347\264\242\345\274\225\347\273\203\344\271\240.md" diff --git "a/\350\260\242\344\274\237\347\205\214/20241018-\346\225\260\346\215\256\345\272\223\347\264\242\345\274\225\347\273\203\344\271\240.md" "b/\350\260\242\344\274\237\347\205\214/20241018-\346\225\260\346\215\256\345\272\223\347\264\242\345\274\225\347\273\203\344\271\240.md" new file mode 100644 index 0000000..5b2e001 --- /dev/null +++ "b/\350\260\242\344\274\237\347\205\214/20241018-\346\225\260\346\215\256\345\272\223\347\264\242\345\274\225\347\273\203\344\271\240.md" @@ -0,0 +1,96 @@ +## 一、笔记 + +索引:索引是一种数据结构,它的出现就是为了提高数据查询的效率。 + +以文本的形式存在磁盘中。 + +如何创建一个普通的索引(单列) + +create index idx_username on user_list(user_name); + +添加索引: + +alter table user_list add index idx_phone(phone); + +查看一个表的索引: + +show index fromuser_list; + +在建表的时候指定索引: + +create table aa( + +ID int + +index idx_id(id) + +); + +删除索引: + +drop index idx_id on aaa; + +alter table use_list drop index idx_phone; + +如何创建一个普通索引(多列) + +create index idx_uname_phone on user_list (user_name,phone); + +建立一个唯一索引(单列) + +create index idx_aaa on aaa(id); + +explain:可以查看有没有用到索引 + +```sql +-- 练习和作业 +-- 1.给emp分别建立 普通索引和唯一索引 +create index index1 on employee(eid); +create unique index index2 on employee(ename); +-- 2.查询emp表有哪些索引 +show index from employee; +-- 3. 使用有索引的字段进行查询,再查看这条语句是否使用到了索引。 +explain select *from employee WHERE eid=2; + +-- 4. 删除前面建立的两个索引 +drop index index1 on employee; +drop index index2 on employee; +-- 5. 选择两个字段添加一个复合索引 +create index index3 on employee(ename,birth); + +-- 6. 使用复合索引的字段进行查询 +SELECT *from employee WHERE ename="沈涛" and birth="1993-04-30"; + +-- 作业 +-- 想办法用自己的电脑,生成500万行数据,id,uname,age 尽量随机,并记录时间。 +CREATE table emp( +id int , +uname varchar(255), +age int +); + + +create procedure test1() +BEGIN +declare a int DEFAULT 0; +while a<5000000 do +insert into emp VALUES(a+1,CONCAT("用户",a+1),floor(rand()*100)); +set a=a+1; +end while; +end; + +call test1(); +-- 1. 不用索引查询 一次姓名uname /并记录时间 +SELECT *from emp where uname="用户4999978"; + +-- 2. 建立索引查询 一次姓名uname /并记录时间 +CREATE INDEX index5 ON emp (uname); +SELECT *from emp where uname="用户4999978"; + +``` + +![微信图片_20241018155821](https://gitee.com/cxd20041029/picture-bed/raw/master/images/202410181558015.png) + +1.![不用索引 2024-10-18 153705](https://gitee.com/cxd20041029/picture-bed/raw/master/images/202410181543141.png) + +![屏幕截图 2024-10-18 153516](https://gitee.com/cxd20041029/picture-bed/raw/master/images/202410181543785.png) -- Gitee From c95c69b2732c647d5e8162ec352b43adb49ebc0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BC=9F=E7=85=8C?= <15160768245@163.com> Date: Mon, 21 Oct 2024 07:26:30 +0800 Subject: [PATCH 2/2] commit homework --- ...13\345\212\241\347\273\203\344\271\240.md" | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 "\350\260\242\344\274\237\347\205\214/20241017-\346\225\260\346\215\256\345\272\223\344\272\213\345\212\241\347\273\203\344\271\240.md" diff --git "a/\350\260\242\344\274\237\347\205\214/20241017-\346\225\260\346\215\256\345\272\223\344\272\213\345\212\241\347\273\203\344\271\240.md" "b/\350\260\242\344\274\237\347\205\214/20241017-\346\225\260\346\215\256\345\272\223\344\272\213\345\212\241\347\273\203\344\271\240.md" new file mode 100644 index 0000000..5718632 --- /dev/null +++ "b/\350\260\242\344\274\237\347\205\214/20241017-\346\225\260\346\215\256\345\272\223\344\272\213\345\212\241\347\273\203\344\271\240.md" @@ -0,0 +1,119 @@ +## 一、笔记 + +事务: + +事务就是用户给数据库操作序列,要么全做,要么全不做,是一个整体,不可分割。 + +支持事务的数据库拥有4个特性: + +原子性,一致性,隔离性,持久性。 + +set @@autocommit=0;将系统中的自动提交关闭 + +start transaction;开启事务 + +rollback;回滚,撤销整个事务的所有操作,隐式的结束事务。 + +commit;提交,不能反悔 + +replease savepoint s1;删除s1这个保存点 + +回滚部分事务: + +start transction; + +select *from bank; + +INSERT INTO `bank` VALUES (1, '张三', 100); + +savepoint s1; + +INSERT INTO `bank` VALUES (2, '李四', 200); + +savepoint s2; + +INSERT INTO `bank` VALUES (3, '李五', 200); + +rollback to s2; + +commit; + +隔离四个级别:(isolation) + +1.读未提交(read uncommitted) + +a 没提交 ,b可以读a还没提交的东西 + +2.读已提交(read committed) + +3.可重复读(repeatable read) + +4.序列化读/串行化读(serializable) + +可解决所有问题,但是效率最低 + +```sql +## 要操作的表结构与数据 +create table bank( + id int primary key auto_increment , + username varchar(10), + money int +); + +INSERT INTO `bank` VALUES (1, '张三', 100); +INSERT INTO `bank` VALUES (2, '李四', 200); + + + +## 练习题: +1, 手动关闭系统全局的全动提交。查询表内容,新增一个自己的帐号,和金额,最后回滚。再查询表内容; +set @@autocommit=0; +SELECT *from bank; +insert into bank values(3,"陈晓东",666); +rollback; +SELECT *from bank; +2,用 START TRANSACTION 开启事务,查询表内容,把李四的金额改成5000,回滚事务,再查询表内容; +start TRANSACTION; +SELECT *from bank; +update bank set money=5000 where username="李四"; +ROLLBACK; +SELECT *from bank; +3,用 START TRANSACTION 开启事务,查询表内容,把李四的金额改成5000,提交事务,再查询表内容; +start TRANSACTION; +SELECT *from bank; +UPDATE bank set money=5000 WHERE username="李四"; +commit; +SELECT *from bank; +4,用 START TRANSACTION 开启事务,查询表内容,把张三的金额改成666,设置保存点s1,用自己姓名添加个新账户,金额888888,设置保存s2,回滚到s1保存点,再查询表内容; +start TRANSACTION; +SELECT *from bank; +UPDATE bank set money=666 WHERE username="张三"; +SAVEPOINT pys1; +insert into bank values(3,"陈晓东",888888); +SAVEPOINT pys2; +ROLLBACK to pys1; +SELECT *from bank; +5,[作业]创建一个实现银行转账业务的存储函数transfer(),传入合适的参数如转出账户编号,转入账户编号,转账金额,返回是否转账成功。 + 提醒.要考虑转出金额不足的情况 +CREATE procedure transfer(in chuid int,in ruid int,in chumoney int) +BEGIN +DECLARE count int default 0; +start TRANSACTION; +if chumoney>money THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '钱不够'; + else + update bank set money =money-chumoney WHERE id=chuid; + update bank set money = money+chumoney WHERE id=ruid; + set count= ROW_COUNT(); + if count=0 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '转账失败'; + end if; + end if; + commit; + end; + + call transfer(1,2,200); +``` + + + -- Gitee