一、数据库的有关概念
1.数据库
存放数据的仓库,由存放数据的文件和管理数据的软件两部分构成。
2.数据库管理系统
主要完成对数据库的操作与管理功能。比如:对数据的增删改查,对数据库用户的管理,权限管理等。
3.mysql
mysql数据库是一种C/S(客户端和服务端)模型,需要先启动服务器(mysqld),然后客户端(mysql)要通过用户名密码登录连接到服务器(使用TCP建立连接),连接成功后才能对数据进行操作。mysql使用的端口是3306。
二、数据库的基本操作
1.数据库服务的启动与停止(管理员权限)
(1)启动服务器 service mysql start
(2)重启服务器 service mysql restart
(3)停止服务器 service mysql stop
(4)查看服务状态 service mysql status
2.登录命令
mysql -u用户名 -h主机地址(省略代表本机) -p密码
3.退出数据库
exit/quit/ctr+d
4.查看所有数据库
show databases;
5.显示数据库的版本
select version();
6.显示时间
select now();
7.创建数据库
create database 数据库名
8.选择使用数据库
use 数据库名
9.查看当前使用的数据库
select database()
10.删除数据库
drop database 数据库名
11.查看数据库中的所有表
show tables;
12.创建表
create table 数据库表的名字(字段 类型 约束)
eg: create table student( id int primary key not null,name varchar(30));
13.查看表中的数据
查看所有数据:select * from 表名
查看部分数据: select 字段 from 表名 where 字段=值
14.插入数据
insert into 表名 values(字段1的值,字段2的值..........)
15.更新数据
update 表名 set 字段=值 where 字段=值
16.删除数据
删除全部行:delete from 表名
删除指定行:delete from 表名 where 字段=值
17.删除表
drop table 表名
三、使用C语言连接mysql数据库
1.前提
已安装c/c++的开发库
2.步骤
①初始化连接句柄
②连接数据库
③执行sql语句
④关闭连接
3.代码理解
cpp
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<mysql/mysql.h>
#include<string.h>
int main()
{
//定义连接句柄,并初始化
MYSQL mysql_con;
MYSQL* mysql=mysql_init(&mysql_con);
if(mysql==NULL)
{
printf("init err\n");
exit(1);
}
//连接数据库服务器
mysql=mysql_real_connect(mysql,"127.0.0.1","root","111111","2408_db",3306,NULL,0);
if(mysql==NULL)
{
printf("连接失败\n");
exit(1);
}
printf("连接成功\n");
//插入语句
//char* sql="insert into student values(1002,'小顾',20)";
//修改语句
//char* sql="update student set age=25 where id=1001";
//删除语句
//char* sql="delete from student where id=1002";
//查询
char* sql="select name from student where id =1001";
//执行sql语句
int n=mysql_query(mysql,sql);
if(n!=0)
{
printf("执行sql语句失败\n");
exit(1);
}
printf("执行sql语句成功\n");
//获取查询到数据的结果集
MYSQL* r=mysql_store_result(mysql);
if(r==NULL)
{
printf("获取结果集失败\n");
exit(1);
}
//获取结果集中有多少条记录
int num=mysql_num_rows(r);
if(num==0)
{
printf("0条记录\n");
mysql_free_result(r);
exit(1);
}
printf("共查到%d的记录\n",num);
//获取记录的列数
int count=mysql_field_count(mysql);
printf("每条记录有%d列\n",count);
//循环获取每一条记录
for(int i=0;i<num;i++)
{
//提取结果集中的一行记录
MYSQL_ROW row=mysql_fetch_row(r);
//第一列 row[1] 第二列 row[2]
for(int j=0;j<count;j++)
{
printf("%s ",row[j]);//以字符串的形式打印出来是因为服务器响应客户端时,使用TCP协议以send发送数据
}
printf("\n");
}
//释放结果集
mysql_free_result(r);
//关闭连接句柄
mysql_close(mysql);
exit(0);
}
四、事务
1.事务的定义
事务是数据库管理系统中的一个操作序列,这些操作作为一个整体要么全部成功,要么全部失败。
2.事务的基本特性(ACID)
(1)原子性:事务中所有操作要么全部完成,要么全部不做。
(2)一致性:事务执行前后,数据库必须保持一致状态。
(3)隔离性:多个事务并发执行时,相互之间的操作不会互相干扰,表现为一个事务的中间状态对其他事务是不可见的。
(4)持久性:一旦事务提交,其结果是永久性的,即使系统崩溃也不会丢失。
3.事务的隔离级别
(1)读未提交 :事务可以读取未提交事务的更改,可能出现脏读。
(2)读已提交:事务只能读取已提交事务的更改,避免脏读,但可能出现不可重复读。
(3)可重复读 :在一个事务内多次读取同一数据保证一致,避免不可重复读,但可能出现幻读。
(4)串行化 :最高隔离级别,通过强制事务串行执行,完全避免幻读,但性能较低。
五、索引
1.索引的定义
索引(Index)是数据库中用来加快数据查询速度的一种数据结构。它类似于书籍的目录,帮助数据库快速定位到需要的数据行,而不必扫描整个表。
2.索引的作用
(1)提升查询效率
(2)加快数据检索速度
3.索引的缺点
(1)增加写操作(插入、更新、删除)的成本,因为每次操作都要维护索引。
(2)占用存储空间。
六、视图
1.视图的定义
视图是数据库中的一种虚拟表,本身不存放数据,数据来源于基本表。
2.使用视图的原因
(1)简化复杂查询:将复杂的多表联结或筛选条件封装在视图中,调用方便。
(2)提升安全性:只暴露部分数据,隐藏敏感信息,控制用户权限。
(3)提供数据抽象:隐藏底层表结构,减少应用与数据库的耦合。