MYSQL: как я могу создать новую строку и получить новый идентификатор без вставки данных?

Обычно я получаю новый идентификатор, вставляя некоторые данные, и он создает новую строку и возвращает новый идентификатор. Но если я не хочу вставлять какие-либо данные, я просто хочу создать новую строку с новым идентификатором и получить новый ID... как я могу это сделать?

Спасибо.

UPDATE:

ОК. Вот моя проблема. В таблице я хотел бы сделать это, чтобы иметь только столбец 1 ID. Зачем? Я объясню (я постараюсь). У меня есть другая таблица, в которой каждая строка имеет свой собственный уникальный идентификатор variant_id (auto-inc), но каждая строка должна быть привязана к группе других строк из той же таблицы. У меня есть еще один столбец с именем group_id. У меня не может быть его auto-inc, потому что он должен появляться несколько раз, это то, что говорит, какие вариации должны быть сгруппированы вместе. Поэтому я хотел иметь вторую таблицу с group_id в качестве первичного ключа и auto-inc, поэтому я мог бы использовать это для генерации новой group_id всякий раз, когда мне нужна новая группа. Наверное, я об этом ошибаюсь... так что мне делать?

Ответ 1

вот пример:

CREATE TABLE X (id int PRIMARY KEY AUTO_INCREMENT);

то вы можете "подать" свою таблицу:

INSERT INTO X (id) VALUES (NULL);
SELECT LAST_INSERT_ID();

Проверьте эту скрипту: http://sqlfiddle.com/#!2/6b19c/1

Надеюсь, что это поможет!

Тарас Лукавий задал еще один вопрос и вот ответ:

CREATE TABLE X (id int PRIMARY KEY AUTO_INCREMENT, time timestamp);

тогда вы "загружаете" данные с помощью:

INSERT INTO X (id, time) VALUES (NULL, now());
SELECT LAST_INSERT_ID();

Теперь, проверьте это:

SELECT * FROM X

Вы увидите каждую строку с автоматическим идентификатором и меткой времени.

Проверьте эту скрипту: http://sqlfiddle.com/#!2/9a344/2

Надеюсь, что это поможет!

Ответ 2

Все ваши столбцы должны быть обнуляемыми, и вам придется вставлять нуль для всех остальных столбцов, кроме ID.

Ответ 3

Не могли бы вы просто передать нулевые значения, или я не понимаю вопрос? Тогда запрос будет выглядеть следующим образом:

INSERT INTO tableName values (null)

Если ваши таблицы не принимают нулевые значения, они могут быть настроены со значением по умолчанию, что позволяет вам выполнить следующий запрос:

INSERT INTO tableName VALUES (default) 

По умолчанию это ключевое слово, которое явно указывает значение по умолчанию для столбца. MySQL позволяет указать пустой список значений, если все столбцы имеют заданное по умолчанию значение: insert into D values ​​()

Изменить: поскольку другие ответы пришли, и никто не упомянул идентификатор ключевого слова по умолчанию, чтобы показать, как вы создаете таблицы со значениями по умолчанию. Это происходит следующим образом:

CREATE TABLE tableName (id integer default 0, foo varchar(10))

Теперь, если вы хотите, вы можете вставить значение по умолчанию для ID, выполнив только:

INSERT INTO tableName (foo) values ('bar')

Ответ 4

SHOW CREATE TABLE покажет вам внутреннее значение auto_increment, которое будет назначено следующей вставленной строке. Обратите внимание, что вы не должны использовать это значение в следующих операторах, так как значение может измениться с помощью другой операции вставки, которую вы получаете за микросекунду. Вы можете использовать LAST_INSERT_ID() в других запросах, если это соответствует вашим потребностям - LAST_INSERT_ID() предоставит вам последний идентификатор, который был вставлен в этот сеанс (= соединение), поэтому можно полагаться на это значение.

mysql> CREATE TEMPORARY TABLE test (id INT PRIMARY KEY AUTO_INCREMENT);
Query OK, 0 rows affected (0.00 sec)

mysql> show create table test;
+-------+--------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                         |
+-------+--------------------------------------------------------------------------------------------------------------------------------------+
| test  | CREATE TEMPORARY TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | 
+-------+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> INSERT INTO test(id) VALUES(10);
Query OK, 1 row affected (0.00 sec)

mysql> show create table test;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                           |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| test  | CREATE TEMPORARY TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 | 
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

Изменить после выяснения вопроса:

Вам следует создавать таблицы, которые отражают эту логику и дают им имена. Создайте таблицу под названием groups (или что-то более подходящее в зависимости от вашего приложения) и вставьте новую запись каждый раз, когда вы хотите создать группу. Вы можете присвоить значения этой группе, используя ее LAST_INSERT_ID(). Предварительное вычисление значений auto_increment очень опасно и в конечном итоге приведет к дублированию идентификаторов групп - что может быть чем угодно, от крайне досадных до фатальных - в зависимости от того, что делает ваше приложение.

Ответ 5

Требуется больше деталей для ответа, но если все столбцы в таблице имеют значение NULL, вы можете просто вставить пустую строку и вернуть автоматически сгенерированный идентификатор.

Ответ 6

Затем нужно иметь макет таблицы с принятием null для каждого столбца и просто вставлять нулевые значения.

Если вам нужен только идентификатор, заблокируйте таблицу, выберите max (id) из этой таблицы и добавьте 1.Используйте информацию и потребляйте новую строку и отпустите блокировку.