数据库笔记

数据库:  DBMS


分类:
大型        中型     小型
   oracle    ms-sqlserver       access
     db2  mysql sqlite3



嵌入式数据库: sqlite3


特点:
开源  体积小  可移植  容量大2T


总代码行约 3万行C 语言代码;




sqlite3的安装:
1、在线安装: sudo apt-get install sqlite3


2、源码安装:
www.sqlite3.com
tar -zxvf sqlite-autoconf-3081002.tar.gz 
cd sqlite-autoconf-3081002
./configure
make
make install


判断是否安装成功:
sqlite3 --version
3.8.10.2 2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4


3、数据库的简单使用:
sqlite3  test.db  ===>创建并打开test数据库;


sqlite3>  数据库终端提示符号,表示进入数据库管理界面


sqlite3> .help  显示当前数据库的所有默认命令
sqlite3> .q  退出
如果出现 ...>  表示命令尚未输入完毕,用 ';' 结束命令


4、数据库设计:
4.1 创建数据库
sqlite3  xxx.db
touch    xxx.db


4.2 创建数据库表 ===》行列式表格,可以创建多个;


首先登录数据库  sqlite3  xxx.db
使用SQL 语句创建表:
create table 表名(列名 类型, 列名 类型,....);
eg:
sqlite3> create table user(id int,name text, pass text);

注意:SQL语句必须以";"结尾表示语句结束;
数据类型常用的有: int  整形   real 浮点数
  text 文本   blob 二进制


  
比如在test表里加个age字段,类型为int


        alter table test add age int
  
  
====》SQL 语句: 结构化查询语言 ==》关系型数据库的通用操作语言;
====》.tables :  sqlite3中所有以.开头的命令都是内置系统命令,否则
按照SQL语句执行;


.schema user  命令是列出表结构的系统内置命令;


4.3 表的增加 删除 修改 查询操作:SQL 语句
增:insert  into 表名(列名,列名,...) values (值1,值2,...);
eg: insert into user(id,name,pass) values (1,"zhangsan","123456");
   insert into user values(2,"abc",123);
insert into user(id) values (3);


  //主键 自动增长
 create table login (id INTEGER PRIMARY KEY AUTOINCREMENT,name text);
 
 
查:select 列名  from  表名称 [条件];
eg: select * from user;
select id from user;
select id,pass from user;
select * from user where id = 1;
select * from user where  id > 2;
select * from user where  id > 1 and name = "abc";
select * from user where  id < 10 or id > 20;


思考题:
设计一个学生表,插入若干个学生记录,使用select语句
查询该表中成绩大于60的所有学生的姓名;








select name from stu where score >=60;














修:update  表名称 set 列名 = 值 [条件];
eg:
update  user  set pass = "8888" where id = 1;
update user set pass = "777" ; ///注意 会全表修改为777密码
update user set pass = "666" where id>3; ///注意:会修改所有>3的id记录数据
update user set pass = "666" ,name = "abc" where id = 1;




删: delete from 表名称 [条件];
eg: delete from user where id = 1; ///正常删除一行记录
delete from user where  id >3;
delete from user where  id > 3 and score <60;
    delete from user;   ///注意:全表数据清空
drop table user;    ///注意:表删除


数据库的表的增、删、修、查:基本格式:
insert 
delete 
update
select
=======>SQL 语法手册;




数据库的表批量处理:数据库脚本 ===》xxx.sql


1、数据库的脚本导出:
sqlite3  xxx.db  .dump > xxx.sql


2、数据库的脚本导入:
sqlite3  xxx.db  < xxx.sql


练习:
编写一个数据库脚本,可以一次向指定的学生表
中插入100 条不同记录并可以手工在数据库中查看;


mysql 支持如下变更
 declare @i int
      set @i=1
       while @i<30
            begin
             insert into test (userid) values(@i)
            set @i=@i+1
           end

=============================================================
sqlite3 的编程接口:


1、sqlite3 是一个三方库形式引入系统,所以必须有如下两个规则:
1.1 编写代码必须包含其默认的库头问: #include <sqlite3.h>
1.2 编译代码必须加载其默认的库支持: gcc xxx.c -l sqlite3




2、sqlite3对外提供的接口框架如下
打开数据库表  ===》操作表(增,删...) ===>关闭数据库
sqlite3_open()     sqlite3_get_table()       sqlite3_close()
  sqlite3_exec()






打开:
int sqlite3_open(
const char *filename,   /* Database filename (UTF-8) */
sqlite3 **ppDb          /* OUT: SQLite db handle */
);


功能:该函数可以用于打开指定路径+名称的sqlite3数据库;
参数:filename 要打开的数据库路径+名称;
 ppdb     打开之后的数据库句柄;
返回值:成功 0
失败 -1;




关闭:
int sqlite3_close(sqlite3 *db);
功能:关系已经打开的数据库;
参数:db要关闭的数据库句柄
返回值: 成功 0
失败-1;




操作:查询


int sqlite3_get_table(
sqlite3 *db,          /* An open database */
const char *zSql,     /* SQL to be evaluated */
char ***pazResult,    /* Results of the query */
int *pnRow,           /* Number of result rows written here */
int *pnColumn,        /* Number of result columns written here */
char **pzErrmsg       /* Error msg written here */
);


功能:该函数主要用于对数据库中指定表的查询操作;
参数:db 已经打开的数据库句柄 == sqlite3_open的参数2 的值;
      zSql 表示要在数据库中执行的sql语句,一般是select语句;
      pazResult 结果集,表示最终查询的结果地址;
 pnRow  结果集中数据的行个数;
 pnColum 结果集中数据的列个数;
 pzErrmsg 查询异常的信息记录;
返回值:成功 0
失败 -1;




练习:
根据sqlite3_get_table 函数的例子编写一个用户登录验证的测试
程序,如果用户输入不正确提示重新输入,并只有三次尝试机会;


select * from user where name ='xxx' and pass = 'xxx' ;


操作:通用 
int sqlite3_exec(
sqlite3*db,                                  /* An open database */
const char *sql,                           /* SQL to be evaluated */
int (*callback)(void*arg,int,char**,char**),  /* Callback function */
void * arg,                                    /* 1st argument to callback */
char **errmsg                              /* Error msg written here */
);


功能:该函数用于数据库中所有的常规操作,主要用于可能改动数据的
 增加 删除 修改操作。
参数: db  要执行操作的数据库句柄;
  sql 要执行的sql操作语句,主要是 insert  delete  update
  callback 回调函数指针,只用于查询的时候生效。
  arg  回调函数的第一个参数;
  errmsg  执行sql的异常信息;
返回值:成功 0
失败-1




练习:
使用sqlite3_exec函数完成修改和删除功能的测试效果。
可以完成指定记录的修改和删除;




回调函数:callback 用于sqlite3_exec执行查询语句的是调用;
int (*callback)( void*arg,int num ,char** va,char**na),  /* Callback function */
参数:arg 由外部sqtlie3_exec的传入的参数;
 num 执行sql语句的结果个数;
 va  执行sql之后的数据值
 na  执行sql之后的数据列名称
返回值: 成功 0
失败 -1;


注意:该回调函数在每查询到一条记录就执行一次;


================================================================


1、使用sqlite3的接口函数完成一个用户注册功能模块设计
   要封装成函数,在独立的main中调用测试;




2、使用sqlite3的接口函数完成一个用户登录验证功能模块设计
   要封装成独立函数,在独立的main中调用测试;




3、将一个文本文件 dict.txt 的内容,全部导入到数据库中的特定
   表中,比如: t_word(id int , name text, value text);




4、设计一个在线英英词典系统,要求必须网络程序,可以有一个
   tcp并发服务器端,可以接入多个客户端链接请求,每个客户端
   都可以同时向服务器发出单词翻译的请求,服务器根据客户端的
   请求查询数据库并返回查询结果。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值