1、数据库实质中访问的是 DBMC,数据库是一种存储介质
2、groub by 与 having 理解
group by 有一个原则,select后面的所有列中,没有使用聚合函数的列必须出现在 groub by 后面, groub by 和聚合函数一起使用
where 子句的作用是对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,条件中不能包括聚合函数
having 子句的作用是筛选满足条件的组,即分组后过滤数据,条件中经常使用聚合函数
3、模糊查询:% _
4、mysql 中五种统计函数:max min sum avg count
5、视图,虚拟的表,包含的不是数据,而是根据需要检索数据的查询,提供了一种 MySQL 的 select 语句层次的封装
order by 可用在视图中,但如果从该视图检索 select 中也包含有 oder by,那么视图的 order by 将被覆盖
6、存储过程,为了方便以后使用而保存的一条或多条 SQL 语句集合,形式如
create proceder procedername(int|out|inout param paramtype)
常用的数据类型有 VARCHAR DATE INT TEXT TIMESTAMP
变量定义
declare viraiblename datatype [default_value]
变量赋值
set var=expression
用户变量,在客户端使用用户变量
>select 'hello world' into @x;
>select @x
例子
mysql>DELIMITER // mysql>CREATE PROCEDURE demo1(INOUT p_inout INT) ->BEGIN ->SELECT p_inout; ->SET p_inout=2; ->SELECT p_inout; ->END->// mysql>DELEMITER ; mysql>SET @p_inout=1; mysql>CALL demo1(@p_inout);
7、MySQL存储过程的控制语句
1)条件语句
mysql>DELIMITER // mysql>CREATE PROCEDURE demo2(IN parameter INT) ->BEGIN ->IF parameter=0 THEN ->UPDATE t SET s1=s1+1; ->ELSE ->UPDATE t SET s2=s2+1; ->END IF; ->END->// mysql>DELEMITER ;
2)case语句
mysql>DELIMITER // mysql>CREATE PROCEDURE demo3(IN var INT) ->BEGIN ->CASE ->WHEN var=0 then ->SELECT 0; ->WHEN var>0 then ->SELECT 1; ->ELSE ->SELECT -1; ->END CASE; ->END ->// mysql>DELEMITER ;
3)循环语句
mysql>DELIMITER // mysql>CREATE PROCEDURE demo4(IN var INT) ->BEGIN ->DECLARE i INT DEFAULT 0; ->WHILE i < var do ->SELECT i; ->SELECT i+1 INTO i; ->END WHILE; ->END ->// mysql>DELEMITER ;
mysql>DELIMITER // mysql>CREATE PROCEDURE demo5(IN var INT) ->BEGIN ->DECLARE i INT DEFAULT 0; ->REPEAT ->SELECT i; ->SELECT i+1 INTO i; ->UNTIL i>var; ->END REPEAT ->END ->// mysql>DELEMITER ;
8、定义条件和处理程序
1)定义条件
DECLARE command_not_allowed CONDITION FOR {SQLSTATE '4200'|1148}
2)定义处理程序
DECLARE hadle_type HANDLER FOR condition_value[,...] sp_statement;
handler_type:CONTINUE EXIT UNDO
9、光标
光标的使用包括声明光标,打开光标,使用光标各关闭光标,光标必须声明在处理程序之前,并且声明在变量和条件之后
1)声明光标
DECLARE cursor_name CURSOR FOR select_statement;
2)打开光标
OPEN cursor_name;
3)使用光标
FETCH cursor_name INTO var_name[,var_name,...];
4)关闭光标
CLOSE cursor_name;
CREATE PROCEDURE curdemo BEGIN DECLARE stop_flag INT DEFAULT 0; DECLARE id INT DEFAULT 0; DECLARE type INT DEFAULT 0; DECLARE ord INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT * FROM table1; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop_flag=1; OPEN cur; FETCH cur INTO id,type,ord; WHILE stop_flag <> 1 DO INSERT INTO table2 VALUES(id, type, ord); FETCH cur into id,type,ord; END WHILE; CLOSE CUR; END
10、触发器
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW
trigger_stmt
trigger_time: BEFORE AFTER
trigger_event: INSERT UPDATE DELETE
11、事务(原子性,一致性,隔离性,持久性)
START TRANSACTION;
SAVEPOINT sp;
ROLLBACK;
ROLLBACK TO sp;
COMMIT;
事务隔离级别:
读未提交,所有事务可以看到其他未提交事务的执行结果
读已提交,一个事务只能看见已经提交事务所做改变
可重复读,在一事务中看到是一致结果
可串行化
12、SQL语句
SELECT columnname, ...
FROM tablename, ...
WHERE ...
UNION ...
GROUP BY ...
HAVING ...
ORDER BY ...