【问题标题】:Mysql statement with unique id created创建了具有唯一 ID 的 Mysql 语句
【发布时间】:2016-07-21 06:15:55
【问题描述】:

我想问mysql语句应该怎么写,在各个结果行中创建唯一id(但实际上表中不存在)

比如'ABC'表的内容是:

名称类型

约翰·A

玛丽·B

彼得·C

弗雷德·A

加里·C

苏珊·D

艾伦·A

当mysql语句SELECT * from ABC where type = 'A'使用时,结果为

名称类型

约翰·A

弗雷德·A

艾伦·A

但我想在 mysql 结果的每一行中放置唯一的 id,但实际上并没有将这些 id 放入表中。例如,

(newid) 名称类型

1 约翰·A

2 弗雷德 A

3 艾伦 A

然后可以使用下面的mysql语句进一步搜索该行。

SELECT * from ABC WHERE (newid) = '1'

结果是:

(newid) 名称类型

1 约翰·A

谢谢。

【问题讨论】:

    标签: mysql unique


    【解决方案1】:

    你可以添加一个自增列

    ALTER TABLE your_table ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
    

    【讨论】:

    • ALTER TABLE真的在mysql中插入表吗?
    • Alter table add a column not a table .. 并且自动增量添加 uniqe id
    • 那我们之后是否使用 SELECT * from 'your_table' WHERE id = 'X' 来提取某些行信息?
    • 是的......一旦你改变了表,你就有了新的(真实的)列,你可以简单地使用 where 条件,例如:SELECT * from ABC WHERE id = 1(是一个数字类型,所以你值不需要引号)
    • 我是否需要在 ALERT TABLE 语句中将表从一个重命名为另一个以避免与原始表“ABC”混淆?谢谢。
    【解决方案2】:

    您需要在表格中添加一个 PRIMARY KEY AUTO_INCREMENT 字段。

    执行以下操作并检查:

    ALTER TABLE `your_table`
    ADD COLUMN `id_primary`  int NOT NULL AUTO_INCREMENT FIRST ,
    ADD PRIMARY KEY (`id_primary`);
    

    所以你的情况会是这样的:

    ALTER TABLE `ABC`
    ADD COLUMN `id_primary`  int NOT NULL AUTO_INCREMENT FIRST ,
    ADD PRIMARY KEY (`id_primary`);
    

    注意:

    这里id_primary字段被认为是你的newid

    这是更新前您的表格的外观。 See Demo before altering table

    更新后,现在看看你的桌子See Demo after altering table

    【讨论】:

    • 那我们之后是否使用 SELECT * from 'your_table' WHERE id_primary = 'X' 来提取某些行信息?
    • 我是否需要在 ALERT TABLE 语句中将表从一个重命名为另一个以避免与原始表“ABC”混淆?谢谢。
    • 不。只需使用ABC 代替your_table. 我已经更新了答案。请立即检查。
    • 我们可以在 ALTER TABLE 语句之后添加“WHERE X = Y”吗?
    • 是的,你可以。你可以像SELECT * from ABC WHERE id_primary = 1这样运行查询。
    【解决方案3】:

    您可以使用变量来实现这一点,但就像@1000111 所说,您应该做的正确的事情是改变您的表格:

    select *
    from (
        select abc.*, @newid := @newid + 1 as newid
        from abc
        cross join (select @newid := 0) t
        where type = 'A'
    ) t1
    where t1.newid = 1
    

    【讨论】:

    • @Strawberry 我知道,但正如我所说,正确的做法是改变他的桌子。我觉得没必要这么刻薄的说“无意义”,SO是一个开放、善良、伟大的社区,你说的话可以让我们或者只有我敢回答一个问题,是你的目的还是SO的目的?
    • @Strawberry 你想要某种意义,好吧,我需要删除这个答案吗?或者你的评论对 OP 来说是无价的?我不介意任何人发表评论,但不是粗鲁的方式或你的诚实!!!谢谢你的诚实。
    • 在没有 PRIMARY KEY 的情况下,最好删除这个答案。
    • @Strawberry 不管我怀疑你为什么要删除你的评论?如果这个答案让 OP 更加困惑或觉得我不礼貌,我会删除它。但从你那里,我明白了一个男人怎么会如此卑鄙。
    • 对你说的话。我真的不同意你的观点。 @草莓
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2021-02-12
    • 2016-11-16
    相关资源
    最近更新 更多