2019独角兽企业重金招聘Python工程师标准>>>
--语法参考:https://dev.mysql.com/doc/ (当前用的是5.6)
https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-manipulation.html
--视图
CREATE VIEW test.v AS SELECT * FROM t;
--存储过程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_bodyproc_parameter:
[ IN | OUT | INOUT ] param_name typetype:
Any valid MySQL data typecharacteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }routine_body:
Valid SQL routine statement--新建存储过程
delimiter //
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END//
delimiter ;--调用存储过程
CALL simpleproc(@a);
--函数
CREATE
[DEFINER = { user | CURRENT_USER }]
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_bodyfunc_parameter:
param_name typetype:
Any valid MySQL data typecharacteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }routine_body:
Valid SQL routine statement--新建函数
CREATE FUNCTION hello (s CHAR(20))
RETURNS CHAR(50) DETERMINISTIC
RETURN CONCAT('Hello, ',s,'!');
--使用函数
SELECT hello('world');
--事件
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'string']
DO event_body;schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}用法一:
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
用法二:
CREATE EVENT e_totals
ON SCHEDULE AT '2006-02-10 23:59:00'
DO INSERT INTO test.totals VALUES (NOW());用法三:
delimiter |CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END |delimiter ;
用法四:
CREATE EVENT e_call_myproc
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO CALL myproc(5, 27);
--触发器
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_bodytrigger_time: { BEFORE | AFTER } #BEFORE:先触发触发器,再执行操作 | AFTER:执行完操作再触发触发器
trigger_event: { INSERT | UPDATE | DELETE }
CREATE TABLE classification_log
(
id BIGINT(20),
note varchar(128),
utime datetime default NOW()
)
--插入时,触发器记录日志记录日志
CREATE TRIGGER tri_classification
AFTER INSERT ON document_classification
FOR EACH ROW
BEGININSERT classification_log(id , note)
VALUES(new.id,'新插入id');
END;
--修改时,触发器记录日志记录日志
CREATE TRIGGER tri_classificationx3
AFTER UPDATE ON classification_log2
FOR EACH ROW
BEGININSERT classification_log(id , note)
VALUES(old.id,'修改前');INSERT classification_log(id , note)
VALUES(new.id,'修改后');
END;
--删除时,触发器记录日志记录日志
CREATE TRIGGER tri_classificationx4
AFTER DELETE ON classification_log2
FOR EACH ROW
BEGININSERT classification_log(id , note)
VALUES(old.id,'删除前');END;