zoukankan      html  css  js  c++  java
  • 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

    #事务

    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;

  • 相关阅读:
    无法识别的属性“targetFramework”。请注意属性名称区分大写和小写。错误解决的方法
    OpenGL 4 : 一个漂亮的心 For you, My Love
    request.getParameterValues与request.getParameter的差别
    Mac下搭建quick cocos2d-x编译环境
    【Github教程】史上最全github用法:github入门到精通
    OSI七层模型具体解释
    Android Service 服务(一)—— Service
    几种更新(Update语句)查询的方法
    epoll使用具体解释(精髓)
    SSL连接建立过程分析(1)
  • 原文地址:https://www.cnblogs.com/gerenboke/p/11761393.html
Copyright © 2011-2022 走看看