Linux编程常用的函数(七) MYSQL编程

(七)MYSQL编程


1.数据类型:
MYSQL
這個結構表示對一個數據庫連接的句柄,它被用于幾乎所有的MySQL函數。
MYSQL_RES
這個結構代表返回行的一個查詢的(SELECT, SHOW, DESCRIBE, EXPLAIN)的結果。從查詢返回的信息在本章下文稱為結果集合。
MYSQL_ROW
這是一個行數據的類型安全(type-safe)的表示。當前它實現為一個計數字節的字符串數組。(如果字段值可能包含二進制數據,你不能將這些視為空終止串,因為這樣的值可以在內部包含空字節) 行通過調用mysql_fetch_row()獲得。
MYSQL_FIELD
這個結構包含字段信息,例如字段名、類型和大小。其成員在下面更詳細地描述。你可以通過重複調用mysql_fetch_field()對每一列獲得MYSQL_FIELD結構。字段值不是這個結構的部分;他們被包含在一個MYSQL_ROW結構中。
MYSQL_FIELD_OFFSET
這是一個相對一個MySQL字段表的偏移量的類型安全的表示。(由mysql_field_seek()使用。) 偏移量是在一行以內的字段編號,從0開始。
my_ulonglong
該類型用于行編號和mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()。這種類型提供0到1.84e19的一個範圍。在一些系統上,試圖打印類型my_ulonglong的值將不工作。為了打印出這樣的值,將它變換到unsigned long並且使用一個%lu打印格式。例如:
printf (Number of rows: %lu/n", (unsigned long) mysql_num_rows(result));
MYSQL_FIELD結構包含列在下面的成員:
char * name
字段名,是一個空結尾的字符串。
char * table
包含該字段的表的名字,如果它不是可計算的字段。對可計算的字段,table值是一個空字符串。
char * def
這字段的缺省值,是一個空結尾的字符串。只要你使用,只有你使用mysql_list_fields()才可設置它。
enum enum_field_types type
字段類型。type值可以是下列之一:
類型值             類型含義
FIELD_TYPE_TINY     TINYINT字段
FIELD_TYPE_SHORT     SMALLINT字段
FIELD_TYPE_LONG     INTEGER字段
FIELD_TYPE_INT24     MEDIUMINT字段
FIELD_TYPE_LONGLONG     BIGINT字段
FIELD_TYPE_DECIMAL     DECIMAL或NUMERIC字段
FIELD_TYPE_FLOAT     FLOAT字段
FIELD_TYPE_DOUBLE     DOUBLE或REAL字段
FIELD_TYPE_TIMESTAMP     TIMESTAMP字段
FIELD_TYPE_DATE     DATE字段
FIELD_TYPE_TIME     TIME字段
FIELD_TYPE_DATETIME     DATETIME字段
FIELD_TYPE_YEAR     YEAR字段
FIELD_TYPE_STRING     字符串(CHAR或VARCHAR)字段
FIELD_TYPE_BLOB     BLOB或TEXT字段(使用max_length決定最大長度)
FIELD_TYPE_SET     SET字段
FIELD_TYPE_ENUM     ENUM字段
FIELD_TYPE_NULL     NULL- 類型字段
FIELD_TYPE_CHAR     不推薦;使用FIELD_TYPE_TINY代替
你可以使用IS_NUM()宏來測試字段是否有一種數字類型。將type值傳給IS_NUM()並且如果字段是數字的,它將計算為TRUE:
if (IS_NUM(field->type))
  printf("Field is numeric/n");
unsigned int length
字段寬度,在表定義中指定。
unsigned int max_length
對結果集合的字段的最大寬度(對實際在結果集合中的行的最長字段值的長度)。如果你使用mysql_store_result()或mysql_list_fields(),這包含字段最大長度。如果你使用mysql_use_result(),這個變量的值是零。
unsigned int flags
字段的不同位標志。flags值可以是零個或多個下列位設置:
標志值             標志含義
NOT_NULL_FLAG     字段不能是NULL
PRI_KEY_FLAG     字段是一個主鍵的一部分
UNIQUE_KEY_FLAG     字段是一個唯一鍵的一部分
MULTIPLE_KEY_FLAG     字段是一個非唯一鍵的一部分。
UNSIGNED_FLAG     字段有UNSIGNED屬性
ZEROFILL_FLAG     字段有ZEROFILL屬性
BINARY_FLAG     字段有BINARY屬性
AUTO_INCREMENT_FLAG     字段有AUTO_INCREMENT屬性
ENUM_FLAG             字段是一個ENUM(不推薦)
BLOB_FLAG             字段是一個BLOB或TEXT(不推薦)
TIMESTAMP_FLAG     字段是一個TIMESTAMP(不推薦)
BLOB_FLAG、ENUM_FLAG和TIMESTAMP_FLAG標志的使用是不推薦的,因為他們指出字段的類型而非它的類型屬性。對FIELD_TYPE_BLOB、FIELD_TYPE_ENUM或FIELD_TYPE_TIMESTAMP,最好是測試field->type。下面例子演示了一個典型的flags值用法:
if (field->flags & NOT_NULL_FLAG)
  printf("Field can't be null/n");
你可以使用下列方便的宏決來確定flags值的布爾狀態:
IS_NOT_NULL(flags)     真,如果該字段被定義為NOT NULL
IS_PRI_KEY(flags)     真,如果該字段是一個主鍵
IS_BLOB(flags)     真,如果該字段是一個BLOB或TEXT(不推薦;相反測試field->type)
unsigned int decimals
對數字字段的小數位數。

2. my_ulonglong mysql_affected_rows(MYSQL *mysql) 返回被最新的UPDATE, DELETE或INSERT查詢影響的行數。
  void mysql_close(MYSQL *mysql)     關閉一個服務器連接。

  MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd)     連接一個MySQL服務器。該函數不推薦;使用mysql_real_connect()代替。

  my_bool mysql_change_user(MYSQL *mysql, const char *user, const char *password, const char *db)     改變在一個打開的連接上的用戶和數據庫。

  int mysql_create_db(MYSQL *mysql, const char *db)     創建一個數據庫。該函數不推薦;而使用SQL命令CREATE DATABASE。

  void mysql_data_seek(MYSQL_RES *result, unsigned long long offset)     在一個查詢結果集合中搜尋一任意行。

  void mysql_debug(char *debug)     用給定字符串做一個DBUG_PUSH。

  int mysql_drop_db(MYSQL *mysql, const char *db)     拋棄一個數據庫。該函數不推薦;而使用SQL命令DROP DATABASE。

  int mysql_dump_debug_info(MYSQL *mysql)     讓服務器將調試信息寫入日志文件。

  my_bool mysql_eof(MYSQL_RES *result)     確定是否已經讀到一個結果集合的最後一行。這功能被反對; mysql_errno()或mysql_error()可以相反被使用。

  unsigned int mysql_errno(MYSQL *mysql)     返回最近被調用的MySQL函數的出錯編號。

  char *mysql_error(MYSQL *mysql)     返回最近被調用的MySQL函數的出錯消息。

  unsigned int mysql_escape_string(char *to, const char *from, unsigned int length)     用在SQL語句中的字符串的轉義特殊字符。

  MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)     返回下一個表字段的類型。

  MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)     返回一個表字段的類型,給出一個字段編號。

  MYSQL_FIELD *mysql_fetch_field_direct(MYSQL_RES *result, unsigned int fieldnr)     返回一個所有字段結構的數組。

  unsigned long *mysql_fetch_lengths(MYSQL_RES *result)返回當前行中所有列的長度。

  MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)     從結果集合中取得下一行。

  unsigned int mysql_field_count(MYSQL *mysql)     把列光標放在一個指定的列上。

  MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset)     返回最近查詢的結果列的數量。

  MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *result)返回用于最後一個mysql_fetch_field()的字段光標的位置。

  void mysql_free_result(MYSQL_RES *result)     釋放一個結果集合使用的內存。

  char *mysql_get_client_info(void)     返回客戶版本信息。

  char *mysql_get_host_info(MYSQL *mysql)       返回一個描述連接的字符串。

  unsigned int mysql_get_proto_info(MYSQL *mysql)     返回連接使用的協議版本。

  char *mysql_get_server_info(MYSQL *mysql)     返回服務器版本號。

  char *mysql_info(MYSQL *mysql)     返回關于最近執行得查詢的信息。

  MYSQL *mysql_init(MYSQL *mysql)     獲得或初始化一個MYSQL結構。

  my_ulonglong mysql_insert_id(MYSQL *mysql)返回有前一個查詢為一個AUTO_INCREMENT列生成的ID。

  int mysql_kill(MYSQL *mysql, unsigned long pid)     殺死一個給定的線程。

  MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)     返回匹配一個簡單的正則表達式的數據庫名。

  MYSQL_RES *mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)     返回匹配一個簡單的正則表達式的列名。

  MYSQL_RES *mysql_list_processes(MYSQL *mysql)     返回當前服務器線程的一張表。

  MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild)     返回匹配一個簡單的正則表達式的表名。

  unsigned int mysql_num_fields(MYSQL_RES *result)     返回一個結果集合重的列的數量。

  my_ulonglong mysql_num_rows(MYSQL_RES *result)     返回一個結果集合中的行的數量。

  int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)     設置對mysql_connect()的連接選項。

  int mysql_ping(MYSQL *mysql)     檢查對服務器的連接是否正在工作,必要時重新連接。

  int mysql_query(MYSQL *mysql, const char *query)執行指定為一個空結尾的字符串的SQL查詢。

  MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)     連接一個MySQL服務器。

int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)     執行指定為帶計數的字符串的SQL查詢。

int mysql_reload(MYSQL *mysql)     告訴服務器重裝授權表。

MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset)     搜索在結果集合中的行,使用從mysql_row_tell()返回的值。

MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result)     返回行光標位置。

int mysql_select_db(MYSQL *mysql, const char *db)     連接一個數據庫。

int mysql_shutdown(MYSQL *mysql)     關掉數據庫服務器。

char *mysql_stat(MYSQL *mysql)     返回作為字符串的服務器狀態。

MYSQL_RES *mysql_store_result(MYSQL *mysql)     檢索一個完整的結果集合給客戶。

unsigned long mysql_thread_id(MYSQL *mysql)     返回當前線程的ID。

MYSQL_RES *mysql_use_result(MYSQL *mysql)     初始化一個一行一行地結果集合的檢索 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值