mysql 游标 视图_MYSQL视图 触发器 事务 游标 索引及其使用

select * from(select nid,name from tb1 where nid > 2) As A where A.NAME > ‘alex‘;

#创建视图

create view vi As

select nid,name from A WHERE nid > a;

#删除视图

drop view vi

#修改视图

alter view vi As

select A.nid,B.NAME FROM A

left join B ON A.id = B.nid

left join C ON A.id = C.nid

WHERE

A.id > 2

AND C.nid < 5

#使用视图

select * from vi

#触发器

#创建基本语法

#插入前

CREATE trigger tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW

BEGIN

...

END

#插入后

CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW

BEGIN

...

END

#删除前

CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE tb1 FOR EACH ROW

BEGIN

...

END

#删除后

CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE tb1 FOR EACH ROW

BEGIN

...

END

#更新前

CREATE TRIGGER tri_beofre_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW

BEGIN

...

END

#更新后

CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW

BEGIN

...

END

#插入前触发器

delimiter //

CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW

BEGIN

IF NEW.NAME == ‘alex‘ THEN

VAlUES

(‘aa‘)

END

END //

delimiter;

#插入后触发器

delimiter //

CREATE TRIGGER tri_before_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW

BEGIN

IF NEW.num = 666 THEN

INSERT INTO tb2 (NAME)

VAlUES

(‘666‘),

(‘666‘);

ELSE IF NEW.num = 555 THEN

INSERT INTO tb2 (NAME)

VAlUES

(‘555‘),

(‘555‘);

END IF;

END//

delimiter;

#删除触发器

DROP TRIGGER tri_after_insert_tb1;

#使用触发器

insert into tb1(num) values(666);

#事务

delimiter //

create procedure p1(

OUT p_return_code tinyint

)

BEGIN

DECLEAR exit handler for sqlexception

BEGIN

--ERROR

set p_return_code = 1;

rollback;

END;

DECLEAR exit handler for sqlwarning

BEGIN

--WARNING

set p_return_code = 2;

rollback;

END;

START TRANSACTION;

DELETE from tb1;

insert into tb(name) values (‘seven‘);

COMMIT;

--SUCCESS

set p_return_code = 0;

END\\

delimiter ;

#游标

delimiter //

create procedure p3()

begin

declare ssid int; --自定义变量1

declare ssname varchar(50); --自定义变量2

DECLARE done INT DEFAULT FALSE;

DECLARE my_cursor CURSOR FOR select sid,sname from student;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = True;

open my_cursor;

xxoo: LOOP

fetch my_cursor into ssid,ssname;

if done then

leave xxoo;

END IF;

insert into teacher(tname) values(ssname);

end loop xxoo;

close my_cursor;

end //

delimiter ;

#动态执行SQL

delimiter \\

CREATE PROCEDURE p4(

in nid int

)

BEGIN

PREPARE prod FROM ‘select * from student where nid > ?‘;

EXECUTE prod USING @nid;

DEALLOCATE prepare prod;

END\\

delimiter ;

#删除存储过程

drop procedure proc_name;

#执行存储过程

--无参数

call proc_name()

--有参数

call proc_name(1,2)

--有参数,有in, out, inout

set @t1=0;

set @t2=3;

call proc_name(1,2,@t1,@t2)

#自定义函数

delimiter \\

create function f1(

i1 int,

i2 int)

return int

BEGIN

declare num int;

set num = i1 + i2;

return(num);

END \\

delimiter ;

#删除函数

drop function func_name;

#执行函数

#1.获取返回值

declare @i VARCHAR(32);

select UPPER(‘alex‘) into @i;

SELECT @i;

#2.在查询中使用

select f1(li,nid), name from tb2;

#支持事务的存储过程

set @i = 0;

call p1(@i);

select @i;

class UserInfoRespository:

def get_all(self):

sql = ‘select * from uesrinfo‘

return fetchall()

def get_one_by_user_pwd(self, username, password):

sql = ‘select * from userinfo where username=%s and password=%s‘

cursor.execute(sql,username,password)

return cursor.fetchone()

def add():

sql = "insert into userinfo(...) values (...)"

conn.commit()

obj = UserInfoRespository()

obj.get()

#索引

#创建表+索引

普通索引:加速查询

create table in1(

nid int not null auto_increment primary key,

name varchar(32) not null,

email varchar(64) not null,

extra text,

index ix_name (name)

)

#创建索引

create index index_name on table_name(column_name);

#删除索引

drop index_name on table_name;

#查看索引

show index from table_name;

#如果创建索引时BLOB和TEXT类型,必须指定length

create index ix_extra on ini(extra(32))

2.唯一索引

加速查询和唯一约束(可含null)

创建表+唯一索引

create table in1(

nid int not null auto_increment primary key,

name varchar(32) not null,

email varchar(64) not null,

extra text,

unique ix_name (name)

)

#创建唯一索引

create unique index 索引名 on 表名(列名);

#删除唯一索引

drop unique index 索引名 on 表名;

3.主键索引

加速查询和唯一约束(不可含null)

create table in1(

nid int not null auto_increment primary key,

name varchar(32) not null,

email varchar(64) not null,

extra text,

index ix_name (name)

)

OR

create table in1(

nid int not null auto_increment,

name varchar(32) not null,

email varchar(64) not null,

extra text,

primary key(nid),

index ix_name (name)

)

#创建主键

alter table 表名 add primary key(列名);

#删除主键

alter table 表名 drop primary key;

alter table 表名 modify 列名 int, drop primary key;

#组合索引

创建组合索引

create index ix_name_email on in3(name, email);

repeat循环

delimiter \\

CREATE PROCEDURE proc_repeat()

BEGIN

DECLARE i INT ;

SET i = 0;

repeat

select i;

set i = i + 1;

until i >= 5

end repeat;

END\\

delimiter ;

loop循环

BEGIN

declare i int default 0;

loop_label:loop

set i = i + 1;

if i < 8 then

iterate loop_label;

end if;

if i >= 10 then

leave loop_label;

end if;

select i;

end loop loop_label;

END

#动态执行SQL语句

delimiter \\

DROP PROCEDURE IF EXIST proc_sql \\

CREATE PROCEDURE proc_sql ()

BEGIN

declare p1 int;

set p1 = 11;

set @p1 = p1;

PREPARE prod FROM ‘select * from tb2 where nid > ?‘;

EXECUTE prod USING @p1;

DEALLOCATE prepare prod;

END\\

delimiter;

原文:https://www.cnblogs.com/gerenboke/p/11761393.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值