strdup 每次可以为读取到的值分配一个新地址
向数据库中写入内容并且读取
数据库:
1.概念:
文件:存放数据,掉电数据不会丢失,软件的配置及想要持续保存的数据放入文件中
大批量数据存储和管理时使用数据库
2.类型:
1.关系型数据库
1.Oracle
DB2
2.MySQL
开源
3.sqlserver
4.sqlite
小型数据库
2.非关系型数据库
1.Redis
3.SQL语言
数据库支持的编程语言,主要对表完成:增、删、改、查相关功能
4.安装sqlite数据库
1.虚拟机能够上网
2.配置apt-get工具集
3.安装sqlite数据库
sudo apt-get install sqlite3
5.sqlite3命令:
6.SQL语句:
create table
创建表
使用形式:
create table 表名称(列1 数据类型, 列2 数据类型, ...);
示例:
create table student(姓名 text, 性别 text, 年龄 integer, 成绩 double);
insert into
插入表
使用形式:
insert into 表名称 values(值1, 值2, ...);
示例:
insert into student values("张三", "男", 19, 89.5);
insert into student values("李四", NULL, NULL, 99.99);
insert into student (姓名, 年龄) values ("王二", 18);
select
查看表
使用形式:
select 列1,列2,... from 表名称 where 匹配条件 order by 列名称 asc/desc;
示例:
select * from 表名称;
select 姓名,成绩 from student;
select 姓名,成绩 from student where 姓名 like "%张%";
select 姓名,成绩 from student order by 成绩 desc;
select 姓名 from student where 成绩 > 85 order by 成绩 desc;
delete from
删除表
使用形式:
delete from student where 匹配条件;
示例:
select 姓名 from student where 成绩 > 85 order by 成绩 desc;
update
更新表
使用形式:
update 表名称 set 列1=值1,列2=值2 where 匹配条件;
示例:
update student set 性别="女", 成绩=86.3 where 姓名="王二";
drop table
删除表
使用形式:
drop table 表名称;
7.数据库文件格式:
数据库文件 -> 表 -> 列1 列2 列3
filename.db ...
8.内键:
1.一般为整形
2.区分一张表中不同的数据(内键的值不允许重复)
9.与外部关联的键值
与外部表关联的键值
学生信息表
成绩表
课程表
10.多表联合查询
1.cross join:
交叉连接
将表1中的每一项都与表2中所有项连接获得一张新表
示例:
select student.name as 姓名, lesson.subject as 科目 from student cross join lesson;
select student.name as 姓名, lesson.subject as 科目 from student cross join lesson where 科目 like "语文";
2.inner join:
内连接
将表1和表2中所有同时满足条件的数据关联在一起
示例:
select grade.stuid as 学号, lesson.subject as 科目, grade.score as 成绩 from grade inner join lesson on grade.lessonid = lesson.id;
sqlite> select student.name as 姓名, lesson.subject as 科目, grade.score as 成绩
...> from grade inner join lesson on grade.lessonid = lesson.id
...> inner join student on grade.stuid = student.id
...> ;
sqlite> select student.name as 姓名, lesson.subject as 科目, grade. score as 成绩
...> from grade inner join lesson on grade.lessonid = lesson.id
...> inner join student on grade.stuid = student.id
...> where 成绩 < 60
...> order by 成绩 desc;
3.outer join
外连接
sqlite> select grade.stuid as 学号, student.name as 姓名, lesson.subject as 科目, grade.score as 成绩
...> from grade inner join lesson on grade.lessonid = lesson.id
...> left outer join student on grade.stuid = student.id
...> ;