目录
一、知识点
1.冗余是提高数据可靠性最好的方法;
热备用(??带电拔插的USB U盘)
2.数据库三级模式、两层映射、两个独立性(逻辑独立性/物理独立性 )
1)用户级数据库、概念级数据库、物理级数据库
2)外模式是模式的子集,保证数据库安全性;
一个模式有多个外模式,一个应用程序只能有一个外模式;
3.数据库相当于一个文件夹子;database.db需要建立文件才有意义即数据库至少要一个表;
【相当于github建立文件夹的方式】
二、SQL语句
1)外键概念:说明数据库里至少有两个表了
2)select-基本结构
3)update-基本结构
4)create-基本结构:【temp创建临时表,会自动删除,不常用】【使用时加:if not exists】
5)查询条件:<> 等同于 !=
6)空值不是一个确定的值,所以不可以用等于或不等于来比较,空值只能说是空值(IS NULL);
insert into contract values (NULL, 'name'); // 这里NULL是数据类型,主键自增写法;
7)字符匹配LIKE
8)ASC升序
9)SQL提供计算函数:count(sno) sno不为空值的记录数
三、sqlite3简单函数
1.C语言使用数据库
1)#include <sqlite3.h>
2)gcc -lm -lsqlite3 -lpthread
2.sqlite3_open()
3.sqlite3_exec()
1)para可以传一个值给callback,用户可以在不改变原型callback(),而自定义回调函数;
2)回调函数每次处理一条记录,select找到一条回调函数处理一条;
所以回调函数末尾要加一个return SQLITE_OK,每次都判断一下;
4.不带回调函数的使用方法,相当于malloc一个二维表再free(这里二维表实际是一维数组);
sqlite3_get_table()和sqlite3_free_table()
四、C文件补充
1. fgets() 和 gets() 一样,最后的回车都会从缓冲区中取出来。只不过 gets() 是取出来丢掉,而 fgets() 是取出来自己留着。但总之缓冲区中是没有回车了!所以与 gets() 一样,在使用 fgets() 的时候,如果后面要从键盘给字符变量赋值,那么同样不需要清空缓冲区。下面写一个程序验证一下。
# include <stdio.h>
int main(void)
{
char str[30];
char ch;
printf("请输入字符串:");
fgets(str, 29, stdin);
printf("%s", str); //后面不要加'\n'
scanf("%c", &ch);
printf("ch = %c\n", ch);
return 0;
}