Linux系统编程阶段:MySQL数据库相关知识点和函数。
1.数据库的作用和介绍
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
数据库里面的数据的增删改查速度比文件操作要快的多。
2.mysql的安装
sudo apt-get install mysql-server:服务端安装
sudo apt-get install mysql-client:客户端安装
sudo apt-get install libmysqlclient-dev:相关的库
sudo service mysql start:启动数据库
sudo service mysql stop:关闭
注意点:
在安装的过程中会弹出一个框 ,让你输入数据库的root用户的密码
这个密码一定不要选择跳过 而要设置一个密码
这个密码建议大家都设置成1 。
3.mysql的进入和退出
登录的时候 ,有两种情况
->假如在安装的时候 成功输入了密码
mysql -u root -p
->假如在安装的时候 没有设置密码
1)切换到root用户 Ubuntu的root用户
2)在root用户权限下
输入 :mysql -u root
退出:quit 退出数据库
4.mysql的数据类型
布尔类型:只有0和1
字符类型:
数值类型:整型和浮点型
时间类型:
5.mysql常用词汇
datebase:数据库
table:表
column:列
from:来自
select:选中
*:所有
show:显示
insert:插入
drop:删除
change:更改
update:更新
6.mysql的显示
执行sql语句的时候,要执行的语句的最后加上一个;
显示所有的数据库:show databases;
要想使用某个数据库,在终端输入:use 数据库的名字
eg:use mydb;
显示数据库里所有的表:show tables from 数据库名字;
显示表里的所有的列的信息:show columns from userinfo;
7.mysql的查找
查找表里的所有的数据:select * from 表的名字;
查找表里的某一项的信息:
select name from 表的名字:查看表里的name这一列
查找满足某一个条件的数据:
select * from userinfo where name="duanweizheng" and Password="123";
8.mysql的插入和创建
创建一个数据库:create database mysql_203;
创建一张表:
reate table 表名 (列名 列的数据类型,列名 列的数据类型,列名 列的数据类型,列名 列的数据类型,列名 列的数据类型);
eg:CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
插入数据:
插入的时候必须要跟列的信息一一对应
插入的时候 假如某一项是没有信息的,要填NULL
eg:insert into 表名values("wangcai","lisi","qiutian","w","2022-7-18",NULL);
9.mysql的修改
修改,主要是修改表的名字以及列的名字。
改表的名字:alter table pet rename mypet;
修改列的名字:
alter table 表名 change 旧的列名 新的列名 新的列的类型;
eg:alter table mypet change sex new_sex CHAR(10);
新增列:
alter table 表名 add 要新增的列的名字 要新增的列的类型;
eg:alter table mypet add test char;
删除列:alter table 表名 drop 要删除的列的名字
eg:alter table mypet drop test;
10.mysql的更新
主要是用来更新数据库的数据:
update 表名 set 某一列=“” where 某个条件="";
eg:update mypet set name="ahuang" where name="tugou";
11.mysql的删除
数据库的删除 drop
删除数据库:drop database 数据库的名字
删除某一个表:drop table 表名
删除某一条数据:delete from 表名 where 判断条件
12.mysql的排序
ASC 表示升序 默认; DESC 降序
select * from mypet order by name;
select * from mypet order by name ASC; //表示升序排列
select * from mypet order by name DESC;//表示降序排列
三、数据库相关C语言库函数
1.mysql_real_connect():链接数据库
头文件:mysql/mysql.h
原型:
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的核心结构体,需要我们自己申请一个这样的结构体,变量传给他,这个变量需要调用mysql_init函数来初始化这个结构体
const char *host:主机 固定填 localhost 本地主机
const char *user:用户 root
const char *passwd:密码 1
const char *db:要用的数据库的名字
unsigned int port:固定填 0
const char *unix_socket:NULL
unsigned long client_flag : 0
返回值:
成功返回 MYSQL结构体的指针
失败返回 NULL
2.int mysql_query():在程序里执行sql语句
头文件:mysql.h
原型:int mysql_query(MYSQL *mysql, const char *query)
参数:
MYSQL *mysql :连接数据库返回的数据库的指针
const char *query:字符串,你要执行的sql语句
比如要查找数据:select * from mypet;
返回值:成功返回 0 失败返回 非零值
3.mysql_store_result():获取sql语句执行后的结果的集合
头文件:mysql.h
原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)
参数:MYSQL *mysql:数据库的核心结构体的指针
返回值:成功返回,结果集合的结构体
返回的结果集合结构体,一般要借助其他的函数来取里边的值
获取列数:unsigned int mysql_num_fields(MYSQL_RES* res)
获取行数:my_ulonglong mysql_num_rows(MYSQL_RES *result)
获取一行的信息:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
第一次调用 返回第一行内容
第二次调用 返回第二行的内容
获取列的信息:MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
使用数据库相关函数注意事项:
1)编译的是要指定链接库的名字 -l(小写L)-lmysqlclient
2)指定库的路径 -L(大写L) -L /usr/lib/mysql/plugin
4.mysql_free_result():释放数据库结果结构体
头文件:mysql.h
原型:void mysql_free_result(MYSQL_RES *result)
参数:MYSQL_RES *result:结果集合结构体指针
返回值:无
5.mysql_close():关闭数据库的链接
头文件:mysql.h
原型:void mysql_close(MYSQL *mysql)
参数:MYSQL *mysql:mysql的核心结构体指针
返回值:无
练习代码参考:
#include <stdio.h>
#include <mysql/mysql.h>
MYSQL mydata;
MYSQL *ret=NULL;
int main()
{
int a=0;
//1.初始化数据库的核心结构体
ret = mysql_init(&mydata);
//2.连接数据库
ret=mysql_real_connect(ret,"localhost","root","1","my_718",0,NULL,0);
if(ret == NULL)
{
printf("数据库连接失败!\n");
return -1;
}
//3.执行sql语句
a=mysql_query(ret,"select *from whs");//查找表里的所有的数据
if(a!=0)
{
printf("数据查询失败!\n");
return -1;
}
//4.获取查询的数据库的信息
MYSQL_RES *data=NULL;
data = mysql_store_result(ret);
if(data == NULL)
{
printf("获取数据库的结果异常\n");
return -1;
}
//5.获取行数和列数
unsigned int lie,hang;
lie=mysql_num_fields(data);
printf("一共有%d列\n",lie);
hang=mysql_num_rows(data);
printf("一共有%d行\n",hang);
//6.获取列的信息
MYSQL_FIELD *line_msg=NULL;
int i;
for(i=0;i<lie;i++)
{
line_msg=mysql_fetch_field(data);
printf("%s\t",line_msg->name);
//printf("table :%s\n",line_msg->table);
}
printf("\n");
//7.获取每一行的内容
MYSQL_ROW myhang;
int j=0;
for(i=0;i<hang;i++)
{
myhang=mysql_fetch_row(data);
{
for(j=0;j<lie;j++)
{
printf("%s\t",myhang[j]);
}
printf("\n");
}
}
//8.释放空间
mysql_free_result(data);
//9.断开连接
mysql_close(ret);
return 0;
}
运行结果展示: