文章目录
相关子查询
SELECT deptno,ename,max(sal) from emp GROUP BY deptno
SELECT * from emp e1 where sal in(SELECT max(sal) from emp e2 where e1.deptno=e2.deptno)
索引
- 提高查询速度
- BTREE(B+TREE) 和 HASH两种算法
- 索引会提高查询的速度,但是会降低添加,更新,删除的速度(不仅操作数据库表,也要操作索引)
show INDEX from emp;
SELECT * from emp WHERE empno=1;
SELECT * from emp WHERE ename='湛山';
CREATE index index_emp_ename on emp(ename)
SELECT * from emp WHERE ename='湛山';
drop index index_emp_ename on emp;
事务
- 事务是用来维护数据库完整性的
- 原子性:使用事务对数据进行修改的操作序列,要么全部执行,要么全不执行。
- 一致性:一致性是指事务执行的结果必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库中只包含事务成功提交的结果时,数据库处于一致性状态。一致性是通过原子性来保证的。
- 隔离性:隔离性是指各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。也就是说:并发执行的事务之间既不能看到对方的中间状态,也不能相互影响。
- 持久性:持久性指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中,通常是保存进物理数据库,即使数据库出现故障,提交的数据也应该能够恢复。但如果是由于外部原因导致的数据库故障,如硬盘被损坏,那么之前提交的数据则有可能会丢失。
create table account(
id int primary key auto_increment,
username varchar(30) not null,
balance double
);
insert into account (username, balance) values('张三', 2000),('李四', 2000);
select * from account;
start transaction;
update account set balance=balance-200 where username='张三';
update account set balance=balance+200 where username='李四';
select * from account;
commit;
rollback;
select @@transaction_isolation;
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
视图
- 好处:
- 简化用户操作,将复杂得语句存储为一张视图可以随时调用
- 对机密数据提供安全保护:有了视图,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,避免机密数据(如,敏感字段“salary”)出现在不应该看到这些数据的用户视图上。这样视图就自动提供了对机密数据的安全保护功能
SELECT * from emp;
SELECT empno,ename,job,mgr,HIREDATE,COMM,deptno from emp
CREATE VIEW myview1
as
SELECT empno,ename,job,mgr,HIREDATE,COMM,deptno from emp
SELECT * from myview1;
CREATE VIEW myview2
as
SELECT dept.deptno,emp.ename,emp.job from emp join dept on emp.deptno=dept.deptno;
SELECT * from myview2;
INSERT into myview1 VALUES(7777,"ACONGSUN","HJH",7839,"1999-05-12",2850,30);
create or REPLACE view myview3
as
SELECT deptno,avg(sal) "平均薪资" from emp GROUP BY deptno;
SELECT * from myview3;
drop view myview3;
show TABLES
存储过程
- 感觉像是封装一个方法在数据库调用方法得形式
- 优点:
- 提高执行性能。
- 可减轻网络负担。
- 可将数据库的处理黑匣子化。
create procedure myproc1(in name varchar(20))
begin
if name is null or name = '' then
select * from emp;
else
select * from emp where ename like CONCAT("%",name,"%");
end if;
end
call myproc1("AR");
call myproc1("");
drop PROCEDURE myproc1
create procedure myproc2(in name varchar(20),out num int(4))
begin
if name is null or name = '' then
select * from emp;
else
select * from emp where ename like CONCAT("%",name,"%");
end if;
select found_rows() into num;
end
call myproc2("AR",@num);
select @num
数据得导入导出
- 导出: 转储SQL文件,并保存
- 导入:在需要导入的数据库中运行SQL文件即可。
远程访问数据库
- 将自己数据库得权限从localhost改成%
- 刷新数据库权限 flush privileges;
- 输入需要远程访问得数据库得ip地址以及对应得数据库名称和密码即可