Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

mysql> INSERT INTO children(fname, age) VALUES('Tom', 13);

Query OK, 1 row affected (0.06 sec)

mysql> SELECT LAST_INSERT_ID;

+------------------+

| last_insert_id |

+------------------+

| 14 |

+------------------+

1 row in set (0.01 sec)

mysql> INSERT INTO children(fname, age) VALUES('Harry', 17);

Query OK, 1 row affected (0.02 sec)

mysql> SELECT LAST_INSERT_ID;

+------------------+

| last_insert_id |

+------------------+

| 15 |

+------------------+

1 row in set (0.00 sec)

mysql>

Как

это работает

При каждой вставке строки MySQL выделяет новое значение для столбца

id
и запоминает его, поэтому вы сможете узнать это значение с помощью функции
LAST_INSERT_ID
.

Если хотите поэкспериментировать, чтобы убедиться в уникальности возвращаемого номера в вашем сеансе, откройте еще один сеанс и вставьте другую строку. В исходном сеансе повторите выполнение оператора

SELECT LAST_INSERT_ID;
. Вы увидите, что номер не изменился, поскольку возвращаемый номер — последний, добавленный в текущем сеансе. Но если вы выполните оператор
SELECT * FROM children
, то увидите, что в другом сеансе действительно были вставлены данные.

Выполните упражнение 8.3.

Упражнение 8.3. Использование автоматически формируемых ID в программе на С

В этом примере вы измените вашу программу insert1.c, чтобы посмотреть, как она работает на С. Ключевые изменения выделены цветом. Назовите откорректированную программу insert2.c.

#include <stdlib.h>

#include <stdio.h>

#include "mysql.h"

int main(int argc, char *argv[]) {

 MYSQL my_connection;

 MYSQL_RES* res_ptr;

 MYSQL_ROW sqlrow;

 int res;

 mysql_init(&myconnection);

 if (mysql_real_connect(&my_connection, "localhost",

"rick", "bar", "rick", 0, NULL, 0)) {

printf("Connection success\n");

res = mysql_query(&my_connection,

"INSERT INTO children(fname, age) VALUES('Robert', 7)");

if (!res) {

printf("Inserted %lu rows\n",

(unsigned long)mysql_affected_rows(&my_connection));

} else {

fprintf(stderr, "Insert error %d: %s\n",

mysql_errno(&myconnection), mysql_error(&my_connection));

}

res = mysql_query(&my_connection, "SELECT LAST INSERT ID");

if (res) {

printf("SELECT error %s\n", mysql_error(&my_connection);

} else {

res_ptr= mysql_use_result(&my_connection);

if (res_ptr) {

while ((sqlrow = mysql_fetch_row(res_ptr))) {

printf("We inserted childno %s\n", sqlrow[0]);

}

mysql_free_result(res_ptr);

}

}

mysql_close(&my_connection);

 } else {

fprintf(stderr, "Connection failed\n");

if (mysql_errno(&my_connection)) {

fprintf(stderr, "Connection error %d: %s\n",

mysql_errno(&my_connection), mysql_error(&my_connection));

}

 }

 return EXIT_SUCCESS;

}

Далее

приведен вывод:

$ gcc -I/usr/include/mysql insert2.c -L/usr/lib/mysql -lmysqlclient -o insert2

$ ./insert2

Connection success

Inserted 1 rows

We inserted childno 6

$ ./insert2

Connection success

Inserted 1 rows

We inserted childno 7

Как это работает

После вставки строки вы извлекаете выделенный ID, применив функцию

LAST_INSERT_ID
в обычном операторе
SELECT
. Затем вы использовали функцию
mysql_use_result
, которую мы вскоре поясним, для извлечения данных из выполненного вами оператора
SELECT
и вывели их на экран. Сейчас не задумывайтесь всерьез о механизме извлечения значений, на следующих нескольких страницах мы дадим нужные пояснения.

Поделиться:
Популярные книги

Последний Паладин. Том 13

Саваровский Роман
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 13

Сан Феличе Иллюстрации Е. Ганешиной

Дюма-отец Александр
Приключения:
исторические приключения
6.00
рейтинг книги
Сан Феличе Иллюстрации Е. Ганешиной

Ведьмы из Броккенбурга. Барби 2

Соловьев Константин Анатольевич
3. Ведьмы из Броккенбурга
Фантастика:
фэнтези
5.00
рейтинг книги
Ведьмы из Броккенбурга. Барби 2

Лабиринт Страха

Осадчук Алексей Витальевич
5. Андердог
Фантастика:
фэнтези
6.45
рейтинг книги
Лабиринт Страха

Газлайтер. Том 39

Володин Григорий Григорьевич
39. История Телепата
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
попаданцы
6.25
рейтинг книги
Газлайтер. Том 39

В поисках христиан и пряностей

Клифф Найджел
Страницы истории
Научно-образовательная:
история
5.00
рейтинг книги
В поисках христиан и пряностей

Провинциальный остеопат

Маревский Игорь
1. Провинциальный остеопат
Фантастика:
альтернативная история
рпг
5.00
рейтинг книги
Провинциальный остеопат

Охота на вампиров

Моренис Юрий
Фантастика:
ужасы и мистика
5.00
рейтинг книги
Охота на вампиров

Большая Советская Энциклопедия (СС)

Большая Советская Энциклопедия
Справочная литература:
энциклопедии
5.29
рейтинг книги
Большая Советская Энциклопедия (СС)

Собрание юмористических рассказов в одном томе

Чехов Антон Павлович
Проза:
русская классическая проза
5.00
рейтинг книги
Собрание юмористических рассказов в одном томе

Нож сновидений

Джордан Роберт
11. Колесо Времени
Фантастика:
фэнтези
8.67
рейтинг книги
Нож сновидений

Канареечное счастье

Федоров Василий Георгиевич
Проза:
классическая проза
5.00
рейтинг книги
Канареечное счастье

Вернувшийся: Первые шаги. Том II

Vector
2. Вернувшийся
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Первые шаги. Том II

Сто великих рекордов животных

Бернацкий Анатолий Сергеевич
Сто Великих
Справочная литература:
энциклопедии
5.00
рейтинг книги
Сто великих рекордов животных