Mysql 向表中添加主键是否会检查默认列?
我试图在表中添加主键,并将其设置为具有默认值且不为null且不唯一的列。MySQL接受该列作为主键…我想知道这是错误的,因为如果用户输入了两条具有默认值的记录,他将无法执行此操作。SQL是否应该将列检查为非默认值默认值或这是一个设计器端问题,即默认列不应设为主键…?Null: 每个标记为NULL的列都只指定该列可以包含NULL值。该列仍然可以有另一个默认值 主键:Mysql 向表中添加主键是否会检查默认列?,mysql,database,primary-key,Mysql,Database,Primary Key,我试图在表中添加主键,并将其设置为具有默认值且不为null且不唯一的列。MySQL接受该列作为主键…我想知道这是错误的,因为如果用户输入了两条具有默认值的记录,他将无法执行此操作。SQL是否应该将列检查为非默认值默认值或这是一个设计器端问题,即默认列不应设为主键…?Null: 每个标记为NULL的列都只指定该列可以包含NULL值。该列仍然可以有另一个默认值 主键: PK始终被视为唯一的,并且一行上不能有两个相同的值 每个表只能有一个PK,它是主索引,在查询主列上的表时非常快 PK始终是一个单列
- PK始终被视为唯一的,并且一行上不能有两个相同的值
- 每个表只能有一个PK,它是主索引,在查询主列上的表时非常快
- PK始终是一个单列,不能像其他索引(唯一索引或常用索引)那样分布在多个列上
- PK列不能接受空值
ID (INT, PK) | Name (varchar)
1 | Foo ->Valid
2 | Bar ->Valid
2 | FooBar ->Invalid (Duplicate Primary key value ID)
结论:是的,MySQL应该并且将在第二次尝试输入默认值时抛出一个错误,因为它被简单地处理为唯一,并且给定的默认值是const。当您在insert语句中没有为此列指定任何值时,MySQL服务器将尝试插入默认值
这意味着:带有默认值的PrimaryKey列毫无意义,除非您使用一个自动增量,它是一个伪“默认值”,每次尝试插入内容时都会有所不同
我希望这能回答你的问题我还没有完全理解这个问题。您已将列声明为具有以下特征的主键:
- 非空
- 默认值
- 非空
- 独特的
换句话说,MySQL(我认为其他数据库也一样)允许您声明这一点,即使这似乎不是一个好主意。a
primary key
意味着所有值都应该是唯一的,并且不为null
,主键
应明确标识表中的每个记录。如果用户将主键添加为具有默认值的列…SQL是否应将其提示为错误?否。只有在尝试插入重复值时才会出现错误。我尝试复制更多记录,发现如果只有一个默认列记录,则会出现错误SQL不会显示错误并接受该列作为更新的主键…但如果存在多条记录,SQL将像任何其他约束一样提示错误violation@AmanVerma . . . 这是此类声明的正确行为。