数据库
目录
[3、数据库的进入和退出(前提 你的密码更改过了)](#3、数据库的进入和退出(前提 你的密码更改过了))
[8、alter 指令](#8、alter 指令)
引入
数据库是什么东西?
数据库是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.
-- 对比文件存储的优势:查找数据快
数据库中的关系:
最外面的是数据库
数据库中包含多张表
表上使用来存放数据
-- 一些术语:
1、先安装数据库
-
1、服务器的安装:sudo apt-get install mysql-server
-
2、客户端的安装:sudo apt-get install mysql-client
-
3、开发包的安装:sudo apt-get install libmysqlclient-dev
-
3、安装结果检测:sudo netstat -tap | grep mysql
2、数据库设置密码
第一次进入数据库
安装好之后在终端上输入
sudo mysql 进入数据库
有如下显示表示数据库安装成功
mysql 的提示符 用来输入指令的地方
- !!!!注意输入的指令必须要以分号结尾;
-- 然后进行密码的修改
alter user 'root'@'localhost' identified with mysql_native_password by '新密码';
那么修改 root 用户密码为 1 的命令是:
alter user 'root'@'localhost' identified with mysql_native_password by '1';
-- 出现 Query OK 表示该指令执行成功 我们的密码设置为了 1
3、数据库的进入和退出(前提 你的密码更改过了)
-
1、退出数据库
-
2、进入的数据库方式就改变了
使用指令 mysql -u root -p
数据库的基本操作
-- ctrl + L为清屏操作
1、显示所有的数据库
- 指令: show databases;
2、创建数据库
- 指令:create database xxx;
- xxx 为库名
3、删除数据库
- 指令: drop database 数据库名;
4、选择数据库
-- 我们在对数据库进行操作之前必须要先进行选择,执行了这个指令之后,之后的指令都是对这个数据库的操作
- 指令: use 数据库名;
在数据库中对表进行操作
1、查看当前数据库中的表
- 指令: show tables;
-- 数据库中有表会显示出来 否则会显示 empty
2、在数据库中进行表的创建
创建一个表需要表名 表头名 以及数据类型
表名和表头是我们根据需要来选择的
首先我们需要了解表中的数据类型
- 基本的存放值的数据类型
int 整型 4 个字节
float 单精度浮点型 4 个字节
double 双精度浮点型 8 个字节
-
用来存放日期的类型
-
用来存放字符串的数据类型
char 字符型 0~255 字节
char(n) 为可以存储 n 个字符 等同于 char [n]
-- 创建表的指令
create table 表名(表头 1 数据类型,表头 2 数据类型,.....);
比如我需要一个表用来存放 名字 年龄 性别
create table stu(name char(30),age int,sex char(10));
3、对表进行数据的插入
- 指令:insert into 表名 values(数据 1,数据 2,数据 3);
插入一组完整的数据
数据为字符需要用单引号引起来
insert into 表名 values('小明',9,'man');
insert into 表名(表头 1,表头 2,...) values(对应表头的数据);
插入指定的数据内容
4、查找表中的数据
- 指令:select * from 表名(where 语句);
- 显示表中的所有的数据
- 只显示对应的列数据
select 表头 1,表头 2... from 表名 (where 语句);
- 条件判断语句 where
where 后面添加需要的条件
表头 条件符号 指定的值
条件符号: = 找相等的值,>,<,!= 不相等值
需要判断多个条件使用 and 可以与一下,还有or或
5、对表中的数据进行更新操作
- 指令:update 表名 set 表头 1= 新值,表头 2=新值 (where 语句);
6、对表中的数据进行删除
- 指令:delete from 表名 where 语句
7、查看表的信息指令
- 指令: show columns from 表名;
8、alter 指令
- 可以实现对表的数据类型的更改
- 对表进行表头的增加和删除
1、对表头的数据类型进行更改
- 指令: alter table 表名 modify column 表头 新数据类型;
2、对表进行新列的添加
- 指令:ALTER TABLE 表名 ADD COLUMN 新表头 数据类型;
在程序中如何对数据库进行操作
--!!!perror 函数无法获取 mysql 相关函数的执行失败和成功
-- 头文件
- #include "mysql/mysql.h"
1、初始化数据库对象
-- 在程序中所有数据库操作都需要基于一个 MYSQL 类型的变量
-- 通过该函数可以对其进行初始化操作
- MYSQL *mysql_init(MYSQL *mysql)
-- 函数的作用:
- 对数据库对象进行初始化
-- 函数的参数:
- mysql:指针指向要进行初始化对象的地址
-- 函数的返回值:
- 成功 返回初始化好的对象的地址
- 失败 返回 NULL
2、对数据库进行连接操作
- 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 clientflag)
-- 函数的作用:
- 根据传入的参数对指定的数据库进行连接
-- 函数的参数:
MYSQL *mysql:填写初始化好的数据库对象
char *host:"localhost" 连接到的数据库的主机名
char *user:"root" 用户名
char *passwd:"1" 密码
char *db:"数据库名" 填写要连接的数据库名
int port:0
*unix_socket:NULL
long clientflag:0
-- 函数的返回值:
- 成功返回 数据库对象的地址
- 失败返回 NULL
3、获取数据库操作失败的信息函数
-- 效果等同于 perror();
-- 函数原型:
- const char *mysql_error(MYSQL *mysql)
-- 函数的参数:
- MYSQL *mysql:填写数据库对象的地址
-- 函数的返回值:
- 如果刚刚的数据库操作失败了 返回错误信息字符串的首地址
- 如果成功返回 空字符串
4、运行数据库指令函数
-- 函数原型
- int mysql_query(MYSQL *mysql, const char *q)
-- 函数的作用
- 根据第二个参数填写指令对数据库进行操作
-- 函数的参数:
- MYSQL *mysql:数据库对象
- char *q:填写字符串 运行字符串中所写的指令
-- 函数的返回值:
-
成功返回 0
-
失败返回 非零
-
操作的数据的过程中可以使用sprintf 函数来组合我们想要的数据库指令
通过scanf输入数据,那怎么写在语句中呢?
用sprintf -- 将字符串变成我们想要的格式,作用:格式化字符串
5、在程序中获取表的数据
- 1、你需要通过 mysql_query 来运行一下select 查找语句 (插入、更新、删除无法使用)
- 2、将刚刚运行的结果用下面这个函数进行保存方便我们进行数据的查找 -- 函数原型 -MYSQL_RES *mysql_store_result(MYSQL *mysql)
-- 函数的作用:
- 保存刚刚运行的 select 指令的结果
-- 函数的参数:
- MYSQL *mysql:数据库对象
-- 函数的返回值:
- 成功返回一个 MYSQL_RES 类型的地址,这个地址中有我们的一些数据
- 失败返回 NULL
6、获取结果的行数和列数
-- 获取行数
-- 函数原型
- uint64_t mysql_num_rows(MYSQL_RES *res)
-- 函数的作用
- 通过该函数可以获取结果的行数
-- 函数的参数:
- res:填写 mysql_store_result 的返回值
-- 函数的返回值: 成功返回 结果的行数 >=0 失败返回 -1
-- 获取列数
-- 函数原型
- uint64_t mysql_num_fields(MYSQL_RES *res)
-- 函数的作用
- 通过该函数可以获取结果的列数
-- 函数的参数:
- res:填写 mysql_store_result 的返回值
-- 函数的返回值: 成功返回 结果的列数 >=0 失败返回 -1
7、对保存的结果进行取一行内容函数
-- 函数原型
- MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
-- 函数的作用
- 从保存的结果中取一行内容出来
-- 函数的参数
- MYSQL_RES *result:填写 mysql_store_result 的返回值
-- 函数的返回值:
- 通过该函数从数据库中取出来的数据全部是字符串类型,所有数据都是字符串类型,例如name = 'pp'。->"pp"
- 成功 返回一个二级指针 通过取下标的方式可以获取数据的首地址
-- 相当于指针数组,数组里面存的是字符串的首地址 - 失败 返回 NULL
-- 循环遍历就是获取每一行的数据
8、对保存的结果进行取一列内容函数
-- 函数原型
- MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
-- 函数的作用
- 从保存的结果中取一列内容出来
-- 函数的参数
- MYSQL_RES *result:填写 mysql_store_result 的返回值
-- 函数的返回值:
- 成功 返回一个 MYSQL_FIELD 类型的指针
- 失败 返回 NULL
-- 获取表头
9、对保存的结果进行释放操作
-- 保存的运行结果需要进行释放操作,不然会一直占用空间
- void mysql_free_result(MYSQL_RES *result)
-- 函数的参数:
- MYSQL_RES *result:填写保存的结果的指针
10、关闭数据库连接
- void mysql_close(MYSQL *mysql)
-- 函数的参数:
- MYSQL *mysql:填写数据库对象的地址
-- 链接库
连接到指定的数据库
-- 与perror一样,如果没有错误信息就不会打印
-- 再次创建同样的表,就会执行失败
-- 通过scanf输入数据,那怎么写在语句中呢, 用sprintf -- 将字符串变成我们想要的格式,作用:格式化字符串
-- 查看表中的数据 -- select * from 表名
-- 是保存运行结果(上一个指令运行的结果,所以这个函数之前一定要有指令运行)
要想在程序中获取表的数据 -- 先运行mysql_query("select * from 表名") 然后将运行的结果进行保存(这个函数不适用。。。) -- mysql_store_result() -- 将查询结果保存到结果集中,返回结果集指针
-- mysql_num_rows() -- 获取结果集中的行数(不算表头)
-- mysql_num_fields() -- 获取结果集中的列数
-- mysql_field_name() -- 获取结果集中指定列的列名
-- mysql_fetch_row() -- 从结果集中获取一行数据,返回一个指针数组
-- mysql_fetch_array() -- 从结果集中获取一行数据,返回一个关联数组
-- mysql_fetch_assoc() -- 从结果集中获取一行数据,返回一个关联数组
-- mysql_fetch_object() -- 从结果集中获取一行数据,返回一个对象
-- mysql_fetch_field() -- 获取结果集中指定列的信息,返回一个对象
-- mysql_fetch_row() -- 从结果集中获取一行数据,返回一个指针数组
-- mysql_free_result() -- 释放结果集
-- mysql_close() -- 关闭数据库连接
-- mysql_error() -- 获取最后一次执行的错误信息
--
-- 更新数据的前提是不是要先知道表中的数据