MySQL补充

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;删除触发器

触发器的优点与缺点
 触发器有回滚性,当触发器发生错误,能回滚此次所做操作。
 维护困难,对于程序员来说,触发器是看不到的,这样给阅读
程序带来一定难度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,823评论 18 399
  • 今天读完了奇特的一生剩余的全部内容,后面的内容吸引我的不是太多,感觉柳比歇夫的终生成就没有我想象的那么大,...
    丽享成长阅读 1,400评论 0 0