MySql学习
– 第十二部分 函数(常用)
– 日期和时间函数
– CURDATE() 当前日期
– CURTIME() –当前时间
select CURDATE(),CURTIME() from t_time
– 字符串函数
– 1.CHAR_LENGTH(str) – 计算字符串s的字符数
– 2. UPPER(str) – 把所有字母变为大写字母
– 3. LOWER(str) – 把所有字母变为小写字母
SELECT name ,CHAR_LENGTH(name),UPPER(name),LOWER(name) from t_time
– 数学函数
– 1. ABS(X) q求绝对值
SELECT number,ABS(number) from t_time
– 2.SQRT(X) 求平方根
– 3. MOD
(N,M) 求余数
SELECT SQRT(number) ,MOD(9,2) FROM t_time
– 加密函数
– 1.PASSWORD
(str) – 一般对用户的密码加密, 不可逆
– 2.MD5(str)– 普通加密 不可逆
– 3. ENCODE(str,pass_str) – 加密函数,结果时一个二进制的数,必须y用blob类型来保存
– 4. DECODE(crypt_str,pass_str) – 解密函数
insert into t_time VALUES(null,'2017-9-17','ss',1,password('123'))
insert into t_time VALUES(null,'2017-9-17','ss',1,MD5('123'))
select * from t_time
insert into t_time VALUES(null,'2017-9-17','ss',1,MD5('123'),ENCODE('aaa','aa')) -- 加密
SELECT DECODE(pp,'aa') from t_time WHERE id=4; -- 解密
– 第十三部分 存储过程与函数
– 存储过程的引入
– 存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程来执行已经定义好的SQL语句
– 存储过程和函数可以避免开发人员重复的编写相同的SQL语句,而且,存储过程和函数是在MySql服务器中存储和执行的,可以减少客户端和服务器端的数据传输
– 创建存储过程和函数
delimiter &&
create PROCEDURE pro_bok( in b INT, out count_num INT)
READS SQL DATA
BEGIN
select count(*) from t_book WHERE bookTypeId=b;
END
&&
delimiter;
CALL pro_bok (1,@total) -- 调用存储过程
– 创建存储函数
delimiter &&
CREATE FUNCTION fun_book(bookId int )
RETURNS VARCHAR(20)
BEGIN
RETURN (select bookName from t_book where id=bookID);
END
&&
delimiter;
select fun_book(2) -- 调用函数
– 变量的使用
– 定义变量
delimiter &&
create PROCEDURE pro_user()
BEGIN
DECLARE a,b VARCHAR(20);
INSERT INTO t_user VALUES(null,a,b);
END
&&
delimiter ;
CALL pro_user();
SELECT * from t_user
– 为变量赋值
delimiter &&
create PROCEDURE pro_user2()
BEGIN
DECLARE a,b VARCHAR(20);
SET a='java123' ,b='123';
INSERT INTO t_user VALUES(null,a,b);
END
&&
delimiter ;
CALL pro_user2();
SELECT * from t_user
– 游标的使用
– 查询语句可能查询出多条记录,在存储过程和函数中使用游标来逐条读取查询结果中的记录。游标的使用包括声明游标,
– 打开游标,关闭游标。游标必须声明在处理程序之前和变量和条件之后
– 声明游标
delimiter &&
create PROCEDURE pro_user3()
BEGIN
DECLARE a,b VARCHAR(20);
DECLARE cur_t_user2 CURSOR for SELECT userNAME,PASSWORD FROM T_USER2;
OPEN cur_t_user2;
FETCH cur_t_user2 INTO A,B;
INSERT INTO t_user VALUES(null,a,b);
CLOSE cur_t_user2;
END
&&
delimiter ;
– 流程控制的使用
– 存储过程和函数中可以使用流程控制来控制语句的执行
– IF
delimiter &&
create PROCEDURE pro_user4( in bookid INT)
BEGIN
select count(*) into @num from t_user where id=bookid;
IF @num>0 THEN update t_user set userName='dzb' where id=bookid;
ELSE
insert into t_user VALUES(null ,'hasdhsa','dsa');
end IF;
END
&&
delimiter ;
CALL pro_user4(1)
select * from t_user
– CASE
delimiter &&
create PROCEDURE pro_user5( in bookid INT)
BEGIN
select count(*) into @num from t_user where id=bookid;
CASE @num
when 1 THEN update t_user set userName='dzb' where id=bookid;
when 2 THEN insert into t_user VALUES(null ,'hasdhsa','dsa');
ELSE
insert into t_user VALUES(null ,'hasdhsa','dsa');
end CASE;
END
&&
delimiter ;
CALL pro_user5(1)
select * from t_user
– LOOP LEAVE语句
delimiter &&
create PROCEDURE pro_user6( in totalNum INT)
BEGIN
a:LOOP
SET totalNum=totalNum-1;
IF totalNum=0 then LEAVE a;
ELSE insert into t_user VALUES(null ,'hasdhsa','dsa');
END IF;
END LOOP a ;
END
&&
delimiter ;
CALL pro_user6(1)
select * from t_user
– ITERATE 跳出本次循环 进入下次循环
delimiter &&
create PROCEDURE pro_user7( in totalNum INT)
BEGIN
a:LOOP
SET totalNum=totalNum-1;
IF totalNum=0 then LEAVE a;
ELSEIF totalNum=3 then ITERATE a;
END IF;
insert into t_user VALUES(null ,'hasdhsa','dsa');
END LOOP a ;
END
&&
delimiter ;
CALL pro_user7(3)
select * from t_user
– REPEAT 有条件的循环语句
delimiter &&
create PROCEDURE pro_user8( in totalNum INT)
BEGIN
REPEAT
set totalNum=totalNum-1;
insert into t_user VALUES(null ,'hasdhsa','dsa');
UNTIL totalNum=1;
END
&&
delimiter ;
CALL pro_user8(3)
select * from t_user
– WHILE
delimiter &&
create PROCEDURE pro_user9( in totalNum INT)
BEGIN
WHILE
totalNum>0 DO
insert into t_user VALUES(null ,'hasdhsa','dsa');
set totalNum=totalNum-1;
end WHILE;
END
&&
delimiter ;
CALL pro_user9(3)
select * from t_user
– 查看存储过程和函数
– show STATUS 查看存储过程和函数的状态
– SHOW CREATE 查看存储过程函数的状态
show PROCEDURE STATUS LIKE ’ pro_user1’
show CREATE PROCEDURE pro_user1
– 修改存储过程和函数
ALTER PROCEDURE pro_user1 COMMIT ‘测试一个commit’
– 删除存储过程和函数
drop PROCEDURE pro_user1
– 十四部分 数据备份
– 备份数据可以保证数据库数据的安全
– 使用mysqldump命令备份
mysqldump -u root -p db_book >c:db_book.sql
– 数据还原
mysql- u root -p [db_book]< BACKUP.SQL