1.客户端工具的连接问题。
客户端使用Mysql Workbench 默认连接几分钟就会超时,导致客户端就卡死了,半天才会反应过来。不像Sqlserver数据库默认长连接的,需要在工具里面设置下。 Edit-->Preferences-->SQL Editor
这个更正下,之前写的有问题,红色框住的意思:时间越短越好 这是设置的心跳时长
2.调用存储过程
使用 Call 存储过程名
3.存储过程声明变量和把查询列赋值给变量。
DECLARE userId INT default 0;
DECLARE userName NVARCHAR(64);
select 字段1 into 声明的变量1
from 表1
多字段写法:
select 字段1,字段2 into 声明的变量1,声明的变量2
from 表1
4.if语法
IF 条件1
THEN
......
ELSEIF userType=2 THEN
......
ELSEIF userType=3 THEN
......
END IF;
5.获取服务器时间函数
now()
6.创建存储过程
create procedure 存储过程名(参数)
7.存储过程传参数不能和字段一样
SELECT
*
FROM 表 WHERE A.abc=abc;
8.mysql存储过程多余参数不能是DateTime类型的。
在navicat上远bai程连接MySQL,运行存du储过程时传入了一个时间zhi参数‘0000-00-00 00:00:00’,发生如下错误dao
1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'targetTime' at row 1
官方文档上说明zhuanMySQL允许将’0000-00-00’保存为“伪日期shu”,但是MySQL有一个NO_ZERO_DATE SQL模式,这个模式默认是打开的,不允许产生伪日期,所以要关掉这个选项。执行SQL语句:
set global sql_mode='STRICT_TRANS_TABLES,STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER';
9.传入 "1,2,3,4,5,6,7" .需要Split之后去检索的方法
select *
from Table A
where A.Column regexp concat('[', replace('1,2,3,4,5,6,7',',','|'),']');
10.关联更新语句:
UPDATE table1 A
INNER JOIN table2 B
ON A.id=B.id
SET A.Name=B.Name
WHERE B.IsValid=1;
12.mysql关联表删除数据
有时候我们需要删除表中部分内容,或删除一个表中在另一个表中已经存在的内容,可以用以下方法:
1、delete from t1 where 条件;
2、delete t1 from t1, t2 where 条件;
3、delete t1, t2 from t1, t2 where 条件;
eg:
删除表t1已经在表t2中存在的数据:
DELETE t1 FROM table_1 t1, table_2 t2 WHERE t1.id=t2.id and t1.year=t2.year and t1.month=t2.month;
13.6位精度的时间戳
select unix_timestamp('2020-12-11 15:19:06.821390');
14.将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示。
select from_unixtime(1607671146.821390);
常见错误提示:
MySQL 错误1418 的原因分析及解决方法。
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句
其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
在MySQL中创建函数时出现这种错误的解决方法:
set global log_bin_trust_function_creators=TRUE;
注:语句需要在root用户下执行。
mysql删除表提示Cannot truncate a table referenced in a foreign key constraint解决办法
- 删除之前先执行
删除外键约束
SET foreign_key_checks = 0
- 删除完之后再执行
启动外键约束
SET foreign_key_checks = 1
mysql时间与字符串之间相互转换
1.时间转字符串
DATE_FORMAT(日期,格式字符串)
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
2.字符串转时间
STR_TO_DATE(字符串,日志格式)
SELECT STR_TO_DATE('2019-01-20 16:01:45', '%Y-%m-%d %H:%i:%s');
3.时间转时间戳
select unix_timestamp(now());
4.字符串转时间戳
select unix_timestamp('2019-01-20');
5.时间戳转字符串
select from_unixtime(1451997924,'%Y-%d');
附日期格式如下:
%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一