我有一个存储功能,我使用临时表。 出于性能的考虑,我需要在表中的索引。 不幸的是,我不能使用ALTER TABLE
,因为这会导致一个隐含的承诺。
所以我在寻找的语法添加INDEX
为tempid
创建过程中。 任何人都可以帮助?
CREATE TEMPORARY TABLE tmpLivecheck
(
tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
)
SELECT *
FROM tblLivecheck_copy
WHERE tblLivecheck_copy.devId = did;
我按倒相当长的一段与CREATE TEMPORARY表中选择正确的语法。 已经想通了一些事情,我想与社区的其他人共享的答案。
有关语句的基本信息,请访问以下链接的MySQL:
CREATE TABLE SELECT和CREATE TABLE 。
有时,它可以是艰巨的解释规范。 由于大多数人学到最好的例子,我将分享如何我已经创建了一个工作的声明,以及如何修改它为你工作。
添加多个指标
该声明显示了如何添加多个索引(注意,索引名 - 小写 - 可选):
CREATE TEMPORARY TABLE core.my_tmp_table (INDEX my_index_name (tag, time), UNIQUE my_unique_index_name (order_number)) SELECT * FROM core.my_big_table WHERE my_val = 1
添加一个新的主键 :
CREATE TEMPORARY TABLE core.my_tmp_table (PRIMARY KEY my_pkey (order_number), INDEX cmpd_key (user_id, time)) SELECT * FROM core.my_big_table
创建附加列
你可以创建一个比在SELECT语句中指定的列的新表。 指定表定义的附加列。 在表定义中指定,而不是列在选择发现将在新表中第一列,其次是由SELECT语句插入的列。
CREATE TEMPORARY TABLE core.my_tmp_table (my_new_id BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY my_pkey (my_new_id), INDEX my_unique_index_name (invoice_number)) SELECT * FROM core.my_big_table
重新定义的数据类型从选择列
你可以重新定义所选择的列的数据类型。 在下面的例子中,列标签是core.my_big_table一个MEDIUMINT,我也重新定义在core.my_tmp_table一个BIGINT。
CREATE TEMPORARY TABLE core.my_tmp_table (tag BIGINT, my_time DATETIME, INDEX my_unique_index_name (tag) ) SELECT * FROM core.my_big_table
在创建高级字段定义
所有常见的列定义可当你创建一个正常的表作为。 例:
CREATE TEMPORARY TABLE core.my_tmp_table (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value BIGINT UNSIGNED NOT NULL DEFAULT 0 UNIQUE, location VARCHAR(20) DEFAULT "NEEDS TO BE SET", country CHAR(2) DEFAULT "XX" COMMENT "Two-letter country code", INDEX my_index_name (location)) ENGINE=MyISAM SELECT * FROM core.my_big_table
没有找到我自己的答案。 我的问题是,我使用的一个连接,并创建第二个出来的第一个两个临时表。 但该指数创建过程中没有被复制?
CREATE TEMPORARY TABLE tmpLivecheck (tmpid INTEGER NOT NULL AUTO_INCREMENT, PRIMARY
KEY(tmpid), INDEX(tmpid))
SELECT * FROM tblLivecheck_copy WHERE tblLivecheck_copy.devId = did;
CREATE TEMPORARY TABLE tmpLiveCheck2 (tmpid INTEGER NOT NULL, PRIMARY KEY(tmpid),
INDEX(tmpid))
SELECT * FROM tmpLivecheck;
......解决我的问题。
问候...
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
select_statement
例如:
CREATE TEMPORARY TABLE IF NOT EXISTS mytable
(id int(11) NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM;
INSERT IGNORE INTO mytable SELECT id FROM table WHERE xyz;