左连接:左表无限制,都显示,右表对应数据显示,其他为空
右连接:右表无限制,都显示,左表对应数据显示,其他为空
内连接:显示两表对应的数据,有一侧为空都不显示。
外连接:两表都无限制,数据都显示,都可为空。
触发器:触发器是一个特殊的存储过程,它是MySQL在insert、update、delete的时候自动执行的代码块。
create trigger trigger_name after/before insert/update/delete on 表名 for each row begin sql语句:(触发的语句一句或多句) end
*MySQL 的触发器中不能对本表进行 insert、update 和 delete 操作,否则会报错
函数:MySQL中提供了许多内置函数,还可以自定义函数(实现程序员需要sql逻辑处理)
自定义函数: 创建:CREATE FUNCTION 函数名称(参数列表) RETURNS 返回值类型 函数体 调用:SELECT 函数名称(参数列表) 修改: ALTER FUNCTION 函数名称 [characteristic ...] 删除:DROP FUNCTION [IF EXISTS] 函数名称
出错信息: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) 原因: 这是我们开启了bin-log, 我们就必须指定我们的函数是否是 1 DETERMINISTIC 不确定的 2 NO SQL 没有SQl语句,当然也不会修改数据 3 READS SQL DATA 只是读取数据,当然也不会修改数据 4 MODIFIES SQL DATA 要修改数据 5 CONTAINS SQL 包含了SQL语句 其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。 解决方法: SQL code mysql> show variables like 'log_bin_trust_function_creators'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin_trust_function_creators | OFF | +---------------------------------+-------+ mysql> set global log_bin_trust_function_creators=1; mysql> show variables like 'log_bin_trust_function_creators'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin_trust_function_creators | ON | 这样添加了参数以后,如果mysqld重启,那个参数又会消失,因此记得在my.cnf配置文件中添加: log_bin_trust_function_creators=1 创建函数报错
视图:视图是由查询结果形成的一张虚拟表,是表通过某种运算得到的一个投影
create view view_name as select 语句
*视图只是一条预编译的SQL语句,并不保存实际数据
存储过程:把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现(经过第一次编译后再次调用不需要再次编译,比一个个执行sql语句效率高)
create procedure 存储过程名(参数,参数,…) begin //代码 end call 存储过程名(参数...)
#1. 准备表 create table s1( id int, name varchar(20), gender char(6), email varchar(50) ); #2. 创建存储过程,实现批量插入记录 delimiter $$ #声明存储过程的结束符号为$$ create procedure auto_insert1() BEGIN declare i int default 1; while(i<30)do insert into s1 values(i,'eva','female',concat('eva',i,'@oldboy')); set i=i+1; end while; END$$ #$$结束 delimiter ; #重新声明分号为结束符号 #3. 查看存储过程 show create procedure auto_insert1G #4. 调用存储过程 call auto_insert1();
搬运内容,方便查询