数据库入门
关系型数据库
简称:RDBMS(Relational (关系) Database Management System)
常见RDBMS: Ms SQL Serve,IBM DB2,MySQL,Oracle(企业级),Microsoft Access和SQlite.(这些都是工具)
关系型数据库主要内容是表
非关系型数据库
No SQL = Not Only SQL, "不仅仅是SQL"
是基于键值对的数据库,例:db.a.insert({x:1});
常见(NoSQL)非关系型数据库: MongoDB, Redis, Hbase(大型)等.
NoSQL比RDBMS查询效率高许多.
RDBMS特征
1.数据以表的形式出现
2.许多行,列组成一张表
3.每行对应一条记录(除表头)
4.每列对应一条数据域
5.许多表组成了一个数据库
数据库:就是一些相关联表的集合
行:一组相关数据,又称为:记录,元组
列:一组相同类型数据,又称:数据域,字段,属性,字段包括:字段名+字段类型.这里字段类型总的可以划分为整型和文本型
SQLite数据库
SQLite数据库特点
1.SQLite是一个事务性的SQL数据库引擎.这里解释一下什么叫事务性.事务性就是:中途有退出就全部退出,退回到初始状态,只有一起完成才会整个完成.
2.SQLite不需要配置,不需要安装或管理.
3.一个SQLite数据库就是一个硬盘上的文件
4.SQLite支持SQL92(SQL2)标准的大多数查询语言的功能
5.SQLite是轻量级数据库,常用于Android系统(因为手机就需要轻量的工具)
SQLite安装
下载Win64下的两个包:
sqlite-dll-win64-x64-xxxxxxx.zip
sqlite-tools-win32-x86-xxxxxxx.zip
DOS下SQLite的清屏命令
cls或者"ctrl"+"l"
SQLite注释
两个杠"--"或"/* */"
新建数据库
sqlite3 mydb.db ,这个命令用来在当前目录下新建一个数据库mydb.db
注意:实际上通过上面的命令并没有新建出mydb.db(在文件夹里还看不到db文件),还需要通过命令.database才能保存在磁盘
新建表
命令:create table table_name(
column1 datatype primary key [not null],
column2 datatype,
...
columnx datatype
) ;
查看表的完整信息
新建完表之后可以用命令.schema table_name查看表的信息
字段约束
1.主键约束:primary key.作用:使字段数据不能重复
2.not null约束,作用:字段内容不能为空
3.唯一约束:unique.作用:该字段唯一,不能有跟它一样的
4.默认约束:default 10.作用:没有写字段内容时,默认值为10
外键约束
是指该表的字段是通过另外一个表的主键字段获得相关信息的
外键可以重复,主键不能
数据库常用存储数据类型
INTEGER 一个带符号的整数
REAL 浮点型
TEXT 文本型
BLOB 一个BLOB数据块(可放图片,exe文件等)
NULL 空值
Boolean SQLite 没有Boolean类,直接为0(false)或1(true)
Date与Time SQLite 没有对应类,但可存为TEXT,REAL或INTEGER
CHAR和VARCHAR SQLite中都存为TEXT型,CHAR(10)固定字符长度,VARCHAR是可变字符型
外键信息的添加
当你在新建一个表的时候,外键信息需要在最后添加,比如现在有了一个地址表address,address内容如下:
address(
aadd char(50) not null
);
现在新建一个student表:
create table student(
sname varchar primary key not null,
sage int,
sadd char(50),
foreign key(sadd) references address(aadd)
);
foreign key(sadd) references address(aadd)就表示student表里的字段sadd是外键,是关联address表的aadd字段的外键
数据库语言
DQL(select)
数据查询语言
常用命令:select. (针对表中的数据)
DML(insert,update,delete)
数据操作语言
常用命令:insert update delete (针对表中的数据)
update用法
更新,修改表的记录
update table_name set sname='xxx' where sid==1;
delete用法
delete from table_name where sage>18;
DDL(create,alter,drop)
数据定义语言
常用命令:create table alter table drop table (针对表)
alter用法
alter
1.可以修改表名
2.可以添加一个字段
(1).alter table table_name rename to new_table_name;
(2).alter table table_name add column phone char(15);
DCL(grant,revoke)
数据控制语言
常用命令:grant revoke (定义数据用户的权限)
在命令行设置格式
.header on|off 显示表头|关闭表头
.mode column 左对齐列
常用关键字
insert
向表中插入,更新一条记录
具体用法:
insert into table_name values(
column datatype
);
limit
用来限制由select语句返回的数据的数量
select *from table_name limit 3 [offset 2];表示查询表中3行信息[从第一行开始偏移2行算起的3行]
条件查询
where
where sage>18 and sex=='M';
select
查询表中字段信息
具体用法:
select * from table_name; 查询表的所有记录
select 字段名1 字段名2 from table_name; 查询表中对应的字段信息
select 字段名 from table_name where sage<18;查询该字段中对应年龄字段的年龄小于18的信息
模糊查询
like
如:
select *from table_name where sname like '%s%';表示查询表中姓名信息里有字符s的数据信息,这里前面的%表示s前面有0个或任意几个字符,后面的%同理
select * from table_name where sname like '___h%';表示查询表中姓名信息中第4个字符为h的数据信息
glob
可实现通配符*的查询
select sname from table_name where sname glob '?s*';
?表示一个字符或一个单一数字,*表示任意字符(可以是0个或1个或多个)
范围查询
in
select * from table_name where sage in (22,26);
表示查找年龄是22和年龄是26的所有记录
select * from table_name where sage not in (22,26);
表示查找年龄不是22且不是26的所有记录
between
between常和and一起使用
select * from table_name where age between 22 and 26;
查询年龄在22到26之间的所有记录,包括22和26
order by
排序,默认升序,后面加desc则为降序
select * from table_name order by sage;
以年龄升序排列信息
select * from table_name order by sage desc;
以年龄降序排列信息
select * from table_name order by sid,sage desc;
以学号升序,年龄降序排列信息
group by
必须和select一起使用,对相同数据分组
select sname,sum(score) from table_name group by sname;
以姓名分组,查询姓名和总分信息
having
select sname,sum(score) as 总分 from table_name
group by sname
having count(sname)>4
order by 总分;
以姓名分组,查询姓名数量大于4(也就是选课超过4门),最后按总分升序排列的姓名,总分信息.
distinct
与select一起使用,可清除重复出现的记录,保留唯一一个记录
select distinct sname from table_name;
查询有哪几个学生参加了考试(把相同的学生名去掉了)
关键字使用顺序
从前到后
select
from
where
group by
having
order by
常用函数
count()
计算一个数据库中表的行数,或者一个分组中的元素个数
select count(*) from table_name;列出所有行的信息
max()
得到某列最大值
select max(score) from table_name;
查询表中最大分数的记录
min()
得到某列最小值
sum() avg() upper() lower() length() random() abs()
select random();这里返回的是一个8字节的长整型整数
查看sqlite库版本号
select sqlite_version();
视图
定义
视图是存储在数据库中的一个SQLite语句
就是自定义表
1.不让用户看到
2.生成相应报表
3.不能写,是只读的,所以无法进行更新
视图的创建
create view view_name as select sid,sadd from table_name;
视图的删除
drop view view_name;
笔记
在SQLite数据库中,"<>"表示不等于符号.