1.20号网络

数据库基本概念

能够输入计算机并能被计算机程序识别和处理的信息集合数据库 (Database)

数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合

常用的数据库

1)大型数据库Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统,支持包Linux在内的一系列平台。中型数据库Server是微软开发的数据库产品,主要支持windows平台。

2)小型数据库mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司,2008年被Sun公司收购,开放源码。

3)基于嵌入式的数据库

基于嵌入式Linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDBFirebird是关系型数据库,功能强大,支持存储过程、SQL兼容等SQLite关系型数据库,体积小,支持ACID事务Berkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中 eXtremeDB是内存数据库,运行效率高

sqlite3命令语句

sqlite数据库创建

sqlite3   xxxxx.db

如果sq.db存在则直接打开sq.db数据库,如果不存在则先创建再打开;

系统命令

系统命令,需要以 . 开头,不需要以 ; 结尾

.quit 退出数据库

.exit 退出数据库

.help 显示帮助信息,获取所有系统命令; ​

.table 查看当前数据库下的所有表格;

.schema 查看表的结构

sql语句

以分号(;)结尾;不区分大小写;

没有char*类型,用char类型代替

记录:是某一行信息

字段:某一列信息

创建表格

create table 表名 (字段名 数据类型, 字段名 数据类型);

create table if not exists 表名 (字段名 数据类型, 字段名 数据类型); ​

eg: CREATE TABLE stu (id int, name char, score float);

CREATE TABLE if not exists stu1 (id int, name char, score float); ​

注意:数据库不支持严格的数据类型检查,数据类型写错了,创建是能够成功的,不会有错误提示;

删除表格

drop table 表名; ​

eg: drop table stu1;

插入记录

字符串类型可以使用单引号,也可以使用双引号 ​

1) 全字段插入 insert into 表名 values (数据1, 数据2, 数据3);

eg: INSERT INTO stu VALUES (2, 'ls', 99);

INSERT INTO stu VALUES (1, "zs", 59);

注意: 1.数据输入的顺序要与创建时候字段的顺序一致;

2) 部分字段插入 insert into 表名 (字段名1, 字段名2) values (数据1, 数据2);

eg: INSERT INTO stu (id, name) values (9, 'ww');

注意: 1.数据的顺序要与指定的字段名1,字段名2对应;

查看记录

1) 查看所有记录
    select * from 表名;
    eg:
        SELECT * FROM stu;
        
2) 查看某几行
    select * from 表名 where 限制条件;
    逻辑与 and     逻辑或 or
    eg:
        SELECT * FROM stu WHERE id<3 AND score>90;
        SELECT * FROM stu WHERE id<2 OR id>3;
    
3) 查看某几列
    select 字段1, 字段2 from 表名;
    select 字段1, 字段2 from 表名 where 限制条件;
    eg:
        SELECT id, name FROM stu;
        SELECT id, name FROM stu WHERE score>90;

修改记录

update 表名 set 字段=数值 where 限制条件;

eg:
    UPDATE stu SET score=60 WHERE id=1;
注意:该语句中的where表明去修改指定的记录,如果没有加where,则表明将所有记录的该值都更新

删除记录

delete from 表名 where 限制条件;

eg:
    DELETE FROM stu WHERE id=1;
    delete from stu;    删除表格中的所有数据;

主键(primary key)

primary key 主键;
create table 表名(字段名 数据类型 primary key, 字段名 数据类型 );
primary key主键:唯一标识表格中的每一条记录;
            例如:id字段为主键,当表格中有id==1的记录时,不允许再插入id为1的记录了;
eg:
    CREATE TABLE stu (id int PRIMARY KEY, name char, score float);

注意:主键的值必须唯一。每一张表格都应该设置一个主键,而且只能设置一个。

拷贝

从a中拷贝所有数据到b中:
    create table b as select * from a;
从a中拷贝指定字段到b中:
    create table b as select 字段,字段,字段 from a;

 CREATE TABLE stu1 AS SELECT * FROM stu;
 CREATE TABLE stu2 AS SELECT id, name, score FROM stu;

增加列

alter table 表名 add column 字段名 数据类型;
alter table stu add column score int;

修改表名

alter table 旧表名 rename to 新表名;

alter table stu rename to stuinfo;

修改字段名(列名)

不支持直接修改列名
1.将表重新命名(a改成b)
    alter table stuinfo rename to stu;
2.新建修改名字后的表(新建一个a)
    create table stuinfo (name char, age1 int, sex char, score int);
3.从旧表b中取出数据,插入到新表a中;
    insert into stuinfo select * from stu;

删除列

不支持直接删除列;
1.创建一个新表b,并复制旧表a需要保留的字段信息;
    create table stu as select name, age1, sex from stuinfo;
2.删除旧表a;
    drop table stuinfo;
3.修改新表b的名字a;
    alter table stu rename to stuinfo;

sqlite3 API

头文件: #include

编译时候要加上-lsqlite3

gcc a.c -lsqlite3

sqlite3_open

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */ 
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
功能:打开一个数据库,如果数据库不存在,则创建一个数据库
参数1:要打开的数据库的名字,是一个字符串
参数2:数据库操作句柄,是一个二级指针,需要我们传入一级指针的地址,如果打开数据库成功,则数据库指针由该参数返回
返回值:成功返回SQLITE_OK,失败返回一个错误码(非linux的错误码),可以使用sqlite_errmsg来获取错误信息,由sqlite3_errcode返回错误码值
注意:无论打开数据库是否成功,在不使用数据库时都应该使用sqlite3_close将其关闭

sqlite3_close

int sqlite3_close(sqlite3*);

功能:关闭数据库,断开句柄所拥有的资源

参数:数据库指针

返回值:成功返回SQLITE_OK,失败返回其他错误码

sqlite3_errmsg

const char *sqlite3_errmsg(sqlite3*);

功能:通过出错的句柄返回错误信息

参数:出错的句柄

返回值:对应的错误信息,是一个字符串

sqlite3_errcode

int sqlite3_errcode(sqlite3 *db)

功能:通过错误句柄返回错误码

参数:错误句柄

返回值:错误码

sqlite3_exec

int sqlite3_exec(
  sqlite3* db,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *arg,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);
功能:调用该函数,执行sql语句
参数1:已经被打开的数据库句柄
参数2:要执行的sql语句
参数3:回调函数,主要用于数据库查找时,处理查找的结果集的函数,如果不需要处理sql语句的结果,则填NULL即可
参数4:参数3的第一个参数
参数5:错误信息
返回值:成功返回SQLITE_OK,失败返回其他错误码

回调函数

int callback(void* arg,int cols,char** value_text,char** value_name)
功能:对执行sql语句后的每一条记录,执行该函数,函数功能可以由用户自定义
参数1:主调函数传递的参数,就是sqlite3_exec的第四个参数,该参数可以用于主调函数和回调函数之间数据交流
参数2:记录查询结果的列的个数
参数3:查询结果数据的起始地址
参数4:查询结果的表头的起始地址
返回值:成功返回0,失败返回错误码

你可能感兴趣的:(笔记)