MYSQL 总结

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 ...

  

原文地址:https://www.cnblogs.com/m2492565210/p/7212380.html