Mysql增删改查

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)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值