mysql内置函数
字符串函数
select ASCII('A');
select TRIM(' bar ');数学函数
select FLOOR(1.23);
select PI();
select RAND();时期时间函数
select now();
mysql自定义函数
create function f() returns varchar(30)
return date_format(now(),'%Y年%m月%d日');
调用 select f()
;
删除自定义函数 DROP FUNCTION f
;
视图
视图是存放数据的一个接口,也可以说是虚拟的表。这些数据可以是从一个或几个基本表(或视图)的数据。也可以是用户自已定义的数据。其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面的数据发生变动时,视图里面的数据随之变动。
- 视图创建
use shop; select * from onethink_attrval;
SELECT title,onethink_attrkey.kname,onethink_attrval.vname FROM `onethink_attrval`
LEFT JOIN onethink_attrkey ON onethink_attrkey.id = onethink_attrval.kid
LEFT JOIN onethink_goods ON onethink_goods.id = onethink_attrval.gid
SELECT `title` as t,`vname` as v,`kname` as k FROM `onethink_attrval`
INNER JOIN onethink_attrkey ON onethink_attrkey.id = onethink_attrval.kid
INNER JOIN onethink_goods ON onethink_goods.id = onethink_attrval.gid
create [or replace] view v_name as select...
drop table tablename
删除表
drop view viewname
删除视图
视图创建特点
视图涉及到相关字段名,不能有重复
视图名字不能与任何表名重复
创建视图的sql查询语句,语法与普通查询一样
视图查询与普通sql查询一致,如视图名为news_view,查询
语句:select* from news_view
视图的作用
安全性:隐藏真实的数据表,防止数据表泄漏。
开发速度提升:例如多表查询,以往要写复杂的语句,现在
多个表关联到一个视图,只查询一个视图,语句变得简单
查询速度提升:以往多表查询,需从硬盘中获取多次,而视
图只获取一次
预处理
不需要每次请求mysql 提前存储起来
prepare sql1 from 'select * from a where id=?';
set @i=1;
execute sql1 using @i;
drop prepare sql1;
事务处理(innodb)
组合多个操作其中一个失败 执行回滚
set autocommit=0;
delete from a where id=4;
rollback;
commit;
savepoint p1;
rollback to p1;
存储过程
我们常用的操作数据库语言SQL语句在执行的时候需要要先编
译,然后执行,而存储过程(StoredProcedure)是一组为了完
成特定功能的SQL语句集,经编译后存储在数据库中,用户通
过指定存储过程的名字并给定参数(如果该存储过程带有参数
)来调用执行它。MySQL在5.0以前并不支持存储过程。
创建存储过程
CREATE PROCEDURE 过程名([过程参数[,...]])
BEGIN
过程体
END
调用存储过程
CALL过程名 ([过程参数[,...]])
\d //
create procedure p1()
begin
set @i=3;
while @i<=100 do
insert into aaa(name) values(concat('user',@i));
set @i = @i+1;
end while;
end//
call p1;
調用存儲過程
truncate aaa;
截断表
show create procedure p1;
查詢創建的 存儲過程
触发器
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用
,也不是手工启动,而是由事件来触发,比如当对一个表进行操作
(insert,delete,update)时就会激活它执行。触发器经常用于加
强数据的完整性约束和业务规则等。
创建触发器
CREATE TRIGGER 触发器名时机(BEFORE或AFTER)触发
事件(INSERT| UPDATE| DELETE)ON 数据表(必须是实体
表)FOR EACHROW BEGIN 过程体 END
create trigger t1 before insert on aaa for each row
begin
insert into bbb(name) values(new.name);
end//
drop trigger t1;
删除触发器
触发器的优点与缺点
触发器有回滚性,当触发器发生错误,能回滚此次所做操作。
维护困难,对于程序员来说,触发器是看不到的,这样给阅读
程序带来一定难度