MYSQL笔记

MYSQL

修改表连接字段报错

show variables where Variable_name like 'collation%';  -- 查看数据库
 show create table table_name; -- 查看表属性

 alter table table_name default character set utf8mb4 collate=utf8mb4_0900_ai_ci;  -- 修改表属性
 ALTER TABLE table_name convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; -- 修改表字段属性

执行SQL

-- 不需要参数 需要在存储过程中执行
/*指定SQL内容*/
SET @sql_content="select 1999";
/*预处理SQL,如果SQL格式不对,则会报错。*/
PREPARE sql_sentence FROM @sql_content;
/*执行SQL*/
EXECUTE sql_sentence;
/*取消预处理。*/
DEALLOCATE PREPARE sql_sentence;

-- 带参数
/*传递参数,以传递@param_id、@param_id2为例。*/
SET @param_id='1', @param_id2='2';
SET @sql_content="select ? param_id,? param_id2";
PREPARE sql_sentence FROM @sql_content;
/*注意参数顺序。*/
EXECUTE sql_sentence USING @param_id,@param_id2;
DEALLOCATE PREPARE sql_sentence;

将表的结果导出文件

show variables like '%secure%' 
select * into outfile 'D:\app11my1test.xls' from t_students  ;
-- 查看路径
本地的my.ini配置文件修改此属性
-- 解决乱码
SELECT a.*
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/mytest3.csv' 
CHARACTER SET gbk
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
from eemployee a ;

MySQL连接MySQL(DBLINK)

查看本地mysql的有没有federated 引擎:
mysql> show engines;

在mysql目录下的my.ini文件里添加一行

federated
重启mysql服务,然后查看federated 

CREATE TABLE dblink_view (
bank_name VARCHAR(50),
sys_bank_code VARCHAR(12),
PROV_INPUT_NAME VARCHAR(20),
NAME VARCHAR(10)
)ENGINE=FEDERATED CONNECTION='mysql://bankinfo:bankinfo@192.168.3.42:3307/t2_cpv2/view_bt_input_bank_info';

engine=federated connection = 'mysql://用户:密码@IP地址:端口/库名称/表名称';

完成后就可以本地数据库查到远程库数据:SELECT * FROM dblink_view;

查询存储过程中含有某字符sql

select name
from sysobjects o, syscomments s
where o.id = s.id
and text like '%222010%'
and o.xtype = 'P'

打印错误信息

GET DIAGNOSTICS CONDITION 1 @v_sqlstate=RETURNED_SQLSTATE,@v_message= MESSAGE_TEXT;
SELECT @v_sqlstate,@v_message;

程序过程中发生死锁

 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;-- 查询死锁
  kill 791985; -- 杀掉

MYSQL游标的使用

CREATE DEFINER=`root`@`localhost` PROCEDURE `p111`()
begin
    declare TID int;
    declare TName varchar(15);
		declare flag int default 0;  -- 定义变量
    -- 声明游标
    declare mc cursor for  select teacherid,teachername from   teachers; 
		declare CONTINUE HANDLER for not found set flag=1; --      这句话的意思是当游标执行到最后一条(游标会多执行一次),系统设置这个变量为1
    -- 打开游标
    open mc;
    -- 获取结果
	  Re:loop  -- 循环,将表的内容都转移到class2中
    fetch mc into TID,TName;
     -- 当无法fetch会触发handler continue
    if flag=1 then 
		leave Re;
		end if;
	 
    select TID,TName;
    -- 关闭游标
    end loop;
		
      
    -- 关闭游标
    close mc;
    
end

动态参数写法

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(P_find VARCHAR(2000))
begin 
DECLARE  v_sqlcounts  varchar(500);
DECLARE  recordcount  varchar(500);

set v_sqlcounts = concat('select *  from  teachers where  name like  \'%?\'%');  
set @sqlcounts := v_sqlcounts;  
#预处理动态SQL  
set @n=P_find;
prepare stmt from @sqlcounts;  
#传递动态SQL内参数   
execute stmt using @n;  
deallocate prepare stmt;  
#获取动态SQL语句返回值  
SELECT @b;
end

DBlink MYSQL连MYSQL

参考自 https://www.cnblogs.com/luoyanga/p/13885462.html

在mysql目录下的my.ini文件里添加一行

federated
重启mysql服务,然后查看federated 

mysql> show engines;
在本地创建和远程数据库的表的表结构一致的表,以及远程数据库的连接:例如

CREATE TABLE dblink_view (
bank_name VARCHAR(50),
sys_bank_code VARCHAR(12),
PROV_INPUT_NAME VARCHAR(20),
NAME VARCHAR(10)
)ENGINE=FEDERATED CONNECTION='mysql://bankinfo:bankinfo@192.168.3.42:3307/t2_cpv2/view_bt_input_bank_info';

 engine=federated connection = 'mysql://用户:密码@IP地址:端口/库名称/表名称';

完成后就可以本地数据库查到远程库数据:SELECT * FROM dblink_view;

将多个结果合并到一行


select id,group_concat(name) from aa group by id;

以id分组,把name字段的值打印在一行,分号分隔 
mysql> select id,group_concat(name separator ';') from aa group by id;

以id分组,把去冗余的name字段的值打印在一行, 
逗号分隔

以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序 
mysql> select id,group_concat(name order by name desc) from aa group by id;
mysql> select id,group_concat(distinct name) from aa group by id;

将获取的结果附加行号

SELECT @rownum:=@rownum+1 AS rownum, tablename.*
FROM (SELECT @rownum:=0) r, tablename;

调整字段顺序

ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRSTAFTER 字段名2;

分隔符报错

MySQL是以; 分号结尾儿提交查询的,当函数或者存储过程中,会误将直接提交,使用前者将真正的分隔符设置为//或者其他也可
,再在结尾处将其还原为; 
使用该语法
delimiter //
 //
delimiter ;

日历横标写法

with A AS (
select CONCAT(YEAR(TERM),'年-',MONTH(TERM)) As YEARs,day(term) AS days,xtype from ACALENDAR where    day(term)=1
 ),
B AS (
select CONCAT(YEAR(TERM),'年-',MONTH(TERM)) As YEARs ,day(term)  AS days,xtype from ACALENDAR where    day(term)=2
),
C AS (
select CONCAT(YEAR(TERM),'年-',MONTH(TERM)) As YEARs ,day(term)=29  AS days,xtype from ACALENDAR where  day(term)=29 
union 
select CONCAT(YEAR(TERM),'年-',MONTH(TERM)) As YEARs ,29  AS days,null As xtype from ACALENDAR where  day(term)=1 and 
 MONTH(term) not in (
select MONTH(TERM)  AS days from ACALENDAR where  day(term)=29 )
)

select DISTINCT A.YEARs,A.xtype,B.xtype,C.xtype
from A,B,C 
where A.YEARs=b.YEARs and A.YEARs=C.YEARs;

查询创建结构

show create procedure aSP_Month_Submit1 ;
show create table mytest ;
show create view skywfemployee;

MYSQL纵转横

--查询实现

SELECT tb_test.id,

MAX(IF(tb_test.attr = 'age', tb_test.attr_value, NULL)) AS age,

MAX(IF(tb_test.attr = 'sex', tb_test.attr_value, NULL)) AS sex,

MAX(IF(tb_test.attr = 'name', tb_test.attr_value, NULL)) AS `name`,

MAX(IF(tb_test.attr = 'hobby', tb_test.attr_value, NULL)) AS hobby

FROM tb_test;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CSDN是一个技术交流平台,里面有许多关于各种编程语言和数据库的学习资料和笔记。而MySQL是其中一种常用的关系型数据库管理系统,也是开放源代码软件之一。 在CSND上,MySQL笔记是指关于MySQL数据库的学习和使用的笔记和教程。这些笔记包含了MySQL数据库的基本概念、安装配置、SQL语句的使用、数据表的设计和管理、索引使用、数据备份和恢复等方面的知识。学习MySQL笔记可以帮助开发者更好地理解和应用MySQL数据库MySQL笔记主要可以分为以下几个方面来介绍和学习: 1. 数据库基础知识:学习数据库的基本概念和原理,了解关系型数据库的特点以及MySQL的特点。 2. 安装和配置:学习如何在不同操作系统上安装和配置MySQL数据库,包括设置用户名、密码和端口等。 3. SQL语句的使用:学习SQL语句的基本语法和常用命令,包括查询、插入、更新、删除等操作。 4. 数据表的设计和管理:学习如何设计和创建数据表,包括选择适当的数据类型、设置主键和外键等。 5. 索引的使用:学习如何创建和使用索引来提高查询效率和数据访问速度。 6. 数据备份和恢复:学习如何进行MySQL数据库的数据备份和恢复,包括全量备份和增量备份等。 通过学习MySQL笔记,开发者可以掌握MySQL数据库的基本操作和高级功能,提高数据管理和查询的效率。此外,还可以了解MySQL数据库的优化技巧和性能调优方法,提升数据库的性能和稳定性。 总之,通过CSDN上的MySQL笔记,开发者可以系统地学习和掌握MySQL数据库的相关知识,从而更好地应用于实际的项目开发中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值