gpt4 book ai didi

java - 无法按列顺序插入值

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:51 25 4
gpt4 key购买 nike

这是我在网站上的第一个问题,所以请原谅:)

我在 sql 中有一个项目,我尝试以我在这里看到的方式对我的一个表进行排序 -

你将不得不使用第二个表

创建一个与你的游戏表具有相同结构的新表 games2,确保 ID 是自动递增的

CREATE TABLE `games2` LIKE `games`; copy the data, sorted, into games2

INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name` drop or move the old table

-- DROP TABLE `games`;
-- or
RENAME TABLE `games` TO `games1`; rename new table to old name

RENAME TABLE `games2` TO `games`;

不幸的是,它确实能够完成所有的行,但它不能对代码进行排序。它只是创建与旧相同的新桌面游戏1

如果有帮助,这是我的代码:)

try {
stt1.executeUpdate("CREATE TABLE IF NOT EXISTS topten2" +
"(username varchar(50) not NULL UNIQUE," +
"country varchar(50) not NULL," +
"score int)");
stt1.executeUpdate("INSERT INTO topten2 (username, country, score) SELECT * FROM topten ORDER BY score");
stt1.executeUpdate("RENAME TABLE topten TO topten1");
stt1.executeUpdate("RENAME TABLE topten2 TO topten");
} catch (SQLException e) {
e.printStackTrace();
}

最佳答案

games 表可能正在使用 InnoDB 存储引擎,并且定义了 PRIMARY KEYUNIQUE KEY。 (但我们只是猜测。)InnoDB 表总是按簇键(一组非 NULL 列上的 PRIMARY KEY 或 UNIQUE KEY)“按顺序”存储。重要说明:InnoDB 表中行的这种物理排序是实现的产物; InnoDB 总是使用一个簇键。 MySQL 中的其他存储引擎没有这个怪癖。表是一组无序行。要按指定顺序返回行,我们使用 ORDER BT 子句。


使用 CREATE TABLE LIKE 语句(如问题中所示)将创建原始表的副本包括键定义。插入行的顺序无关紧要,它们将按群集键的顺序物理存储......同样是因为它使用的是 InnoDB 存储引擎。

行存储的物理顺序并不重要。就关系理论而言,关系是一组无序的元组。在关系数据库中实现,表是一组无序的行。


要添加 auto_increment 列,需要将其定义为具有 AUTO_INCREMENT 属性的整数类型列。 (请注意,我们可以使用 ALTER TABLE 语句向表中添加一列。)

看起来要求是实现一个代理键作为表的PRIMARY KEY(簇键)。创建表的副本是实现此目的的一种方法,还有其他方法。


我们这样做怎么样。获取现有表的定义:

SHOW CREATE TABLE `mytable` ;

然后我们获取 DDL 并修改它以更改表的名称,并包含一个新的整数 AUTO_INCREMENT 列作为主键,如下所示:

CREATE TABLE mytable2
( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'PK'
, username VARCHAR(50) NOT NULL UNIQUE COMMENT 'UX'
, country VARCHAR(50) NOT NULL
, score INT
);

然后我们可以“复制”旧表中的行,为 id 列提供 NULL 值,以便自动分配一个值。

INSERT INTO mytable2 (id, username, country, score) 
SELECT NULL, s.username, s.country, s.score
FROM mytable s
ORDER BY s.score
;

然后重命名:

RENAME TABLE mytable TO mytable1
;
RENAME TABLE mytable2 TO mytable
;

关于java - 无法按列顺序插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55268022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com