Mysql 当主键不唯一时返回什么

Mysql 当主键不唯一时返回什么,mysql,Mysql,我是编程新手。我的问题是,如果您有一个主键不是唯一的(我知道在这一点上它不再是主键),那么返回什么?是否返回多个记录 EmployeeID HoursWorked 01 100 01 120 02 75 02 115 03 140 03 80 例如,如果编写查询以搜索01的员工ID,将返回什么 EmployeeID HoursWorked 01 100 01

我是编程新手。我的问题是,如果您有一个主键不是唯一的(我知道在这一点上它不再是主键),那么返回什么?是否返回多个记录

EmployeeID  HoursWorked
01          100
01          120
02          75
02          115
03          140
03          80

例如,如果编写查询以搜索
01
的员工ID,将返回什么

EmployeeID  HoursWorked
01          100
01          120
02          75
02          115
03          140
03          80

再说一遍,我对这一切都很陌生,所以如果这是一个愚蠢的问题,请原谅我。

如果您不使用
主键
,那么可以插入重复的id记录


因此,如果您将获得
01
,那么它将返回表中
01
id的所有记录,如
100和120

,主要的目的是防止插入具有相同主键或任何唯一索引的两条记录(行)。你不可能会出错

因此,如果您设置了主键,那么如果您确切地指定了所需的值,select查询将不返回任何内容或返回一行。如果您试图插入一条具有已存在密钥的新记录,则会出现错误


如果您执行以下操作,则使用唯一键将具有相同的行为

SELECT * FROM employees WHERE EmployeeID = 01;
您将得到两行:

EmployeeID    HoursWorked
01            100
01            120

但通常情况下,如果您将列设置为主键,MySQL将不允许您插入没有唯一id的行。

“我知道在这一点上它不再是主键”我的感觉是您不理解这一点。这里没有主键。“如果您编写查询以搜索01的员工ID,将返回什么?”。您将在employee ID列中获得包含01的所有记录的列表。我认为您可能需要对SQL进行更多的研究和实验。是的,正如草莓所说,包含重复值的列不能被视为主键。主键的值必须是唯一的。如果将列定义为主键列,则数据库引擎将强制执行此操作,并且不允许您创建重复的条目。对于您的问题,我给您+1,因为作为新的,意味着您需要帮助。不幸的是,在书堆里,我从来没有提到过我是新来的。这是一个禁忌词。你一说我是新来的,有些人就投你反对票。真的很伤心。在专家交流论坛上,你从来没有见过这样的人。sql中没有隐式主键。你必须明确地将列声明为主键,作为CREATE表或ALTER表的一部分。