当前位置: 代码迷 >> 综合 >> MySQL笔记-2-函数,存储引擎,管理工具
  详细解决方案

MySQL笔记-2-函数,存储引擎,管理工具

热度:2   发布时间:2023-12-16 05:07:24.0

系统函数

字符函数

CONCAT()使用方法:

1、SELECT CONCAT(‘字符1’,’字符2’,’字符N’,…);
2、SELECT CONCAT(字段1,字段2,…) AS 别名 FROM 表名;

CONCAT_WS()使用方法:

1、SELECT CONCAT_WS(‘分隔符’,’字符1’,’字符2’,’字符N’,…); 说明:分隔符放第一个,用于字符间的分隔

FORMAT()使用方法:

1、SELECT FORMAT(数值,小数位); 说明:把这个函数归类为字符函数,是因为该函数返回字符类的值,函数会以千分位来显示数值,如12,560.75 ,小数位自动四舍五入,如果为0,则舍去小数位,只保留整数

LEFT()使用方法:

1、SELECT LEFT(‘字符’,获取字符数);

RIGHT()使用方法:

1、SELECT RIGHT(‘字符’,获取字符数);

数值运算符和函数

CEIL()–进一取正
FLOOR()–舍一取正
DIV–整数除法
MOD –取余
POWER() –幂运算
ROUND() –取余(四舍五入)
TRUNCATE() –截断(不四舍五入)

实例:

CEIL(3.01) ==>4 /*有n.xx 都是n+1 进一取整 向上取整
FLOOR(3.99) ==>3 /*取n.xx 都是n 舍一取整 向下取整
SELECT 3 DIV 4 ==> 0 /*整数除法
SELECT 3/4 ==>0.75 /*除法
SELECT 21 MOD 2 ==>1 /*取余数(取模)整数,小数都可以
SELECT 21 % 2 ==>1 /*取余数(取模)整数,小数都可以
SELECT POWER(3,4) ==>81 /*3的4次方 幂运算
SELECT ROUND(3.1415926,4) ==>3.142 /*四舍五入
SELECT TRUNCATE(123.89,1) ==>123.8 /*截取小数点后的位置
SELECT TRUNCATE(123.89,0) ==>123 /*截取小数点后的位置,0位为整数部分
SELECT TRUNCATE(123.89,-1) ==>120 /*截取-1,从个位起去掉后面的数值替换为0

比较函数

SELECT 15 BETWEEND 1 AND 20 ==> 1 /*15 在1到20之间 ,返回值是1
SELECT 15 NOT BETWEEND 1 AND 20 ==>0 /* 15在1到20之间,条件不成立 返回值是0
SELECT 10 IN(5,10,15) ==> 1 /*值是否在给定的数值中,如果在返回1,不在返回0 条件成立为1不成立为0
SELECT 10 NOT(5,10,15) ==> 0 /*数值是否不在给定的数值中,如果不在返回1,在返回0 条件成立为1不成立为0
SELECT NULL IS NULL ==>1 /* 空是空 条件成立返回1,不成立返回0
SELECT ” IS NULL ==> 0 /* 除了NULL空其它都是非空 返回都是1
SELECT * FROM ABC WHERE ID IS NOT NULL

日期时间函数

NOW() /*当前时间 含日期时间
CURDATE() /* 当前日期 只有日期
CURTIME() /*当前时间 值有时间
DATE_ADD() /*时间增减或减少
SELECT DATE_ADD(‘2014-3-12’,INTERVAL 365 DAY); ==>2015-3-12 /*在原有给定的时间上增加365天
INTERVAL增加可以增加负值 单位 year ,month,week,day
SELECT DATEDIFF(‘2014-1-1’,’2015-1-1’) ==> -365 /*时间差值计算 单位为日 前面时间减去后面时间
SELECT DATE_FORMAT(‘2014-3-2’,’%m/%d/%d’); ==> 03/02/2014 /*日期格式转换

信息函数

SELECT CONNECTION_ID(); ==>2 /*连接ID
SELECT DATABASE(); /*当前打开的数据库
SELECT LAST_INSERT_ID(); /*最后插入的记录 同时写入多条记录是只返回写入的第一条的id。要有自动编号的主键
DESC tab_name; /*查看数据库字段及属性 查看表结构
SELECT USER(); /* 打印当前用户信息
SELECT VERSION(); /*打印当前数据库信息

聚合函数

聚合函数只有一个返回值:
AVG() 平均值
COUNT() 计数
MAX() 最大值
MIN() 最小值
SUM() 求和

加密函数

1,MD5() ;一种摘要的算法

select md5(’admin’);给admin加密。如果mysql中的信息是为了web开发做准备,那么尽量使用md5.
PASSWORD md5(’admin’);进行密码的计算,修改当前或者其他客户端

2,改掉密码:SET PASSWORD=PASSWORD(‘dimitar’);

检测 退出 登陆 mysql -uroot -p;拒绝登陆
mysql -uroot -pdimitar;登陆成功

自定义函数

不带参数的函数案例:

一般调用日期函数

SELECT DATE_FORMAT(NOW(),’%Y年%m月%d日 %H:%i:%S %Y年第%I周星期%w’ )

自定义日期函数

CREATE FUNCTION date_cn() RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW(),’%Y年%m月%d日 %H:%i:%S %Y年第%I周星期%w’ )

调用自定义函数

SELECT date_cn()

删除自定义函数

DROP FUNCTION date_cn

带参数的函数案例:

例子:

CREATE FUNCTION SHOW_AVG(num1 SMALLINT UNSIGNED , num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN (num1 + num2)/2;

  • 删除函数:DROP FUNCTION function_name;
  • 查询函数:SHOW FUNCTION STATUS;

常见具有复合结构体的自定义函数:

修改分隔符:DELEMITER 分隔符

例:DELIMITER //
/* 将分隔符修改为 ‘//’
当函数体内需要执行的是多条语句时,要使用BEGIN…END语句
且当编写函数体内容的时候,需要使用 DELIMITER 关键字将分隔符先修改为别的,否则编写语句的时候写到 ‘;’ 的时候会直接执行,导致函数编写失败
删除函数:DROP FUNCTION [IF EXISTS] function_name
*/
例:
DELIMITER //
CREATE FUNCTION ADD_USER(p_id SMALLINT,username VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT user(p_id,username) VALUES(p_id,username);
RETURN LAST_INSERT_ID();
END

存储过程函数

1.语法结构分析

CREATE
[DEFINER = {user|CURRENT_USER}]
PROCEDURE sp_name ([proc_parameter[,…]]) //可以带0到多个参数
[characteristic …] routine_body
其中参数
proc_parameter:
[IN | OUT | INOUT] param_name type
IN, 表示该参数的值必须在调用存储过程时指定
OUT, 表示该参数的值可以被存储过程改变,并且可以返回
INOUT, 表示该参数的值调用时指定,并且可以被改变和返回

2.特性

COMMENT ‘string’
| {CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA|SQL SECURITY{DEFINER|INVOKER}
COMMENT:注释
CONTAINS SQL:包含SQL语句, 但不包含读或写数据的语句
NO SQL:不包含SQL语句
READS SQL DATA:包含读数据的语句
MODIFIES SQL DATA:包含写数据的语句
SQL SECURITY {DEFINER|INVOKER}指明谁有权限来执行

3.过程体

(1)过程体由合法的SQL语句构成;
(2)过程体可以是任意SQL语句;
(3)过程体如果为复合结构则使用BEGIN…END语句
(4)复合结构可以使用条件、循环等控制语句

创建不带参数的存储过程:

1.创建没有参数的存储过程

CREATE PROCEDURE sp1() SELECT VERSION();

2.调用存储过程

CALL sp_name([parameter[,…]]) - 带参数的存储过程的调用
CALL sp_name[()] - 不带参数的存储过程调用
CALL sp1;
CALL sp1();

例子:创建一个获得fruit表记录的存储过程:

DELIMITER //
CREATE PROCEDURE CountProc(OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM fruit;
END//

创建带有IN OUT类型参数的存储过程

DELIMITER //
CREATE PROCEDURE removerUserAndReturnUserName(IN showID INT UNSIGNED,OUT showName INT UNSIGNED)
BEGIN
DELETE FROM user WHERE id = showID;
SELECT count(ID) FROM user INTO showName;
END
//
SELECT count(ID) FROM user INTO showName; /* 该语句中的 INTO 含义就是将 SELECT 语句结果的表达式返回到 showName 变量中 /
CALL removerUserAndReturnUserName(10,@nums); /* @nums 所代表的就是用户变量,可用 SELECT @nums 输出 /
用 DECLARE 声明的变量是局部变量,局部变量只能存在于 BEGIN…END 之间,且声明时必须置于 BEGIN…END 的第一行
而通过 SELECT…INTO…/SET @id = 07 这种方法设置的变量我们称之为用户变量,只能存在于当前用户所使用的客户端有效。
CALL rmUserAndRtUserNums(27, @nums);
SELECT @nums; //@nums - 就是用户变量
DECLARE声明的变量都是在BEGIN与END之间,是局部变量
SET @i = 7; //通过@或SET设置的变量称为用户变量

创建带有多个OUT类型参数的存储过程

DESC users;
SELECT * FROM users;
SELECT ROW_COUNT(); //
DESC test;
INSERT test(username) VALUES(‘A’),(‘B,’),(‘C’);
——!!!!—— SELECT ROW_COUNT(); //返回被插入的记录总数
SELECT * FROM test;
UPDATE test SET username = CONTCAT(username, ‘–immoc’) WHERE id <= 2;
SELECT row_COUNT(); //得到被更新的记录总数
DELIMITER //
CREATE PROCEDURE rmUserByAgeAndRtInfos(IN p_age SMALLINT UNSIGNED, OUT delNums SMALLINT UNSIGNED, OUT leftNums SMALLINT UNSIGNED)
BEGIN
DELETE FROM users WHERE WHERE age = p_age; //注意变量不同
SELECT ROW_COUNT() INTO delNums;
SELECT COUNT(id) FROM users INTO leftNums;
END
//
DELIMITER ;
SELECT * FROM users;
SELECT COUNT(id) FROM users WHERE age = 20;
CALL rmUserByAgeAndRtInfos(20, @a, @b);
SELECT * FROM users;
SELECT COUNT(id) FROM users WHERE age = 23;
CALL rmUserByAgeAndRtInfos(23, @a, @b);
SELECT @a, @b;

返回被插入的记录总数

SELECT ROW_COUNT(); //返回被插入的记录总数
SELECT * FROM test;
UPDATE test SET username = CONTCAT(username, ‘–immoc’) WHERE id <= 2;
SELECT row_COUNT(); //得到被更新的记录总数
DELIMITER //
CREATE PROCEDURE rmUserByAgeAndRtInfos(IN p_age SMALLINT UNSIGNED, OUT delNums SMALLINT UNSIGNED, OUT leftNums SMALLINT UNSIGNED)
BEGIN
DELETE FROM users WHERE WHERE age = p_age; //注意变量不同
SELECT ROW_COUNT() INTO delNums;
SELECT COUNT(id) FROM users INTO leftNums;
END
//
DELIMITER ;
SELECT * FROM users;
SELECT COUNT(id) FROM users WHERE age = 20;
CALL rmUserByAgeAndRtInfos(20, @a, @b);
SELECT * FROM users;
SELECT COUNT(id) FROM users WHERE age = 23;
CALL rmUserByAgeAndRtInfos(23, @a, @b);
SELECT @a, @b;

存储引擎的特点

这里写图片描述

修改方式

1.修改MySQL的配置文件来实现:

default-storage-engine = engine

2.创建数据表的时候指定

create table TP1(
s1 varchar(10)
)ENGINE = MyISAM

3.修改数据表存储引擎

alter table TP1 ENGINE=InnoDB

MySQL图形化管理工具

1,phpMyAdmin—>需要php语言支持
2,Navicat—>支持中文
3,MySQL Work Bench—->MySQL官方工具

  相关解决方案