mysql自定义函数索引_mysql 之索引视图事务存储过程触发器自定义函数

索引

建立索引

约束都会自动建立索引

select * from stu where id = 6;

select * from stu where address = '河南郑州';

create index addrindex on stu(address asc);

使用索引

select * from stu where address = '河南郑州';

事务

A B 50

转账

1) A-50完成

2) B+50完成

3) 事务提交commit

a0763c9d6f68dafc23832f547c7318f5.png

视图

简化查询

a7881f7389f1294bce32167e0a300ee9.png

存储过程

procedure 过程

-- 建立存储过程

delimiter $$

create procedure sss()

begin

select id,name from stu;

end$$

delimiter ;

-- 执行存储过程

call sss;

-- 删除存储过程

drop procedure sss;

触发器

stu 学生成绩表

插入的时候,如果这个学生不及格,不但在此表插入

而且还要将此学生信息插入补考表

stubak 补考表

create database bydb;

use bydb;

create table stu(

id int unsigned auto_increment,

name varchar(30),

score tinyint unsigned,

primary key(id)

);

create table stubak like stu;

-- 建立触发器 会自动使用两个临时表 NEW old

delimiter //

create trigger t1 after insert on stu for each row

begin

if NEW.score <60 or NEW.score is null then

insert into stubak values(NEW.id,NEW.name,NEW.score);

end if;

end //

delimiter ;

insert into stu values(null,'jack',20),(null,'andy',90),(null,'lisi',null);

select * from stu;

select * from stubak;

delete from stu where id = 3;

delimiter //

create trigger t2 after update on stu for each row

begin

-- NEW.score 新成绩 OLD.score 旧成绩

if NEW.score>=60 then

delete from stubak where id = NEW.id;

else

replace into stubak values(NEW.id,NEW.name,NEW.score);

end if;

end //

delimiter ;

delimiter //

create trigger t3 after delete on stu for each row

begin

delete from stubak where id = OLD.id;

end //

delimiter ;

函数

select rand();

编写一个函数实现根据时间来文字提示

2020-7-1 17:54 :01 刚刚

2020-7-1 17:35 :01 xx分钟前

DELIMITER //

CREATE FUNCTION getTime(i DATETIME)

RETURNS VARCHAR(50) DETERMINISTIC

BEGIN

DECLARE str VARCHAR(50) DEFAULT DATE_FORMAT(i,'%Y-%m-%d %H:%i:%s');

DECLARE tlong INT UNSIGNED DEFAULT UNIX_TIMESTAMP(i);

DECLARE slong INT UNSIGNED DEFAULT UNIX_TIMESTAMP();

IF ROUND((slong-tlong)/3600)>=1 THEN

SET str = CONCAT(ROUND((slong-tlong)/3600),'小时前');

ELSEIF ROUND((slong-tlong)/60)>=1 THEN

SET str = CONCAT(ROUND((slong-tlong)/60),'分钟前');

ELSE

SET str = '刚刚';

END IF;

RETURN str;

END //

DELIMITER ;

SELECT *FROM te;

SELECT xv,姓名,score,getTime(shijian) FROM te;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值