如何使用主自动增量键插入数据库?

时间:2016-10-24 18:20:03

标签: mysql mariadb auto-increment

所以我有一张表根据:

列出
CREATE TABLE `dealerships` (
  `dealership_id` BIGINT(20) UNSIGNED NOT NULL,
  `zone` CHAR(200) NULL DEFAULT NULL,
  `phone` BIGINT(20) UNSIGNED NOT NULL,
  `fax` BIGINT(20) UNSIGNED NOT NULL,
  `name` CHAR(200) NULL DEFAULT NULL,
  `address1` CHAR(200) NULL DEFAULT NULL,
  `address2` CHAR(200) NULL DEFAULT NULL',
  `servicephone` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
  `timezone` CHAR(20) NULL DEFAULT NULL,
  PRIMARY KEY (`dealership_id`)
)
COMMENT='This stores dealership information. '
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

现在我插入

INSERT INTO dealerships (dealership_id, ~the rest~), VALUES( NULL, ~values);

这会返回dealership_id不能为NULL错误1048的错误。

INSERT INTO dealerships (dealership_id, ~the rest~), VALUES(0, ~values);

这将返回值dealership_id已存在0的错误。

INSERT INTO dealerships (dealership_id, ~the rest~), VALUES(default, ~values);

这将返回dealership_id没有默认值错误1364的错误。

当我简单地说它,并省略brokerhip_id

INSERT INTO dealerships (~the rest~), VALUES(~values);

我收到错误,必须为dealership_id指定一个值。

我每次与autoincrement primary keys合作过。正常情况下,插入NULL会对索引起作用,为我做一些自动神奇的事情。发生了什么事?

平台特定信息:

MariaDB10.1.18 x64

Windows Server 2012 R2

3 个答案:

答案 0 :(得分:0)

对于创建添加AUTO_INCREMENT

CREATE TABLE `dealerships` (
  `dealership_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `zone` CHAR(200) NULL DEFAULT NULL,
  `phone` BIGINT(20) UNSIGNED NOT NULL,
  `fax` BIGINT(20) UNSIGNED NOT NULL,
  `name` CHAR(200) NULL DEFAULT NULL,
  `address1` CHAR(200) NULL DEFAULT NULL,
  `address2` CHAR(200) NULL DEFAULT NULL',
  `servicephone` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
  `timezone` CHAR(20) NULL DEFAULT NULL,
  PRIMARY KEY (`dealership_id`)
)
COMMENT='This stores dealership information. '
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

并且插入不要插入密钥(通过自动增量自动创建)

insert into  `dealerships`  (

  `zone`,
  `phone`,
  `fax` ,
  `name`,
  `address1`,
  `address2`',
  `servicephone` ,
  `timezone`

  )  values (
      'vale_zone',
      1,
      2 ,
      'val_name',
      'val_address1',
      'val_address2',
      3 ,
    'val_timezone'
  )

答案 1 :(得分:0)

要插入具有自动增量属性的字段,请在create table中使用 ID int NOT NULL AUTO_INCREMENT

CREATE TABLE `dealerships` (
  `dealership_id` INT NOT NULL AUTO_INCREMENT,
  `zone` CHAR(200) NULL DEFAULT NULL,
  `phone` BIGINT(20) UNSIGNED NOT NULL,
  `fax` BIGINT(20) UNSIGNED NOT NULL,
  `name` CHAR(200) NULL DEFAULT NULL,
  `address1` CHAR(200) NULL DEFAULT NULL,
  `address2` CHAR(200) NULL DEFAULT NULL',
  `servicephone` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
  `timezone` CHAR(20) NULL DEFAULT NULL,
  PRIMARY KEY (`dealership_id`)
)
COMMENT='This stores dealership information. '
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

之后,您有两种插入数据的解决方案。

解决方案1 ​​

INSERT INTO dealerships(zone, phone, fax, name) VALUES('zone1', '00000', '00000', 'name1')

在这种情况下,我只是在几列中添加数据(在wame方式中添加其他列)。

解决方案2

INSERT INTO dealerships SET zone = 'zone1', phone = '0000', name = 'Eddy'

在这里,我使用了字段SET field = value, field2 = value2

  

如您所见,我没有添加对ID的任何引用。正常,该字段为AUTO_INCREMENT模式,而Mysql(或其他SGBD)将自动创建一个值。

当然,您可以强制使用值:

INSERT INTO dealerships SET dealership_id = 10, zone = 'zone1', phone = '0000', name = 'Eddy'

INSERT INTO dealerships(dealership_id, zone, phone, fax, name) VALUES(9, 'zone1', '00000', '00000', 'name1')
  

http://www.w3schools.com/sql/sql_insert.asp

关于您的错误

  1. 正常。您指定了NOT NULL
  2. 正常,已经存在值0的记录(检查数据库)
  3. 正常。您无法使用default。这是一个具有自己价值的常数(1364)。
  4. 正常,该字段好像无法被忽略 没有此问题的唯一方法是完全删除ID字段的引用。使用描述的解决方案:)

答案 2 :(得分:0)

乔治为你解释了这一切。如果要向表中添加自动增量,只需运行此sql语句

ALTER TABLE dealerships MODIFY COLUMN dealership_id BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT;

这将在经销商列号列上添加自动增量属性。如果您想更改自动增量开始值,请运行此项(将100更改为起始值)

ALTER TABLE dealerships AUTO_INCREMENT=100;