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
全文索引 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";
索引原则:
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表不需要加索引
- 索引一般加在常用来查询的字段上
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 ?
|