数据库入门

关系型数据库

简称: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数据库中,"<>"表示不等于符号.