/etc/mysql/my.cnf
mysqladmin variables
mysqladmin -u root password newpassword
(这种方法会泄密,shell 历史记录)
mysql>SET password=PASSWORD('yourpassword')
mysqldump -u root -p dbname > backup.dump
定义 | 说明 |
---|---|
CHAR | 单字符 |
CHAR(N) | 正好有 N 个字符到字符串,如果必要会议空格字符填充,限制为 255 |
VARCHAR(N) | N 个字符到可变长数组,限制为 255 个字符 |
TINYTEXT | 类似 VARCHAR(N) |
MEDIUMTEXT | 最长为 65535 个字符到文本字符串 |
LONGTEXT | 最长为 2 的 32 次方 -1 个字符到文本字符串 |
TINYINT | 8 位整型 |
SMALLINT | 16 位整型 |
MEDIUMINT | 24 位整型 |
INIT | 64 位整型 |
BIGINT | 64 位整型 |
FLOAT(P) | 浮点型,精度至少为 P 位数字 |
DOUBLE(D,N) | 浮点型,有符号双精度浮点,有 D 位数字和 N 位小数 |
NUMERIC(P,S) | 浮点型,总长为 P 位到真实数字,小数点后有 S 位数字, 与 DOUBLE 不同,这是一个准确到数,因此适合用来储存货币值,但处理效率会低一点 |
DECIMAL(P,S) | 浮点型,与 NUMERIC 同义 |
#include <stdlib.h>
#include <stdio.h>
#include <mysql/mysql.h>
int main(int argc, char *argv[])
{
MYSQL *conn_ptr;
conn_ptr = mysql_init(NULL);
if(!conn_ptr){
fprintf(stderr, "mysql_int failed\n");
return EXIT_FAILURE;
}
conn_ptr = mysql_real_connect(conn_ptr, "localhost", "root", "root", "test", 0, NULL, 0);
if(conn_ptr){
printf("Connection success\n");
}else{
printf("Connection failed\n");
}
mysql_close(conn_ptr);
return EXIT_SUCCESS;
}
#include <mysql.h>
MYSQL *mysql_init(MYSQL *);
MYSQL *mysql_real_connect(MYSQL *connection,
const char *servar_host,
const char *sql_user_name,
const char *sql_password,
const char *db_name,
unsigned int port_number,
const char *unix_socket_name,
unsigned int flags);
void mysql_close(MYSQL *connection);
int mysql_options(MYSQL *connection, enum option_to_set, const char *argument);
连接选项只能在 mysql_init 和 mysql_real_connct 之间调用,每次只能设置一个选项
enum 选项 | 实际参数类型 | 说明 |
---|---|---|
MySQL_OPT_CONNECT_TIMEOUT | const unsigned int * | 连接超时等待 |
MySQL_OPT_COMPRESS | NULL | 网络连接中使用压缩机制 |
MySQL_OPT_COMMAND | const char * | 每次连接建立后发送的命令 |
unsigned int mysql_errno(MYSQL *connection);
char *mysql_error(MYSQL *connection);
执行查询, 其中 mysql_query 不能查询二进制字段
int mysql_query(MYSQL *mysql, const char *stmt_str);
int mysql_real_query(MYSQL *mysql, const char* stmt_str)
获取受影响数
my_ulonglong mysql_affected_rows(MYSQL *mysql);
返回受影响行数,注意:只查询有修改的行数,如果需要返回传统的匹配的行数连接时使用标记:CLIENT_FOUND_ROWS
当使用了AUTO_INCREMENT
选项建表后,可以使用LAST_INSERT_ID()
获取插入的内容
CREATE TABLE children(
childno INTEGER AUTO_INCREMENT NOT NULLPRIMARY KEY,
fname VARCHAR(10),
age INTEGER
);
mysql>SELECT LAST_INSERT_ID();
获取结果,mysql_store_result 为一次获取结果,mysql_use_result 为游标方式
MYSQL_RES *mysql_store_result(MYSQL *mysql);
MYSQL_RES *mysql_use_result(MYSQL *mysql);
void mysql_free_result(MYSQL *result);
游标定位 & 行数获取
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset); // offset 为行号
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result); // 获取当前位置,注意不是行号,只能用于 mysql_store_result
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset); // 移动当前位置,返回之前位置, 只能用于 mysql_store_result
my_ulonglong mysql_num_rows(MYSQL_RESS *result); // 获取行数,只能用于 mysql_store_result
提取行 & 获取行字段数
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
unsigned int mysql_field_count(MYSQL *mysql);
提取字段信息
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL *result, MYSQL_FIELD_OFFSET offset);
MYSQL *mysql_fetch_field(MYSQL_RES *result);
MYSQL_FIELD 结构定义
typedef struct st_mysql_field {
char *name; /* Name of column */
char *org_name; /* Original column name, if an alias */
char *table; /* Table of column if column was a field */
char *org_table; /* Org table name, if table was an alias */
char *db; /* Database for table */
char *catalog; /* Catalog for table */
char *def; /* Default value (set by mysql_list_fields) */
unsigned long length; /* Width of column (create length) */
unsigned long max_length; /* Max width for selected set */
unsigned int name_length;
unsigned int org_name_length;
unsigned int table_length;
unsigned int org_table_length;
unsigned int db_length;
unsigned int catalog_length;
unsigned int def_length;
unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */
unsigned int charsetnr; /* Character set */
enum enum_field_types type; /* Type of field. See mysql_com.h for types */
void *extension;
} MYSQL_FIELD;
enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,
MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,
MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,
MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR,
MYSQL_TYPE_BIT,
MYSQL_TYPE_TIMESTAMP2,
MYSQL_TYPE_DATETIME2,
MYSQL_TYPE_TIME2,
MYSQL_TYPE_NEWDECIMAL=246,
MYSQL_TYPE_ENUM=247,
MYSQL_TYPE_SET=248,
MYSQL_TYPE_TINY_BLOB=249,
MYSQL_TYPE_MEDIUM_BLOB=250,
MYSQL_TYPE_LONG_BLOB=251,
MYSQL_TYPE_BLOB=252,
MYSQL_TYPE_VAR_STRING=253,
MYSQL_TYPE_STRING=254,
MYSQL_TYPE_GEOMETRY=255
};
预定义宏 IS_NUM
用于判断是否为数字型