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;
}