0
点赞
收藏
分享

微信扫一扫

Linux-MYSQL数据库

1.数据库简介:

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。

文件:存放数据的

数据库:数据的仓库:存放数据的;

2.数据库安装:

1)安装数据库服务器:sudo apt-get install mysql-server

2)安装数据库客户端:sudo apt-get install mysql-client

3)安装数据库开发包:

sudo apt-get install libmysqlclient-dev

存在依赖问题:sudo apt-get install -f

3.MYSQL相关指令

3.1登录MySQL相关指令

一般情况下:mysql -u root -p

第一次登录:

第一步:          先切换root用户:

su root     (认证失败  sudo passwd root

第二步:          再输入指令:mysql -u root  回车

alter user 'root'@'localhost' identified with mysql_native_password by '1';

出现:Query OK ,设置成功

第三步:     退出:quit 回车

常规操作:

退出之后切换到自己的普通用户,接下来就是一般操作:mysql -u root -p

关于mysql的重要单词:

database 数据库 

table  表格

column   列

select  选中 

show  显示  

update  更新

drop/delete  删除 

modify  修改

3.2数据库操作相关

1.修改密码:set password = ‘1’;

2.清屏:ctrl+l   (小写的L)

3.退出:quit;

1》查看所有的数据库:

show databases;

2》创建数据库:

create database 数据库的名字;

3》删除数据库

drop database 数据库的名字;

3.3和表格相关的指令:

1》查看某一个数据库中的所有表格:

方式1:直接查看

show tables from 数据库的名字;

方式2:

先选中数据库:use 数据库的名字;    

再查看:show tables;

下面的所有操作:都需要先选中数据库;

use 数据库名;

2》创建表格:

create table 表名(表头 类型);

create table 表名(列名 列类型,列名 列类型,列名 列类型。。。);

char :单字符;

char (n) : 字符数组;

smallint : 2字节

int:4字节整型

bigint:8字节

float  :4字节

double :8字节

3》查看表头:

show columns from 表名;

4》给表里面添加一行信息  :

insert into 表名 values(,,,);

5》显示表里面的内容:

select * from 表名;  * 所有

select 列头1,列头2 from 表名;

select * from 表名 where 条件;

6》删除某行信息:

delete from 表名 where 条件;

7》修改/设置信息:

update 表名set 更新后的数据 where 条件;

8》添加列:

  alter table 表名 add 新的列名 列类型;

9》删除列: 

alter table 表名 drop 列名;

10》修改列类型

alter table 表名 modify 列名 新的列类型;

11》删除表格

drop table 表名;

3.4 MYSQL相关API函数

要求你得提前用指令先创建一个你的数据库

函数的功能:链接一个数据库

函数头文件:<mysql/mysql.h>    链接库:-lmysqlclient

函数的原型:

    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 long client_flag

                      )

函数的参数:

    mysql: 他是Mysql核心结构体

        需要你定一个该结构体变量

        然后调用 mysql_init()进行初始化即可!

举例:方式1:MYSQL A;

             mysql_init(&A);

      方式2:MYSQL *a = mysql_init(NULL);

    host:主机名,固定填写 "localhost"本地主机

    user:访问Mysql的 用户 --- “root”

    passwd:访问Mysql的密码

    db : 你要访问的数据库  --“two_208”数据库的名字

    port :  0         

    unix_socket : NULL (由于没有链接网络)

    client_flag :  0

该函数的返回的值:

    如果失败返回NULL

    如果成功返回的就是第一个参数的地址!

2》关闭数据库链接

    void mysql_close(MYSQL *mysql)

    mysql:刚才的核心结构体

3》mysql_query()

函数的功能:C语言执行数据库的SQL命令语法

函数的原型:

    int mysql_query(MYSQL *mysql, const char *query)

函数的参数:

    mysql: 还是你链接成功的核心结构体!

    query:是你要执行的SQL语法!

函数的返回值:

    成功返回  失败返回 非0

4》函数的功能:把数据库执行(select)返回的结果封装成结构体

函数的原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)

函数的参数:

    mysql:就是执行完查询语句后的刚才核心的结构体

函数返回值:

    返回值里面封装的就是我们要的结果集合!

    这个集合一般需要借助外部的其他函数来获取结果

①int mysql_num_fields(MYSQL_RES * res)

    返回值就是结果集合的列数

②int mysql_num_rows(MYSQL_RES * res)

返回值就是结果集合的行数(不包括列头);

③char ** mysql_fetch_row(MYSQL_RES * res)

调用一次,获取结果集一行信息,如果查找到多行,要循环调用该函数

指向失败:NULL或错误码

④MYSQL_FIELD *mysql_fetch_field(MYSQL_RES * res)

获取一列的列头信息,该函数返回的结构体里面的name,就是我们要找的表头,但是该函数里面的name是一个char *类型,也就是说该函数调用一次,仅仅返回表头中的一列,想要看到整个表头,要一直往后获取,直到取到NULL

例题:

1.数据库中存放账号(字符数组)密码(int),验证账号是否存在,如果存在,验证密码是否正确

#include<stdio.h>
#include <mysql/mysql.h>
#include<string.h>
int main()
{
    //1.创建并初始化核心结构体
    MYSQL *sql=mysql_init(NULL);
    //2.连接数据库
    sql=mysql_real_connect(sql,"localhost","root","1","3_1",0,NULL,0);
    if(sql==NULL)
    {
        printf("数据库连接失败\n");
        return -1;
    }
    //3.操作
    char buf[128]={0};
    sprintf(buf,"select * from test_1");
    int num=mysql_query(sql,buf);//操作数据库的语法
    if(num!=0)
    {
        printf("mysql_query执行失败\n");
    }
    //将数据库里的信息导入res里
    MYSQL_RES *res = mysql_store_result(sql);
    //MYSQL_FIELD *nr;
    //nr=mysql_fetch_field(res);
    //获取表头
    char **p=NULL;
    char zh[7]={0};
    p=mysql_fetch_row(res);
    printf("请输入账号:6位\n");
    scanf("%s",zh);
    if(strcmp(p[0],zh)==0)
    {
        printf("账号正确\n");
    }
    else
    {
        printf("账号错误,已退出\n");
        return -1;
    }
    int c=3;
    printf("请输入密码:\n");
    char mm[12]={0};
    while(1)
    {
        scanf("%s",mm);
        if(strcmp(p[1],mm)==0)
        {
            printf("密码正确\n");
            return 0;
        }
        else
        {
            c--;
            printf("密码错误剩余%d次机会\n",c);
        }
        if(c==0)
        {
            printf("机会已用光,退出\n");
            return -1;
        }
    }
    //4.关闭
    mysql_close(sql);
    return 0;
}

2.select * from 表,在程序中实现,要求打印;

#include<stdio.h>
#include <mysql/mysql.h>
int main()
{
    //1.先初始化数据库的核心结构体
    MYSQL *sql=mysql_init(NULL);
    //2.连接
    sql=mysql_real_connect(sql,"localhost","root","1","3_1",0,NULL,0);
    if(sql==NULL)
    {
        printf("数据库连接失败\n");
        return -1;
    }
    //3.操作
    char buf[128]={0};
    //3.1把相关内容进行打开,执行命令
    sprintf(buf,"select * from test_1;");
    int a=mysql_query(sql,buf);
    if(a!=0)
    {
        printf("mysql_query执行失败\n");
    }
    //3.2将数据库里的信息弄到res里
    MYSQL_RES *res = mysql_store_result(sql);
    int lie=mysql_num_fields(res);//获取列数
    //printf("lie= %d\n",lie);
    int hang=mysql_num_rows(res);//获取行数
    //printf("hang= %d\n",lie);
    int i,j;
    MYSQL_FIELD *nr;
    for(i=0;i<lie;i++)
    {
        nr=mysql_fetch_field(res);
        printf("%-10s",nr->name);
    }
    printf("\n");
    char **p=NULL;
    for(j=0;j<hang;j++)
    {
        p=mysql_fetch_row(res);
        for(i=0;i<lie;i++)
        {
            printf("%-10s",p[i]);
        }
    }
    printf("\n");
    //4.关闭
    mysql_close(sql);
    return 0;
}

举报

相关推荐

0 条评论