【启动mysql服务】
Service mysql start
【启动mysql登陆】
mysql -u root –p
添加一个用户
Create database db1 character set utf8;
grant all on db1.* to dbuser1 identified by 'dbuser1';//将db1下的所有数据授权给dbuser1,密码为dbuser1
用该用户登陆
mysql -u dbuser1 –p
在头文件目录里没有mysql.h头文件
ubuntu下:audo apt-get install libmysqlclient-dev
centos下 : yum install mysql-devel
头文件的名字是以/usr/include为基路径,往后加上所在<路径名/文件名.h>
如#include<sys/stat.h>
Makefile文件中连接时加上-mysqlclient 意思是要连接到libmysqlclient.so这个库
Mysql的client与server也是TCP协议
1, 初始化client
2, 建立连接
3, 接收和交互
数据库操作步骤与函数:
1,
MYSQL mysql;
//初始化mysql对象,相当于初始化了一个TCP的socket对象,同时初始化sql的内存和一些结构
mysql_init(&mysql);
2,
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结构的地址。在调用mysql_real_connect()之前,你必须调用mysql_init()初始化MYSQL结构。见下面的例子。
• host值可以是一个主机名或一个IP地址。如果host是NULL或字符串"localhost",假定是到本地主机的一个连接。如果OS支持套接字(Unix)或命名管道(Win32),使用他们而不是TCP/IP与服务器连接。
• user参数包含用户的MySQL登录ID。如果user是NULL,假定是当前用户。在Unix下,它是当前登录名。在Windows ODBC下,必须明确地指定当前用户名字。见16.4 怎样填写ODBC管理程序中各种域。
• passwd参数为user包含口令。如果passwd是NULL,只有在user表中对于有一个空白口令字段的用户的条目将被检查一个匹配。这允许数据库主管设置MySQL权限,使用户获得不同的口令,取决于他们是否已经指定一个口令。注意:不要试图在调用mysql_real_connect()前加密口令;口令加密自动被客户API处理。
• db是数据库名。如果db不是NULL,连接将缺省数据库设置为这个值。
• 如果port不是0,值对于TCP/IP连接将用作端口号。注意host参数决定连接的类型。
• 如果unix_socket不是NULL,字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型。
• client_flag值通常是0,但是在很特殊的情况下可以被设置为下列标志的组合:
标志名字 意味着的标志
CLIENT_FOUND_ROWS 返回找到的(匹配的)行数,不是受到影响的行数。
CLIENT_NO_SCHEMA 不允许db_name.tbl_name.col_name语法。这是为了ODBC;如果你使用该语法,导致语法分析器产生一个错误,它是为在一些ODBC程序捕捉错误是有用的。
CLIENT_COMPRESS 使用压缩协议。
CLIENT_ODBC 客户是一个ODBC客户。这使mysqld变得对ODBC更友好。
2.1.3 返回值
如果连接成功,一个 MYSQL*连接句柄。如果连接失败,NULL。对一个成功的连接,返回值与第一个参数值相同,除非你传递NULL给该参数。
例:
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
{
fprintf(stderr, "%s", "mysqlerror\n");
exit(1);
}
打印错误:
mysql_error(&mysql);
例:
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
{
perror(mysql_error(&mysql));
exit(1);
}
关闭连接:
mysql_close(pconnction);
执行sql语句:
int mysql_query(MYSQL* mysql,const char* sql);
mysql:连接的指针
sql:sql语句
返回:成功返回0,失败返回非0
执行之前必须先设置字符集,包括文件的编码。
注:system(sty erase ^H); //设置控制台退格不回显
例:
int main(int argc, char* argv[])
{
MYSQL mysql, *pconnection;
//初始化mysql对象,相当于初始化了一个TCP的socket对象
mysql_init(&mysql);
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
ERR_EXIT(mysql_error(&mysql));
//确保客户端与server字符集相同,不然会出现程序出现汉字并且作为where条件,不识别也不报错
int ret = mysql_query(pconnection, "set names utf8");
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
// char *sql = "delete from people where id >15";
char *con = argv[1];
char p[10];
char name[100];
memset(name,0,sizeof(name));
memset(p,0,sizeof(p));
printf("请输入条件1:");
//read(STDIN_FILENO,name,sizeof(name));
fgets(p,sizeof(p),stdin);
p[strlen(p)-1]=0;//将最后一位\n设为NULL(因为你再输入后敲了个回车)
printf("请输入条件2:");
fgets(name,sizeof(name),stdin);
name[strlen(name)-1]=0;
char sql[1024];
memset(sql,0,sizeof(sql));
sprintf(sql,"delete from people where %s%s'%s'",con,p,name);
printf("%s\n",sql);
ret = mysql_query(pconnection, sql);
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
mysql_close(pconnection);
return 0;
}
查询语句:
MYSQL_RES *mysql_store_result(MYSQL *pmysql);
pmysql:打开的连接指针
成功返回一个查询结果指针,失败或查询无结果返回NULL(不能用其判断查询结果为空)
查看查询结果:
MYSQL_ROW mysql_fetch_row(MYSQL_RES * result);
查看查询结果中的字段信息:
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES * result);
释放查询资源:
mysql_free_result(MYSQL_RES* pres);//调用完mysql_store_result一定要用其释放资源
例:查询
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <mysql/mysql.h>
#define ERR_EXIT(m)\
do {perror(m);\
exit(EXIT_FAILURE);\
} while(0)
int main(int argc, char* argv[])
{
MYSQL mysql, *pconnection;
//初始化mysql对象,相当于初始化了一个TCP的socket对象
mysql_init(&mysql);
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
ERR_EXIT(mysql_error(&mysql));
//确保客户端与server字符集相同,不然会出现程序出现汉字并且作为where条件,不识别也不报错
int ret = mysql_query(pconnection, "set names utf8");
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
char *sql = "select * from people";
ret = mysql_query(pconnection, sql);
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
MYSQL_RES *result;
result = mysql_store_result(pconnection);
//查询字段
MYSQL_FIELD *field;
int count = 0;
while (1)
{
field = mysql_fetch_field(result);
if (field == NULL)
break;
printf("%s\t",field->name);
count++;
}
printf("\n");
//查询记录
MYSQL_ROW row;
while (1)
{
row = mysql_fetch_row(result);
if (row == NULL)
break;
int i;
for(i = 0; i < count ;i++)
printf("%s\t", row[i]);
printf("\n");
}
mysql_free_result(result);
mysql_close(pconnection);
return 0;
}