2021-10-29(java-mysql数据库复习2)

1.事务(要么都成功,要么都失败):

        例如:转账  A给B转账,B收钱,要么都成功,要么不成功。

        事务原则:ACID原则

                原子性,要么都成功,要么不成功

                一致性,数据要保证一致

                隔离性,多个用户访问数据库时,保证不会访问到他人的。

                持久性,事务一旦提交,不可逆

隔离产生的问题,脏读【隔离失败,读取了另一个数据】        

不可重复读 

幻读:读他人插入的,导致数据不一致。

例子:模拟转账:

set autocommit = 0;                    -- 关闭自动

start transaction                        -- 开启一个事务

update account set money=money-500 where `name` = 'A';

update account set money=money+500 where `name` = 'A';

commit;                -- 提交事务

rollback;                -- 回滚

set autocommit = 1;                    -- 恢复默认值

2.索引:

主键索引 primary key

  • 唯一标识,主键不可重复,只能有一个列作为主键

唯一索引 unique key

  • 避免重复的列出现,唯一索引可以重复,多个列可以表示为 唯一索引

常规索引 index

  • 默认的 index

全文索引 fullText

  • 在特定的数据库引擎下才有,MYISAM
  • 快速定位数据

-- 索引的使用
-- 1、在创建表的时候给字段增加索引
-- 2、创建完毕后,增加索引

-- 显示所有的索引信息

show index from student

-- 增加一个索引
alter table student
add fulltext index `studentname` (`studentname`)

-- explain 分析sql 执行状况
explain select * from student -- 非全文索引

explain select * from student where match(studentname)     against('刘')

-- id_表名_字段名

-- create index 索引名 on 表(`字段`)

create index id_app_user_name on app_user(`name`)

select * from app_user where `name` = '用户9999';

select * from app_user where `name` = '用户9999';

explain select * from app_user where `name` = "用户9999";

索引原则:

  1. 索引不是越多越好
  2. 不要对经常变动的数据加索引
  3. 小数据量的表不需要加索引
  4. 索引一般加在常用来查询的字段上

3.用户管理:

-- 创建用户  create  user 用户名 IDENTIFIED by '密码'
create user k  IDENTIFIED by "123456"

-- 修改密码(修改当前用户密码)
set password = PASSWORD('123456')

-- 修改密码(修改指定用户密码)
set password for k = PASSWORD('111')

-- 重命名  rename user 原名字 to 新名字
rename user k to k1

-- 用户授权  ALL PRIVILEGES 全部的权限 ,库,表
-- ALL PRIVILEGES 除了给别人授权,其他权限都干
grant ALL PRIVILEGES  on *.* to k1
 

-- 查询权限
show grants for k1  -- 查询指定用户权限
show grants for root@localhost 

-- 撤销权限  revoke 哪些权限,在哪个库撤销,给谁撤销
revoke all PRIVILEGES on *.* from k1
 

Guess you like

Origin blog.csdn.net/qq_45688193/article/details/121034636