数据库技术汇总+示图+代码

MySql底层

MySql分层

数据库技术汇总+示图+代码_第1张图片

sql语句优化,解析,索引,B树

sql优化

  • 原因:
    性能低,执行时间太长,等待时间太长,SQL语句欠佳(连接查询),索引失效,服务器参数设置不合理。。。

  • SQL
    编写过程:select dinstinct …from …join …on …where …group by …having …order by …limit …;
    解析过程:from …on …join …where …group by …having …select dinstinct …order by …limit …;

  • SQL优化:主要优化索引
    索引:相当于书的目录。
    索引:index是帮助MYSQL 高效获取数据的数据结构。索引是数据结构(树:B树(默认),Hash树)。
    索引的弊端:(1)索引本身很大,可以存放在内存/硬盘(通常为硬盘)。
    (2)索引不是所有情况均适用:a.少量数据 b.频繁更新的字段 c.很少使用的字段。
    (3)索引会降低增删改的效率(增删改 查)。
    索引优势:(1)提高查询效率(降低IO使用率)。
    (2)降低CPU使用率(… order by … desc/asc)。

switch…case…when…then…

数据库技术汇总+示图+代码_第2张图片

select user_score.*,
		CASE 
			when user_score.score>=60 THEN 'pass'
		ELSE 'fail' end as 'mark'
	from user_score where userid='1003';

数据库技术汇总+示图+代码_第3张图片

sql编程练习

  1. 用while 语句编写求50到指定的数字之间的所有奇数之和
USE stu;
DELIMITER//
CREATE FUNCTION jisuan(a INT)RETURNS INT
BEGIN
   DECLARE nun INT DEFAULT 0;
   DECLARE b INT DEFAULT 50;
   add_num:WHILE b<a DO
      SET b=b+1;
      IF (b%2=0) THEN 
        ITERATE add_num;
      ELSE
        SET nun=nun+b;
      END IF;
      END WHILE add_num;
      RETURN nun;
END//
SELECT jisuan(60);
DROP FUNCTION jisuan;
  1. 使用case语句判断传入参数的值是否为7,如果则输出1.如果是传入的是14,则输出2.否则输出-1.
-- 创建函数
DELIMITER//
CREATE FUNCTION test(a INT)RETURNS INT
BEGIN
  CASE a
    WHEN 7 THEN 
       RETURN 1;
    WHEN 14 THEN 
       RETURN 2;
    ELSE
       RETURN -1;
END CASE;
END//
-- 调用函数
SELECT test(2);
  1. 创建存储过程,查看指定学生的成绩
DELIMITER//
CREATE PROCEDURE sel(IN s_id INT)
BEGIN
SELECT sc_score FROM score WHERE sc_id=s_id;
END//
-- 调用存储过程
CALL sel(2);
-- 删除存储过程
DROP PROCEDURE sel;

4.创建存储过程,当给定表中的姓名时,即修改电子邮件一个给定的值

DELIMITER//
CREATE PROCEDURE add_info(IN s_name VARCHAR(50),IN s_email VARCHAR(50))
BEGIN
INSERT INTO stu_info(stu_name,stu_email) VALUES (s_name,s_email);
END//
-- 调用存储过程
CALL add_info('zhnagsan','[email protected]');
-- 删除存储过程
DROP PROCEDURE add_info;
  1. 用while语句和iterate语句求100—150的偶数之和,通过leave语句退出循环并输出结果
DELIMITER//
CREATE FUNCTION test(a INT,b INT)RETURNS INT
  BEGIN
  DECLARE number INT DEFAULT 0;
     add_num:WHILE a<b DO
        IF (a%2!=0) THEN
            SET a=a+1;
	    ITERATE add_num;
	 ELSE IF (a%2=0) THEN
	    SET number=number+a;
	    SET a=a+1;
	    ITERATE add_num;
	 ELSE
	    LEAVE add_num;
	 END IF;
         END WHILE add_num;
         RETURN number;
END//

你可能感兴趣的:(数据库技术汇总+示图+代码)