临时表只对当前会话可见,连接断开时,自动删除!
你不必担心所创建的临时表的名称会和其他会话建立的临时表、或非临时表冲突!注意如果你的临时表和正常表名称相同,正常表会被隐藏——如同全局变量和局部变量那样
创建临时表不会引发通常的commit事务提交
使用临时表的诸多限制
引擎类型只能是:memory(heap)、myisam、merge、innodb
不支持mysql cluster
同一个查询语句中只能引用一次! 如 SELECT * FROM TP_TABLE , TP_TABLE AS ALIAS_NAME是错误的
同一个用户存储函数中只能引用一次!
show tables 不会显示临时表
不能使用rename重命名临时表。只能使用ALTER TABLE OLD_TP_TABLE_NAME RENAME NEW_TP_TABLE_NAME
影响使用replication功能
mysql服务器自动使用的内部临时表
在某些情况下,mysql服务器会自动创建内部临时表:该临时表可以是只存在于内存的memory临时表,或者是存储于硬盘的myisam临时 表;而且 初始创建的memory临时表由于表的增大 可能会转变为myisam临时表——其转化临界点由max_heap_table_size 和tmp_table_size系统变量的 较小值 决定的!注意:max_heap_table_size系统变量应用于所有的memory引擎的表,不管是用户临时表、正常表、或者内部临时表。
内部临时表的创建条件:
group by 和 order by中的列不相同
order by的列不是引用from 表列表中 的第一表
group by的列不是引用from 表列表中 的第一表
使用了sql_small_result选项
含有distinct 的 order by语句
初始创建内部myisam临时表的条件:
表中存在text、blob列
在group by中的 列 有超过512字节
在distinct查询中的 列 有超过512字节
在union、union all联合查询中,select 列 列表中的 列 有超过512字节的
如何判断某个查询是否会产生内部临时表:使用explain查看执行计划,检查extra列看是否使用临时表“using temporary”
在select 语句中赋值给用户变量的语法是 @ var_name := value ,这里的var_name 是变量名,value是正检索的值.1:变量可以用在以后语句中表达式可用的任何地方,例如where字句或者insert 语句中。
例如select @id :=cust_id from customers where cust_id='customer name';
delete from orders where cust_id = @id
2:变量的另一个用途是保存在一个auto_increment列的表中 插入新的一行后last_insert_id()的结果
select @last_id :=Last_INSERT_ID()
LAST_INSERT_ID()返回新的AUTO_INCREMENT列值,通过将其保存在变量中,你可以在之后的语句中多次引用该值。
即使发起其他的语句创建他们自身的atuo_increment值,从而改变了last_insert_id()返回的值
3:用户变量拥有单一的值,如果使用返回多行的语句来将值赋给一个变量,那么只有最后一行的值被赋给了该变量。
4:要将一个变量显示地设为一个特定值,使用set语句,set语法可以使用:=或者=来进行赋值
5:set也可以用来将一个select的结果赋给一个变量.
cursor.execute('''insert into call_number VALUES (%s,%s,%s)'''%(year,time,call))#当然你的表得正好是三列欢迎分享,转载请注明来源:内存溢出
评论列表(0条)