我已经被交给了数据库的管理工作,到目前为止,我很少接触 MySQL(或一般的数据库)。
我想做两件事,这两件事(我期望)都相当简单,但是这两者的结合给我带来了困难。
目前,我有一个包含所有数据的非常大的表。它可以很容易地分成三个较小的表,因为其中一个字段实际上只有三个不同的值,我希望将其分开。我假设编写一个查询来查找每个值的条目并仅将正确的条目复制到新表中将非常简单。
但是,我的问题是该表中的字段名称非常非常糟糕且拼写错误。因此,当我创建新表时,我想重命名许多字段名称。我还可能需要添加字段。
有没有办法实现这一点,以便我可以创建具有正确命名字段的新表,然后在没有任何中间步骤的情况下复制数据?
我可以看到的两种明显(尽管非常笨拙)的方法是-
复制当前表,重命名所有字段以匹配新设计的表,然后复制数据,因为字段名称匹配。(这不是很理想,因为当前表很大,新表中额外字段的问题可能仍然会导致问题?)
创建与原始字段名称相同的新表。复制数据。更改新表的字段名称。
这两种潜在的方法似乎都非常笨拙。有没有一种方法可以让我创建一个具有正确字段名称的新表,然后随时轻松传输旧数据?
(如果这是一个明显或尴尬的问题,请原谅我,我对此非常非常陌生。谢谢。)
这取决于您的体积,但您可以使用简单的 INSERT SELECT 语句。
你老表:
想象一下,您想用名字替换 fname,用 lstname 替换 lname 并添加一个出生日期字段。
创建你的新结构:
现在,将旧数据转移到新表中,注意新字段(此处为 Birthdate)将为空:
这只是一个通用示例,如果您想要特定的示例,请在您的问题中添加您的表格结构。
最大限度。
编辑问题“在什么时候做其他事情是个好主意?”: INSERT SELECT 语句锁定(写锁定)您的表以在操作期间强制数据一致性。我无法回答“在什么时候”这取决于您的服务器、配置的问题...但是想象一下您有一个包含 100 万行的表,该操作可能需要几秒钟,例如,我们会说 4 秒钟,所以在 4 秒内,您的用户不会在您的表格中写入内容。