用0启动表的ID列的任何缺点


Any drawbacks to starting an ID column of a table with 0?

user_drug.user_id受到外键drug.id(它是主键(的约束。

表格结构如下:

user
id    name  income
1     Foo   10000
2     Bar   20000
3     Baz   30000
drug
id    name
0     Marijuana
1     Cocaine
2     Heroin
user_drug
user_id drug_id
1       1
1       2
2       1       
2       3
3       3

在0启动drug.id有什么缺点吗?我有一种感觉,这将使PHP的事情更加自然,因为数组也从0开始,但我想确保使用"0"作为id没有任何缺点(例如,它可能被解释为null或其他一些奇怪的潜在事件/冲突(。

如果是AUTO INCREMENT列,零是一个不应该使用的特殊值,但这是可以克服的。如果它是外键且不是AUTO INCREMENT,则任何值都可以。如果列定义正确(零值显示为null,与零不同(,则零将不会被解释为除零之外的任何其他值。

如果不是自动递增,应该没问题,但我不会使用它。0是MySQL在列不能为NULL时使用的默认值(它是INT列(。

我不认为有任何缺点,但如果您检查id,则需要确保0没有被解释为false。

它不会让事情变得更自然,因为它是任意的,您的代码不应该关心ID是什么(即您永远看不到它(。

假设有人正在搜索一个id,然后对该值执行intval($_GET['name'])(以确保不会得到SQL注入(。

如果值为0是合法的,您将无法区分"丢失"的AKA空白字符串和实际的0。很明显,你可以解决这个问题:你可以检查一个空白字符串,也可以用-1表示缺失。

但是使用0更容易。

就我个人而言,我用-1表示缺失(并允许0(,但由于MySQL总是默认以1开头,我开始有点懒惰,只接受它