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

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

Жанры

Основы программирования в 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
и вывели их на экран. Сейчас не задумывайтесь всерьез о механизме извлечения значений, на следующих нескольких страницах мы дадим нужные пояснения.

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

Снега

Чепурин Юлий Петрович
Поэзия:
драматургия
5.00
рейтинг книги
Снега

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6

Золотой ворон

Сакавич Нора
5. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Золотой ворон

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Русские дети (сборник)

Фрай Макс
Проза:
современная проза
5.60
рейтинг книги
Русские дети (сборник)

Геном хищника. Книга девятая

Гарцевич Евгений Александрович
9. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга девятая

Хозяин Теней 3

Петров Максим Николаевич
3. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Хозяин Теней 3

Ожерелье Странника

Хаггард Генри Райдер
Приключения:
исторические приключения
7.50
рейтинг книги
Ожерелье Странника

Бастард Императора. Том 15

Орлов Андрей Юрьевич
15. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 15

Локки 6. Потомок бога

Решетов Евгений Валерьевич
6. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 6. Потомок бога

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

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

Двойник короля 17

Скабер Артемий
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 17