• 函数存储过程和联合主键


    创建批量插入数据

    第一个命令是DELIMITER //,它与存储过程语法无关。 DELIMITER语句将标准分隔符 - 分号(;)更改为://。 在这种情况下,分隔符从分号(;)更改为双斜杠//。为什么我们必须更改分隔符? 因为我们想将存储过程作为整体传递给服务器,而不是让mysql工具一次解释每个语句。 在END关键字之后,使用分隔符//来指示存储过程的结束。 最后一个命令(DELIMITER;)将分隔符更改回分号(;)。
    使用CREATE PROCEDURE语句创建一个新的存储过程。在CREATE PROCEDURE语句之后指定存储过程的名称。

    BEGINEND之间的部分称为存储过程的主体。将声明性SQL语句放在主体中以处理业务逻辑。

    DELIMITER //
     CREATE PROCEDURE GetAllProducts()
       BEGIN
       SELECT *  FROM products;
       END //
    DELIMITER

    MySQL prepare语法:

    PREPARE statement_name FROM preparable_SQL_statement; /*定义*/

    EXECUTE statement_name [USING @var_name [, @var_name] ...]; /*执行预处理语句*/

    {DEALLOCATE | DROP} PREPARE statement_name /*删除定义*/ ;

    PREPARE语句用于预备一个语句,并指定名称statement_name,以后引用该语句。语句名称对大小写不敏感。preparable_stmt可以是一个文字字符串,也可以是一个包含了语句文本的用户变量。该文本必须表现为一个单一的SQL语句,而不是多个语句。在这语句里,‘?’字符可以被用于标识参数,当执行时,以指示数据值绑定到查询后。‘?’字符不应加引号,即使你想要把它们与字符串值结合在一起。参数标记只能用于数据值应该出现的地方,而不是SQL关键字,标识符,等等。

    如果预语句已经存在,则在新的预语句被定义前,它会被隐含地删掉。

    存储过程的所有关于数据库增删改查的操作必须在所有 declarre声明完所有 变量 ,包括游标等 之后再执行

    在存储过程中常看到declare定义的变量和@set定义的变量。简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量。

    drop procedure if exists pinsert;
    DELIMITER //
    CREATE PROCEDURE pinsert()
    BEGIN
    DECLARE i int DEFAULT 50244;
    set @schoolId = 8;
    set @dt = unix_timestamp(NOW());
    PREPARE stml FROM 'insert into qb_paper_page(pid, school_id, create_at)values(?,?,?)';
    WHILE i <50245 DO
    set @pid = i;
    EXECUTE stml USING @pid, @schoolId, @dt;
    SET i = i+1;
    end WHILE;
    DEALLOCATE PREPARE stml;
    END;
    //
    DELIMITER ;
    
    CALL pinsert();
    
    DROP PROCEDURE pinsert;

    多字段设为主键

    一个数据库表只能有一个主键,不允许两个主键。但是允许两个字段联合起来设置为主键,这叫联合主键。

    ALTER TABLE 选课表 

    ADD CONSTRAINT pk_选课表 PRIMARY KEY(学号);
     
    alter table qb_paper_page add CONSTRAINT pk PRIMARY KEY(pid,school_id)
    

      

  • 相关阅读:
    Day2 while 循环,格式化输出,运算符,字符串编码
    Day 1 变量,基础数据类型与条件语句
    关于字符的一些看法
    正则的全局问题
    模块——js功能(倒计时,幻灯)
    垂直居中
    不确定宽度元素居中
    css3媒体查询
    less的预处理
    手机幻灯
  • 原文地址:https://www.cnblogs.com/ampl/p/9812533.html
Copyright © 2020-2023  润新知