在处理自动递增时,有没有一种方法不允许空值或列出所有值

qij5mzcb  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(382)

大家好,我有下表

CREATE TABLE test(
  cod int(3) auto_increment,
  text varchar(10),
  PRIMARY KEY(cod));

我想知道,如果有办法可以插入这样的

INSERT INTO test VALUES ('test');

拿着这个

+-----+------+
| cod | text |
+-----+------+
|   1 | test |
+-----+------+

完全忽略cod列,因为它是自动递增的,我知道您可以声明要插入的值,或者只传递null,但是我想知道是否有一种方法不同于这两种方法

wyyhbhjk

wyyhbhjk1#

在insert语句中指定列列表。。。

INSERT INTO test (text) VALUES ('test')
                 ^^^^^^

从列列表中省略的任何列都将分配一个默认值。对于没有指定默认值的列,默认值为null。这相当于

INSERT INTO test (text, cod) VALUES ('test', NULL)
                      ^^^^^                ^^^^^^

注意,values列表中的第一个值指向column列表中的第一列,第二个值指向第二列,等等。
如果省略列列表,则默认列列表是表中定义的所有列,顺序与表中定义的列相同。所以我们也可以写:

INSERT INTO test (cod, text) VALUES (NULL, 'test')

所以这只是一种特殊情况,我们为每一列提供值,值的提供顺序与表中定义的列相同,在表中我们可以省略列列表。
最佳实践是始终提供列列表,而不依赖于表中列的顺序。这使得未来的读者更容易弄清楚哪些值被分配给哪些列,而不必查找表定义。这还可以防止insert语句在向表中添加新列或对列重新排序时“中断”。

相关问题