mysql查漏补缺2

游标

 

CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE a CHAR(16);
  DECLARE b, c INT;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- --指定游标循环结束时的返回值

  OPEN cur1;
  OPEN cur2;

  read_loop: LOOP
    FETCH cur1 INTO a, b;--etch是获取游标当前指向的数据行,并将指针指向下一行,当游标已经指向最后一行时继续执行会造成游标溢出。
    FETCH cur2 INTO c;
    IF done THEN
      LEAVE read_loop;
    END IF;
    IF b < c THEN
      INSERT INTO test.t3 VALUES (a,b);
    ELSE
      INSERT INTO test.t3 VALUES (a,c);
    END IF;
  END LOOP;

  CLOSE cur1;
  CLOSE cur2;
END;
use one

go

--获取所有的banner表 然后游标 加字段
declare tableNames CURSOR for SELECT  NAME  FROM SYSOBJECTS WHERE TYPE='U' and NAME like '%banner%'

open tableNames

DECLARE @temp nvarchar(50)
FETCH NEXT from tableNames into @temp
DECLARE @SQL NVARCHAR(MAX)
while @@Fetch_Status = 0
BEGIN

--set  @SQL ='alter table ' + @temp +' drop column banner_image_p1'
set  @SQL ='alter table '+ @temp +' add banner_image_p VARCHAR(256)'
--如果没有sp_executesql  则exec 把@sql当成存储过程 报错 找不到这个存储过程
EXEC sp_executesql  @SQL
fetch NEXT from tableNames into @temp

END
CLOSE tableNames
DEALLOCATE tableNames;

参考:https://www.jianshu.com/p/f9dcfc14e0b6

范式

范式越高,数据的冗余度越小。其实没有冗余的数据库设计是可以做到的。但是,没有冗余的数据库未必是最好的数据库

 

第一范式:1NF):属性不可分
          (1NF是对属性的原子性约束,要求属性具有原子性,不可再分解)

分表

 

编码

常用

select into table1 from table2 where 条件
复制所有列到一张新表
INSERT INTO table2 SELECT * FROM table1 WHERE condition;
复制列从一张表到另一张表
SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is something else"
END 
FROM OrderDetails;
当第条件满足时 返回一个值
SELECT CONCAT("SQL ", "Tutorial ", "is ", "fun!") AS ConcatenatedString; 
concat是用于字符串拼接

 

分页

select * from table where 1 limit a,b
从第a条开始向后读取b条数据

 

select * from (select Row_number() over (order by id) as row ,* from table) as newTable where row between a and b
 --先给数据标号 读取a和b之间的数据

 

 

mysql中文乱码解决方案:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值