mysql实例:在存储过程中创建临时表

在mysql的存储过程创建临时表的例子,是学习mysql 临时表操作的不错的例子。

操作步骤:

mysql>
mysql>
mysql> CREATE TABLE Employee( //创建普通表
    ->     id            int,
    ->     first_name    VARCHAR(15),
    ->     last_name     VARCHAR(15),
    ->     start_date    DATE,
    ->     end_date      DATE,
    ->     salary        FLOAT(8,2),
    ->     city          VARCHAR(10),
    ->     description   VARCHAR(15)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql>
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->              values (1,‘Jason‘,    ‘Martin‘,  ‘19960725‘,  ‘20060725‘, 1234.56, ‘Toronto‘,  ‘Programmer‘);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(2,‘Alison‘,   ‘Mathews‘,  ‘19760321‘, ‘19860221‘, 6661.78, ‘Vancouver‘,‘Tester‘);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(3,‘James‘,    ‘Smith‘,    ‘19781212‘, ‘19900315‘, 6544.78, ‘Vancouver‘,‘Tester‘);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(4,‘Celia‘,    ‘Rice‘,     ‘19821024‘, ‘19990421‘, 2344.78, ‘Vancouver‘,‘Manager‘);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(5,‘Robert‘,   ‘Black‘,    ‘19840115‘, ‘19980808‘, 2334.78, ‘Vancouver‘,‘Tester‘);
Query OK, 1 row affected (0.01 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(6,‘Linda‘,    ‘Green‘,    ‘19870730‘, ‘19960104‘, 4322.78,‘New York‘,  ‘Tester‘);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(7,‘David‘,    ‘Larry‘,    ‘19901231‘, ‘19980212‘, 7897.78,‘New York‘,  ‘Manager‘);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(8,‘James‘,    ‘Cat‘,     ‘19960917‘,  ‘20020415‘, 1232.78,‘Vancouver‘, ‘Tester‘);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> select * from Employee; //查询数据
+------+------------+-----------+------------+------------+---------+-----------+-------------+
| id   | first_name | last_name | start_date | end_date   | salary  | city      | description |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
|    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  |
|    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      |
|    3 | James      | Smith     | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester      |
|    4 | Celia      | Rice      | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager     |
|    5 | Robert     | Black     | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester      |
|    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      |
|    7 | David      | Larry     | 1990-12-31 | 1998-02-12 | 7897.78 | New York  | Manager     |
|    8 | James      | Cat       | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester      |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
8 rows in set (0.00 sec)

mysql>
mysql>
mysql>
mysql> delimiter $$
mysql>
mysql> CREATE PROCEDURE myProc() //创建存储过程、并创建临时表
    ->
    -> BEGIN
    ->   DROP TEMPORARY TABLE IF EXISTS employeeTemp;
    ->   CREATE TEMPORARY TABLE employeeTemp AS
    ->   SELECT id,start_date
    ->     FROM employee;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> delimiter ;
mysql> call myProc(); //调用存储过程
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select * from employeeTemp;
+------+------------+
| id   | start_date |
+------+------------+
|    1 | 1996-07-25 |
|    2 | 1976-03-21 |
|    3 | 1978-12-12 |
|    4 | 1982-10-24 |
|    5 | 1984-01-15 |
|    6 | 1987-07-30 |
|    7 | 1990-12-31 |
|    8 | 1996-09-17 |
+------+------------+
8 rows in set (0.00 sec)

mysql> drop TEMPORARY TABLE employeeTemp; //删除临时表
Query OK, 0 rows affected (0.00 sec)

mysql> drop procedure myProc; //删除存储过程
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>
mysql>
mysql>
mysql> drop table Employee; //删除普通表
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>

/*******************************/

一,创建数据库

mysql>create database db_proc;

1

mysql>create database db_proc;

二,创建表

mysql>CREATE TABLE `proc_test` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,  #ID,自动增长
`username` varchar(20) NOT NULL, #用户名
`password` varchar(20) NOT NULL, #密码
PRIMARY KEY (`id`) #主键
) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=utf8; #设置表引擎和字符集

1

2

3

4

5

6

mysql>CREATE TABLE `proc_test` (

`id` tinyint(4) NOT NULL AUTO_INCREMENT,  #ID,自动增长

`username` varchar(20) NOT NULL, #用户名

`password` varchar(20) NOT NULL, #密码

PRIMARY KEY (`id`) #主键

) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=utf8; #设置表引擎和字符集

三、创建存储过程

create procedure mytest(in name varchar(20),in pwd varchar(20))#定义传入的参数
begin
insert into proc_test(username,password) values(name,pwd);
#把传进来的参数name和pwd插入表中,别忘记分号
end; #注意这个分号别忘记了

1

2

3

4

5

create procedure mytest(in name varchar(20),in pwd varchar(20))#定义传入的参数

begin

insert into proc_test(username,password) values(name,pwd);

#把传进来的参数name和pwd插入表中,别忘记分号

end; #注意这个分号别忘记了

四、测试调用存储过程
用法:call 存储过程名称(传入的参数)

call proc_test("绝心是凉白开","www.ttlsa.com")

1

call proc_test("绝心是凉白开","www.ttlsa.com")

username为”绝心是凉白开“传入数据库中,密码”www.ttlsa.com“

五、查看数据库中有无加入的数据

select * from proc_test where username=‘绝心是凉白开’;#如果有内容说明成功了

1

select * from proc_test where username=‘绝心是凉白开’;#如果有内容说明成功了

六、删除存储过程
drop procdure 存储过程名;

				
时间: 2024-12-21 04:09:18

mysql实例:在存储过程中创建临时表的相关文章

在oracle存储过程中创建临时表

在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建临时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

sqlserver 存储过程中使用临时表到底会不会导致重编译

曾经在网络上看到过,SqlServer的存储过程中使用临时表,会导致执行计划无法重用, 运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果, 如果不是统计信息变更导致导致的重编译,单单是使用临时表,并不会导致重编译, 但是对于一些特殊的情况,又确实会出现重编译的, 为了弄清楚这个问题,查阅了大量的资料,才把这个问题弄清楚,这里特意记录下来,希望武断地认为存储过程中使用了临时表就会导致重编译的这个观点得到纠正. 首先进行下面的测试,我们知道,导致临时表重编译

存储过程中新建临时表的

要写一个存储过程,如果临时表 test 不存在 ,新建临时表,如果存在不新建 alter procedure testas     if object_id('tempdb..#test') is null         begin             print '不存在'             create table #test (                 number int not null primary key,                 message va

InMemory:在内存中创建临时表和表变量

在Disk-Base数据库中,如果系统频繁地创建和更新临时表,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL Server 2016的内存(Memory-Optimized)数据库中,如果考虑使用内存优化结构来存储临时表,表变量,表值参数的数据,那么将完全消除IO操作的负载消耗,发挥大内存的优势,大幅提高数据库的性能. 在SQL Server 2016中,能够直接创建内存优化的表类型,表变量和表值参数的数据只存储在内存中:不能直接在内存中创建临时表,但是,SQ

在oracle存储过程中创建暂时表

在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建暂时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

mysql存储过程中使用临时表和游标

1.临时表 1 DROP PROCEDURE 2 IF EXISTS `P_GetMonitorPeople`; 3 CREATE PROCEDURE P_GetMonitorPeople (IN fgid INT, IN mins INT,in lens INT) 4 BEGIN 5 IF fgid>0&&mins>0&&lens>0 THEN 6 BEGIN 7 -- 建表tb_temp1 8 DROP TABLE IF EXISTS tb_temp1

在存储过程里创建临时表,往表中直接插入数据

1 CREATE PROCEDURE [dbo].[Proc_PX_Practice] 2 @PageSize int, --每页多少个 3 @CurrPage int --当前页 4 5 AS 6 begin 7 create table #temp_table( 8 Row_ID int identity(1,1) primary key not null, --Row_ID 自增长 9 ItemGuid varchar(50), --Guid 10 PlanGuid varchar(50)

如何解决存储过程中关联临时表时快时慢的情况

调用一个存储过程,同样的条件,数据库负载也是正常的情况下,时快时慢.原因是数据库无法获取临时表的统计信息,导致执行计划会走错.之前写过一个帖子,被临时表坑了,http://blog.csdn.net/stevendbaguo/article/details/39964807,就是用hint/*+ dynamic_sampling(T 10) */来做动态采集,这种解决方案实践证明还是没有很好的解决问题,出现时快时慢的几率只是小了一点. 最优的解决方案是什么呢? 一般我们会选择事务型的临时表,如果

sqlSever 存储过程 中 创建 事务(增删改操作),唯一的主键自动生成 (格式:自定义字母+时间+五位数字,例如:S2014103010001)

描叙: 1.使用带事务的sql 存储过程. 2.添加数据时,自动创建唯一的主键 格式 [一个字母]+[时间格式]+[一个五位数] 3.使用游标,通过另一个表的多条数据,来对当前表数据的添加,并自动生产 唯一主键 格式如上. 4.使用场景:增加主键唯一的主表数据的同时,从另一个表读取多条数据然后添加到子表中,并且生产的主键唯一. 5.使用环境: sqlserver. USE [MicroMall]GO/****** Object: StoredProcedure [dbo].[SaleOrderI