
我在实际环境测试如下:
mysql>create table tb_name(stuId int auto_increment primary key,_name varchar(20),_age int)
Query OK, 0 rows affected (0.01 sec)
mysql>desc tb_name
+-------+-------------+------+-----+---------+----------------+
| Field | Type| Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| stuId | int(11) | NO | PRI | NULL| auto_increment |
| _name | varchar(20) | YES | | NULL||
| _age | int(11) | YES | | NULL||
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)
mysql>delimiter //
mysql>create procedure insert_Student (_name varchar(50),_age int ,out _id int)
->begin
-> insert into tb_name value(null,_name,_age)
-> select max(stuId) into _id from tb_name
->end
->//
Query OK, 0 rows affected (0.00 sec)
mysql>delimiter
mysql>call insert_Student('aa',10,@id)
Query OK, 0 rows affected (0.00 sec)
mysql>select @id
+------+
| @id |
+------+
|1 |
+------+
1 row in set (0.00 sec)
mysql>select * from tb_name
+-------+-------+------+
| stuId | _name | _age |
+-------+-------+------+
| 1 | aa| 10 |
+-------+-------+------+
1 row in set (0.00 sec)
mysql>
v_string变量没有声明,DECLARE v_string varchar(255)
select DATE_FORMAT(createon,'%y-%m_%d') INTO v_string from TER_TERMINALSTATUSLOG where terid=terminalid
MySQL 需要创建隐式临时表来解决某些类型的查询。往往查询的排序阶段需要依赖临时表。例如,当您使用 GROUP BY,ORDER BY 或DISTINCT 时。这样的查询分两个阶段执行:首先是收集数据并将它们放入临时表中,然后是在临时表上执行排序。对于某些 UNION 语句,不能合并的 VIEW,子查询时用到派生表,多表 UPDATE 以及其他一些情况,还需要使用临时表。如果临时表很小,可以到内存中创建,否则它将在磁盘上创建。MySQL 在内存中创建了一个表,如果它变得太大,就会被转换为磁盘上存储。内存临时表的最大值由 tmp_table_size 或 max_heap_table_size 值定义,以较小者为准。MySQL 5.7 中的默认大小为 16MB。如果运行查询的数据量较大,或者尚未查询优化,则可以增加该值。设置阈值时,请考虑可用的 RAM 大小以及峰值期间的并发连接数。你无法无限期地增加变量,因为在某些时候你需要让 MySQL 使用磁盘上的临时表。
注意:如果涉及的表具有 TEXT 或 BLOB 列,则即使大小小于配置的阈值,也会在磁盘上创建临时表。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)