插入值而不设置主键

时间:2016-01-31 18:19:04

标签: php mysql sql

有数据库

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
  `pass` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
  `reg_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=40 ;

然后在php中我尝试插入新用户,只设置用户名/电子邮件/传递

  mysql_query("INSERT INTO `users` SET name='".$user."', email='".$email."', `pass = '".$pass."' ");


  if (mysql_affected_rows($GLOBALS['link'])!=1) {
    echo 'user/email exist';
    die();
  } else {
    echo 'user created';
  }

或者我只需要在每个新查询中都知道新的id:

INSERT INTO `users` (`id`, `name`, `email`, `pass`, `reg_time`) VALUES
(1, 'user', 'user@server.com', 'pass', '2016-01-31 03:10:13');

名称和电子邮件是UNIQUE,时间是默认的当前时间戳,我不需要测试它们。这很好,但我怎么可以插入id,我需要它吗?

在本地phpmyadmin上进行测试并没有给我任何新的东西。

3 个答案:

答案 0 :(得分:1)

mysql_query("INSERT INTO `users` ( `name`, `email`, `pass` ) values('".$user."', '".$email."', '".$pass."') ");

插入查询语法错误,您在代码中使用更新查询语法..

答案 1 :(得分:1)

你的插入查询有id,如果你的表没有任何id为1的记录,这是你的表的主键,那么它将正常工作。如果表具有并以id 1记录,那么它将导致致命错误。 注意: - 表的基本主键应自动递增。对于PHPMyadmin中的日期时间自动更新,设置CURRENT_DATETIME的列默认值。

INSERT INTO `users` (`name`, `email`, `pass`, `reg_time`) VALUES
('user', 'user@server.com', 'pass', '2016-01-31 03:10:13');

答案 2 :(得分:0)

omg,只是设置null,它很好用!!!!

INSERT INTO `users` (`id`, `name`, `email`, `pass`, `reg_time`) VALUES
(null, 'user', 'user@server.com', 'pass', null);