我尝试在表中添加主键并将其设置为具有默认值的列,并且不为null且不唯一.MySQL接受该列作为主键...我想知道这是错误的如果用户输入2个具有默认值的记录,则他将无法执行此操作。这是一个问题,其中SQL应该将列检查为非默认值,或者这是设计器最终问题,即默认列不应成为主键。 ..?
答案 0 :(得分:0)
空:
每个标记为NULL的列都只是指定此列可能包含NULL值。该列仍可以具有另一个默认值。
主键:
样品:
ID (INT, PK) | Name (varchar)
1 | Foo ->Valid
2 | Bar ->Valid
2 | FooBar ->Invalid (Duplicate Primary key value ID)
结论:是的MySQL应该并且会在第二次尝试设置默认值时抛出错误,因为它简单地处理了UNIQUE并且给定的默认值是const。当您在insert语句中没有为此列指定任何值时,MySQL服务器将尝试插入默认值。
几乎意味着:具有默认值的PrimaryKey列没有意义,除非您使用自动增量,这是一个伪"默认值"每次尝试插入内容时都会有所不同。
我希望这能回答你的问题
答案 1 :(得分:0)
我没有完全理解这个问题。您已将列声明为具有以下特征的主键:
主键强加了以下特征:
这些特征并非相互矛盾。唯一的问题是默认值只能在列中分配一次。第二次尝试插入具有默认值的行时,将违反唯一性约束。
换句话说,MySQL(我认为其他数据库也是如此)允许你声明这个,即使它看起来不是一个好主意。