mysql

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 个人笔记....仅自己看看

  • 聚合函数 sum max min avg count

  • group by

group by 子句可以包含任数目的字段
group by 子句中每个列都是建所列或有效表达式(不能是聚合函数)
除了聚会计算语句之外,select语句中的每个列都必须在group中出现
如果分组中有null值,则分为一组
group by 子句必须在where字句之后,order by子句之前

  • where过滤行,having过滤的是分组,where没有分组的概念

一般在使用group by子句时,也应该给出order by子句,这是保证数据正确排序的唯一方法,不能依赖group by排序数据
例`
SELECT order_num,SUM(quantity*item_price) AS ordertotal

FROM orderitems GROUP BY order_num HAVING ordertotal >50 ORDER BY ordertotal`

  • 使用子查询 子查询最常用在wherein 操作中
SELECT cust_name,cust_state,(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id=customers.`cust_id`) AS orders
FROM customers
ORDER BY cust_name
  • union规则:

union必须有2个select语句组成
union的每个查询必须包含相同的列,表达式,聚合函数
列数据类型相同

  • union all 保留重复的数据 union默认去除重复的数据

  • MySQL的全文索引

Match()指定被搜索的列,Against()指定要使用的搜索表达式
Myisam支持全文索引,innodb并不支持
创建全文索引fulltext(column)
SELECT note_text FROM products WHERE MATCH(note_text) AGAINST('rabbit')


  • 插入数据 insert table(xx) values (xx)
  • 更新数据 update table set xx = xx
  • 删除数据 delete from table where xx=xx

注意 delete并不删除表本身,只是删除一行,删除所有行用 truncate table

  • 创建试图 ,试图本身不包含数据,最常用的就是隐藏复杂的sql,创建格式为
    create view viewname as select xx

  • 创建存储过程
DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
  SELECT avg(prod_price) AS priceavg FROM products;
END //
DELIMITER ;
CALL productpricing();
DROP PROCEDURE productpricing
  • 存储过程接收三个参数 pl(product lower)产品最低价 ph 最高价,pa平均价
DELIMITER //
CREATE PROCEDURE productpricing(OUT pl DECIMAL(8,2),OUT ph DECIMAL(8,2),OUT pa DECIMAL(8,2))
BEGIN
 SELECT MIN(prod_price) INTO pl FROM products;
 SELECT MAX(prod_price) INTO ph FROM products;
 SELECT AVG(prod_price) INTO pa FROM products;
END //
DEALLOCATE ;
CALL productpricing(@pricelow,@pricehigh,@priceavg)
SELECT @pricelow low ,@pricehigh high,@priceavg AVG
  • 存储过程接受一个参数,输出一个参数 (In Out)
delimiter //
create procedure productpricing(IN onnumber Int ,OUT total decimal(8,2))
BEGIN
select sum(item_price*quantity) INTO total from orderitems where order_num=onnumber ; 
end //
delimiter ; 
call productpricing(20005,@total);
select @total;
  • 带业务的存储过程 1表示true,0表示false
DELIMITER //
CREATE PROCEDURE ordertotal(IN number INT,IN taxable BOOLEAN ,OUT ototal DECIMAL(8,2) )
BEGIN
 -- decalare var for total
 DECLARE total DECIMAL(8,2);
 -- decalare tax percentage
 DECLARE taxrate INT DEFAULT 6;
 
 -- get total the order
 SELECT SUM(item_price*quantity) INTO total FROM orderitems WHERE order_num=number;
 
 -- is this taxable
 IF taxable THEN
   -- yes
   SELECT total+(total/100*taxrate) INTO total;
 END IF;
 -- and finally save our var
 SELECT total INTO ototal;
END //
DELIMITER ;
CALL ordertotal(20005,0,@total);
SELECT @total;
CALL ordertotal(20005,1,@total);
SELECT @total;
  • 使用游标

1.使用游标前,必须声明(定义它),这个过程实际没有检索数据,他只是定义要使用的select语句
2.一旦声明后就要打开游标已供使用
3.在游标结束使用时,必须关闭游标
4.打开游标后使用fetch进行使用

  • 创建游标
DELIMITER //
CREATE PROCEDURE processorders()
BEGIN
   -- declare var
   DECLARE done BOOLEAN DEFAULT 0;
   DECLARE o INT;
   DECLARE t DECIMAL(8,2);
   
   -- declare cursor
   DECLARE ordernums CURSOR
   FOR
   SELECT order_num FROM orders;
   
   -- declare continue handler , this is the end of row
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 
   -- create table
   CREATE TABLE IF NOT EXISTS ordertotals(order_num INT ,total DECIMAL(8,2));
   
   -- open cursor
   OPEN ordernums;
   
   -- loop all rows
   REPEAT
   -- get order number
   FETCH ordernums INTO o;
   -- get total for this order   
   CALL ordertotal(o,1,t);
   
   -- insert order and total
   INSERT INTO ordertotals(order_num,total) VALUES(o,t);
   -- end of loop
   UNTIL done END REPEAT;
   
   -- close cursor
   CLOSE ordernums; 
END //
DELIMITER ;
CALL processorders();
  • 使用游标例子2
DELIMITER //
CREATE PROCEDURE processorders()
BEGIN
 
 DECLARE obj INT;
 DECLARE target DECIMAL (8,2);
 DECLARE done INT DEFAULT FALSE;
 DECLARE cur CURSOR FOR SELECT order_num FROM orders;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
 
 CREATE TABLE IF NOT EXISTS order_total(order_num INT,total DECIMAL(8,2));
 -- open cursor
 OPEN cur;
 read_loop: LOOP
   FETCH cur INTO obj;

   IF done THEN 
     LEAVE read_loop;
   END IF;
 
    CALL ordertotal(obj,1,target);
    INSERT INTO order_total(order_num,total) VALUES(obj,target);
 
  END LOOP; 
 -- close cursor
  CLOSE cur;
 
END //
DELIMITER ;
CALL processorders();
  • 触发器的使用

1 .在创建触发器时,需要给出4条信息:1. 唯一的触发器名,2.触发器关联表,3.触发器应该响应的活动(delete,update,insert),触发器何时执行(处理之前或之后)
2 . 只有表才支持触发器,试图和临时表不支持触发器

  • 触发器例子(但是MySQL 5.0 之后不能返回结果集)
CREATE TRIGGER newproduct2 AFTER INSERT ON order_total FOR EACH ROW SELECT 'products add ';

  • 事物管理 transaction rollback commit save point
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
什么是MySQL?
这篇文章介绍了MySQL,一个流行的开源数据库系统,用于Web应用。MySQL基于客户机/服务器架构,允许多用户并发访问并提供安全控制。它支持SQL标准,包括数据类型如数值、字符串和日期,以及内置函数。查询语言SQL是其核心,强调非过程化编程,简化数据操作。示例展示了如何用SQL选择特定记录。
54 4
什么是MySQL?
|
22天前
|
Oracle 关系型数据库 MySQL
MySQL
是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最
|
3月前
|
SQL NoSQL 关系型数据库
Mysql锁及适用场景
Mysql锁及适用场景
38 0
|
4月前
|
关系型数据库 MySQL AndFix
MySQL 8.0是MySQL
MySQL 8.0是MySQL发展的一个重要里程碑。在这个版本中,MySQL Server层的整体架构得到了质的飞跃,通过持续每三个月的迭代和重构工作,使得MySQL在性能和功能上都有了显著的提升。本文将基于MySQL 8.0.25源码,详细介绍MySQL 8.0的最新架构和一些重要的变化。
80 1
|
11月前
|
SQL 算法 关系型数据库
|
SQL 算法 关系型数据库
【MySQL】 MRR
【MySQL】 MRR
117 0
|
SQL 关系型数据库 MySQL
盘点一下Mysql中的一些小知识(二)
盘点一下Mysql中的一些小知识(二)
79 0
|
关系型数据库 MySQL 数据库
盘点一下Mysql中的一些小知识(五)
盘点一下Mysql中的一些小知识(五)
86 0
|
SQL 关系型数据库 MySQL
Mysql
笔记
121 1
|
SQL
mysql
mysql
110 0