Mysql 数据库

目录

一、mysql 安装

二、SQL语句

1、登录SQL

2、创建用户

3、创建数据库、创建表

4、表插入数据

5、修改表、字符集

6、删除表、数据库

7、事务操作

三、代码实现数据库操作

1、数据库实现步骤

(1)初始化数据库(初始化与链接数据库)

(2)插入数据库

(3)查询数据库

2、数据库接口

(1)MYSQL *mysql_init(MYSQL *mysql)  初始化接口

(2)MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user,

const char *password, const char *db, unsigned int port, const char *unix_socket,

unsigned long client_flag)   链接数据库

(3)const char *mysql_error(MYSQL *mysql)  数据库错误信息

(4)int mysql_query(MYSQL *mysql, const char *query)  需要运用SQL语句 插入数据

(5)MYSQL_RES *mysql_store_result(MYSQL *mysql)  获取查询结果

(6)unsigned int mysql_num_fields(MYSQL_RES *res)  查询结果集的行数

(7)MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *res) 查询结果集的字段

(8)MYSQL_ROW mysql_fetch_row(MYSQL_RES *res)  按行输出结果集

(9)void mysql_close(MYSQL *mysql)  关闭数据库

3、代码的实现


一、mysql 安装

Mysql是一个关系型数据库管理系统 AB---->oracle

MYsql是开源的,所以不需要支付费用

Mysql支持大型的数据库,可以处理成千上万记录的大型数据库

MYsql使用标准的SQL数据语言形式

Mysql可以允许多个系统上使用,并且支持多种语言,c,c++,python,java,php

Mysql是可以定制,采用GPL开源协议。

命令:

sudo apt-get update

sudo apt-get install -f

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

二、SQL语句

1、登录SQL

-- 登录SQL

mysql -u root -p   //以root身份登录

mysql -u user -p   //以普通用户进行登录,用户名为:user

2、创建用户

--查看所有用户

select user from user;

--创建用户

create user "209user"@"localhost" identified by "123456";

--修改5用户登录密码

set password for "209user"@"localhost" = PASSWORD("209");

-- 授权用户操作

grant select on *.* to "209user"@"localhost";

//授权操作

grant drop on *.* to "209user"@"localhost";

3、创建数据库、创建表

-- 查看所有的数据库

show databases;

--创建数据库

create database 209test;

-- 使用数据库

use mysql;  

use 209test;

-- 查看所有表

show tables;

-- 创建表

create table int_test(

tiny_int tinyint,                 //整形 1个字节

small_int smallint,           //整形  2个字节

mudium_int mediumint,  //整形  3个字节

common_int int,              //整形 4个字节

big_int bigint );                //整形 8个字节

-- 创建学生表

create table student(

name varchar(10) not null,

age tinyint unsigned not null,

sex char(6)

);

-- 显示表结构

describe int_test;

4、表插入数据

-- 插入数据(5种方式)

insert into student (id,name,birth,age,sex,tel) values(1000,"jack","1998-7-7",18,"male","12345678910");

insert into student (name,birth,age,sex,tel) values("tom","1995-8-8",89,"female","98765432101");

insert into student values(1002,"rose","1996-9-9",78,"male","45678912301");

insert into student (id,name,birth,age,sex) values (1004,"zhangsan","1996-8-8",26,"female");

insert into student values (1005,"lisi","1999-7-7",21,"male","55555555555"),(1006,"wangwu","1956-7-7",89,"female","66666666666");

5、修改表、字符集

//授权操作,普通用户需要授权后,才能执行 drop 命令

grant drop on *.* to "209user"@"localhost";

-- 修改表

alter table student rename stu; alter table student drop sex;

alter table student add sex char(6);

alter table student add id int unsigned not null primary key auto_increment first;

alter table student add birth date after name;

alter table student add tel char(11) default '-';

-- 查询数据

select *from student;

select name from student;

select name from student where id > 1002;

select name from student where id between 1001 and 1004;

--修改更新数据

update student set tel = "00000000000" where name = "rose";

-- 删除记录

delete from student where id = 1000;

-- 修改字符集

//修改后,可以将字符串写成中文,不然只能是英文字符串,但是在高版本的数据库中不需要修改,封装了这个功能。

alter table student convert to character set utf8;

insert into student values(1007,"张三","1996-9-9",78,"male","12345678912");

6、删除表、数据库

-- 删除表

drop table student;

-- 删除数据库

drop database 209test;

7、事务操作

-- 事务操作

//事务会将数据库断电之前的情况保存下来,数据库恢复正常后,数据会恢复到之前;

//当commit 执行之后,数据将恢复为断电前,执行后的状态;

-- 创建表

create table account(

id int unsigned not null primary key,

name varchar(20),

moneny int )charset utf8;

-- 插入数据

insert into account values(1001,"张三",2000),(1002,"李四","5000"),(1003,"王五","1000");

-- 李四给王五转500

update account set moneny = moneny - 500 where id = 10002;

-- 停电了,再次登录MYSQL,数据出错

//没有引入事务之前,就会出现这样丢数据的情况

//事务直接开启,commit 后,数据库将执行,保存前未执行的操作;

-- 开启事务

start transaction;

-- 李四给王五转账500

update account set moneny = moneny - 500 where id = 1002;

-- 查询数据 select *from account;

-- 李四确实少了500 (看到的结果是事务日志)

-- 王五增加500

update account set moneny = moneny + 500 where id = 1003;

-- 退出数据库再次登录,数据并没有修改

-- 提交 commit;

//事务可以回滚到数据库某个指定状态;

-- 开启事务

start transaction;

-- 张三转出500;

update account set moneny = moneny - 500 where id = 1001;

-- 设置回滚点1

savepoint sp1;

-- 李四转出500;

update account set moneny = moneny - 500 where id = 1002;

-- 设置回滚点2

savepoint sp2;

-- 王五增加1000;

update account set moneny = moneny + 1000 where id = 1003;

-- 回滚到 sp2;

rollback to sp2;  

-- 提交

commit;

三、代码实现数据库操作

1、数据库实现步骤

(1)初始化数据库(初始化与链接数据库)

//mysql_init()  初始化

//mysql_real_connect() 链接数据库

//mysql_error()  数据库错误信息

(2)插入数据库

//mysql_query()  需要运用SQL语句 插入数据

(3)查询数据库

//mysql_query()  需要运用SQL语句 查询数据库

//mysql_store_result()  获取查询结果,返回MYSQL_RES 结构体指针集

//mysql_num_fields()  查询结果集的行数

//mysql_fetch_field() 查询结果集的字段

//mysql_fetch_row()  按行输出结果集

//mysql_close()  关闭数据库

2、数据库接口

(1)MYSQL *mysql_init(MYSQL *mysql)  初始化接口

参数:一个自己定义的指向数据库的对象指针,如:  MYSQL *m; 此处通常为 NULL

返回值:成功:MYSQL*            //一个数据库对象地址(指针)

              失败:NULL(需要做错误处理,返回错误信息)

(2)MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user,

const char *password, const char *db, unsigned int port, const char *unix_socket,

unsigned long client_flag)   链接数据库

参数:MYSQL *mysql  //指向数据库的对象指针

           const char *host  //主机名或IP地址,可以是 NULL 和 localhost (本地主机)

           const char *user  //登录数据库的用户,可以是 root 或 其他 user 名字(209user)

           const char *password  //用户登录密码

           const char *db   //数据库名称

           unsigned int port    //通常为 0, 或者是 TCP/IP 的 端口号(与第二个host 参数相关)

           const char *unix_socket   //通常为 NULL, 或者是 套接字 命名管道(与 host)

           unsigned long client_flag   // 通常为 0

返回值:成功:MYSQL*   //一个数据库对象地址(指针)

              失败:NULL (需要做错误处理,返回错误信息)

(3)const char *mysql_error(MYSQL *mysql)  数据库错误信息

参数:一个自己定义的指向数据库的对象指针 如:  MYSQL *m;

返回值:成功:字符指针(字符串)

              失败:NULL

(4)int mysql_query(MYSQL *mysql, const char *query)  需要运用SQL语句 插入数据

参数:MYSQL *mysql //一个自己定义的指向数据库的对象指针 如:  MYSQL *m;

           const char *query   //所有SQL语句(用双引号括起来)或字符指针

           如: “select *from table;”  char *sql;

返回值:成功:0

              失败:!0  (需要做错误处理,返回错误信息)

(5)MYSQL_RES *mysql_store_result(MYSQL *mysql)  获取查询结果

参数:一个自己定义的指向数据库的对象指针 如:  MYSQL *m;

返回值:成功:MYSQL_RES *  //结果集结构体指针,如:MYSQL_RES *res

               失败:NULL(需要做错误处理,返回错误信息)

(6)unsigned int mysql_num_fields(MYSQL_RES *res)  查询结果集的行数

参数:自己定义的指向结果集结构体指针,特指mysql_store_result() 返回值

    如:  MYSQL_RES *res;

返回值:成功:结果集行数

               失败:0

(7)MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *res) 查询结果集的字段

参数:自己定义的指向结果集结构体指针,特指mysql_store_result() 返回值

    如:  MYSQL_RES *res;

返回值:成功:MYSQL_FIELD *   //结果集中所有列的MYSQL_FIELD结构的数组

(8)MYSQL_ROW mysql_fetch_row(MYSQL_RES *res)  按行输出结果集

参数:一个自己定义的数据库对象 如:  MYSQL *m;

返回值:成功:MYSQL_ROW   //返回每行首地址,本质是数组

              失败:NULL(需要做错误处理,返回错误信息)

(9)void mysql_close(MYSQL *mysql)  关闭数据库

参数:一个自己定义的数据库对象 如:  MYSQL *m;

返回值:void

3、代码的实现

#include <iostream>
#include <mysql/mysql.h>
#include <iomanip>
using namespace std;

//数据库初始化
MYSQL* Init()
{
    MYSQL *m;
    m = mysql_init(NULL); //创建mysql对象并且初始化,返回对象的地址
    if(NULL == m)
    {
        cout<<mysql_error(m)<<endl;    //打印错误信息
        return NULL;
    }
    //数据库连接mysql_real_connect();
    m = mysql_real_connect(m,"localhost","209user","209","209test",0,NULL,0); 
    if(NULL == m)
    {
        cout<<mysql_error(m)<<endl;     //打印错误信息
        return NULL;
    }
    return m;
}

//插入数据
void InsertDatabase(MYSQL *m)
{
    if(NULL == m)
    {
        cout<<mysql_error(m)<<endl;     //打印数据库错误信息,mysql_error();
        return;
    }
    int ret = mysql_query(m,"set names utf8;");  //mysql_query()接口执行数据库语句
    if(ret != 0)
    {
        cout<<mysql_error(m)<<endl;     //打印错误信息
        return;
    }

    char sql[128] = {0};
    int id,age;
    char name[32] = {0},birth[32] = {0},sex[32] = {0},tel[32] = {0};

    cout<<"请输入编号,姓名,出生日期,年龄,性别,电话:"<<endl;
    cin>>id>>name>>birth>>age>>sex>>tel;
    sprintf(sql,"insert into student (id,name,birth,age,sex,tel) values(%d,'%s','%s',%d,'%s','%s');",id,name,birth,age,sex,tel);

    
    ret = mysql_query(m,sql);  //mysql_query()接口执行数据库语句
    if(ret != 0)
    {
        cout<<mysql_error(m)<<endl;  //打印错误信息
        return;
    }
    cout<<"插入成功"<<endl;
}

//查询数据库
void FindDataBase(MYSQL *m)
{
    if(m == NULL)
    {
        return;
    }
    mysql_query(m,"set names utf8");
    int ret = mysql_query(m,"select *from student"); //mysql_query()接口执行数据库语句
    if(ret != 0)
    {
        cout<<mysql_error(m)<<endl;
        return;
    }

    MYSQL_RES *res = mysql_store_result(m); // mysql_store_result()获取查询的结果
    if(NULL == res)
    {
        cout<<mysql_error(m)<<endl;
        return;
    }

    //获取字段数
    int field = mysql_num_fields(res);      //mysql_num_fields()获取字段个数
    cout<<field<<endl;
    
    //获取字段名
    MYSQL_FIELD *f; 
    while(f = mysql_fetch_field(res))  //mysql_fetch_field()获取字段名
    {
        cout<<setw(20)<<setiosflags(ios::left)<<f->name;    //打印字段名
    }
    cout<<endl;

    //获取每一条记录
    MYSQL_ROW r;    //数组
    int i;
    while(r = mysql_fetch_row(res))  //mysql_fetch_row()获取每行记录
    {
        for(i = 0 ; i < field;i++)
        {
            cout<<setw(20)<<setiosflags(ios::left)<<r[i];
        }
        cout<<endl;
    }


}

int main(int argc, char const *argv[])
{
    MYSQL *mysql;   //创建mysql对象


    mysql = Init();
    if(NULL == mysql)
    {
        cout<<"初始化Mysql失败"<<endl;
    }
    else
    {
        cout<<"链接数据库成功"<<endl;
    }

    //插入数据
    //InsertDatabase(mysql);


    FindDataBase(mysql); //查询数据库
    
    mysql_close(mysql);  //关闭数据库
    
    return 0;
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值