Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 向表中添加主键是否会检查默认列?_Mysql_Database_Primary Key - Fatal编程技术网

Mysql 向表中添加主键是否会检查默认列?

Mysql 向表中添加主键是否会检查默认列?,mysql,database,primary-key,Mysql,Database,Primary Key,我试图在表中添加主键,并将其设置为具有默认值且不为null且不唯一的列。MySQL接受该列作为主键…我想知道这是错误的,因为如果用户输入了两条具有默认值的记录,他将无法执行此操作。SQL是否应该将列检查为非默认值默认值或这是一个设计器端问题,即默认列不应设为主键…?Null: 每个标记为NULL的列都只指定该列可以包含NULL值。该列仍然可以有另一个默认值 主键: PK始终被视为唯一的,并且一行上不能有两个相同的值 每个表只能有一个PK,它是主索引,在查询主列上的表时非常快 PK始终是一个单列

我试图在表中添加主键,并将其设置为具有默认值且不为null且不唯一的列。MySQL接受该列作为主键…我想知道这是错误的,因为如果用户输入了两条具有默认值的记录,他将无法执行此操作。SQL是否应该将列检查为非默认值默认值或这是一个设计器端问题,即默认列不应设为主键…?

Null:

每个标记为NULL的列都只指定该列可以包含NULL值。该列仍然可以有另一个默认值

主键:

  • 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 . . . 这是此类声明的正确行为。