sql和c语言API实现创建数据库,创建表等操作参考这两篇博客:
mysql数据库的简单用法
C语言操作MYSQL数据库
1.增删改查
在开始之前说一下,mysql_query()的返回值,成功为0,异常为非0,需要注意。
1.增加一条数据
char str[1024];
sprintf(str,"INSERT INTO student (name,money) VALUES('%s','%d')","Mr zhang",100);
if(mysql_real_query(con,str,strlen(str))){
fprintf(stderr,"%s\n",mysql_error(con));
}
(1)这张student表包含ID,name,money,三项数据,这里只加了两项,另一项ID是约束条件是主键,所以不添加也会自增,天剑两项时候就要在表明后面加上(类型2,类型3),如果全部添加只要一一对应就可以了。
(2)这里采用sprintf格式化输入,就可以把变量插入,当然这里任然插入的事普通串,比如可以这样
sprintf(str,“INSERT INTO student (name,money) VALUES(’%s’,’%d’)”,name1,cur_money);(name1和cur_money都是变量),不借助sprintf在my_sql_real()中是没办法加入变量的。
2.删除一条数据
//删除数据
if(mysql_query(con,"delete from student where ID = 5")){
fprintf(stderr,mysql_error);
}
后面加上where ID = 5就可以实现删除表中的某一行。
3.修改一条数据
//修改数据
if(mysql_query(con,"update student set money = 200 where ID = 5")){
fprintf(stderr,mysql_error);
}
与删除类似,直接set + 修改对象(money = 200),再加指定行(where ID = 5);
4.查找一条数据
if(mysql_query(con,"select *from student where ID = 5")){
fprintf(stderr,mysql_error(con));
}
MYSQL_RES *res = mysql_store_result(con);
if(res == NULL) printf("ID不存在\n");
unsigned int num_col = mysql_num_fields(result);
printf("表中一共有%d列\n",num_col);
MYSQL_ROW row;
while(row = mysql_fetch_row(res)){
for(int i = 0;i<num_col;i++){
printf("%-20s",row[i]);
}
}
获取数据分三步:
(1)利用select获得需要的数据,再利用store将结果保存在res中。
(2)根据res获得表的行和列
这里注意行不是一个整数而是一个类似数组,存储的是字符串(所以都用%s输出),但是money是整数,简单,用atoi()转换一下就可以了.另外,my_sql_row每次返回一行,如果需要获取全部行数据就要循环读取了.
(3)综上,类似数组访问就可以了,下标小于列数.
主键和外键
1.主键
主键:是用来唯一标示数据的,方便查询,方便表之间的关联,一个表中的主键只能有一个,就好比我们的身份证号.
数据库的五个约束包括一个,PRIMARY KEY,这个就是主键,建表的时候加上这个约束就可以了.
if(mysql_query(con,"create table student(ID int primary key auto_increment,name varchar(20),money int)")){
fprintf(stderr,"%s\n",mysql_error(con));
}
auto_increment表示自增的,即主键不能重赋相同的值,会报错误,如果不赋值,主键自增.
2.外键
外键:用来和其他表建立联系
设置utf8
最好在创建表的时候就设置好,编码方式,比如这样
create table author(name varchar(20),country varchar(20),age int)DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
尝试插入中文字符:insert into author values(“张”,“中国”,45);
结果如下:
mysql> select *from author
-> ;
±-----±--------±-----+
| name | country | age |
±-----±--------±-----+
| 张 | 中国 | 45 |
±-----±--------±-----+
1 row in set (0.00 sec)