一、数据库介绍
1、为什么需要数据库
内存掉电后数据丢失,计算机的资源有限,因此需要把程序中用的数据存储下来以便于关机后还能继续使用(数据持久化),而保存数据最简单的方法就是把数据以文件形式写入到磁盘中。
随着程序的功能越来越复杂,需要操作的数量也就是越来越来大,管理数据就成了很大的问题,因为读写文件并解析数据需要大量重复的操作,并且从大量数据的增、删、改、查需要非常复杂的逻辑和耗时的操作。
如果程序都各息实现读写数据的代码,一方面效率低、容易出错,另一方面是每个程序访问数据的接口、业务逻辑不同,所以代码难以复用,所以我们前辈们就发明出一款专门用来管理数据的软件–数据库
使用数据库程序员就不需要自己管理数据了,而是通过数据库提供的接口来读写数据,至于数据是数据存储到文件中的、如何提高效率、如何保证安全,则不需要关心。
2、什么是数据库
数据库,可以看作电子化的文件柜(存储电子文件的场所),用户可以对文件中的数据方便的增加、删除、修改、查询等操作。
注意:我们使用的其实是数据管理软件,而不是存储数据的仓库,大底层来看我们使用数据库其实就是与一个进程通信。
3、数据库的类型
层次型数据库
它的数据模型是上下级的层次关系,从数据结构上来看就是像一棵树。
网状型数据库
层次型数据库不足以表更复杂的数据关系,因此就有了网状型数据库,它的数据模型是数据节点与节点之间连接起来,从数据结构上来看就是图型结构。
关系型数据库
由于层次型、网状型数据库普通人难以理解,因此才有了关系型数据库。
可以把关系型数据库看作是二维表格,它的数据模就相当于Excel表。
随着时间的推移和市场竞争,最终关系型数据获得了最终的市场份额,因为关系型数据库使用最方便、简单。
4、目前主流的关系数据库
商用数据库:Oracle,Oceanbase,DB2,SQL Server
开源数据库:MySQL,MariaDB
桌面数据库:以微软的Access为代表,适合桌面应用程序使用
嵌入式数据库:SQLite为代表,适合手机、平板、可穿戴设备使用
内存数据库:Redis,数据存储在内存中,所以访问速度非常快
5、使用数据的境界
1、对数据进行简单的增、删、改、查。
2、对数据有更深层次的理解,写出更高效SQL语句。
3、合理的创建、设计表,对数据进行约束、备份、安全、恢复。
4、能处理海量数据、解决高并发问题。
二、SQL语言介绍
1、什么是SQL
SQL是结构化查询语言的缩写,用于访问和操作数据库,既可以查询数据库中的数据,也可以添加、删除、修改数据库中的数据,还可以对数据库进行管理和维护。
SQL语言被ANSI组织定义出一套统一的标准,也就是所有的数据库都支持SQL语言,但是不同的数据库对SQL语言进行了不同程度的扩展(通常把它们称为"方言"),也就是说如果只使用标准的SQL语言,理论上所有的数据库都可以使用,但如果使用了某个数据库的扩展,换到其它数据库上可能就不行了。
注意:大小写不敏感
2、SQL中的语句分类
数据库控制语句:用于权限的授予和回收。
数据定义语句:用于建立、修改、删除数据库对象。
数据操作语句:用于改变数据库中的数据,如:增、删、改、查。
数据查询语句:用于查询所需要的数据,select。
事务控制语句:用来维护数据一致性的语句。
3、SQL的数据类型
数值型
TINYINT 1字节
SMALLINT 2字节
MEDIUMINT 3字节
INTEGER 4字节
BIGINT 8字节
FLOAT 4字节
DOUBLE 8字节
DECIMAL(M,D)
M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。
D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M
字符串型
CHAR(n) n:0~255 定长字符串,相当于定义 char str[n];
VARCHAR(n) n:0~65535 变长字符串,n表示最多存储n个字节,具体多少个字节不确定。
日期型
DATE 3字节 日期值 格式:YYYY-MM-DD
例:1000-01-01/9999-12-31
TIME 3字节 时间值或持续时间 格式:HH:MM:SS
例:’-838:59:59’/‘838:59:59’
YEAR 1字节 年份值 格式:YYYY
例:1901/2155
DATETIME 8字节 混合日期和时间值 格式:YYYY-MM-DD HH:MM:SS
例:1000-01-01 00:00:00/9999-12-31 23:59:59
TIMESTAMP 4字节 时间戳 格式:YYYYMMDD HHMMSS
例:1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
三、访问数据库
1、本地访问
mysql -uuser -ppwd 方便,但有暴露密码的风险
mysql -uuser -p 可以隐藏的输入密码
2、远程访问
先通过ssh、telnet命令远程登录搭建数据库的服务器,然后再登陆数据库,前提是服务器要开户ssh或telnet远程登录的功能。
3、客户端访问
MySQL Workbench
四、数据库控制语句
创建数据库:create database nameDB;
创建用户并授权: grant all(select,insert,update,delete) privileges on nameDB.* to users@’*’ identified by ‘pwd’;
刷新:flush privileges;
选择数据库:use nameDB;
注意:每次用户登录后,第一个操作就要选择要使用的数据库。
五、数据定义语句
1、创建表
create table 表名(字段名 字段类开,…);
注意:语句不区分大小写,但表名、字段名区分大小写。
查看当前数据库中的所有表格:show tables;
查看表结构:desc 表名;
2、修改表
修改表名:rename table 旧表名 to 新表名;
增加列:alter table 表名 add(字段名 字段类型);
注意:只能添加到末尾,不能插入到中间。
删除列:alter table 表名 drop 字段名;
修改列:alter table 表名 modify 字段名 字段类型;
3、删除表
删除表数据,保留表结构:truncate 表名;
删除表数据和表结构:drop table 表名;
六、表设计的三范式
1、无重复的列
如果列的数据重复,可以拆分成两张表。
1011 hehe1 w 20 c1|c2
1012 hehe2 w 20 c1|c3
1011 hehe1 w 20 c1
1011 hehe1 w 20 c2
1012 hehe2 w 20 c1
1012 hehe2 w 20 c3
2、在遵循第一范式的基础,字段完全依赖于主键
如果一个字段与主键没有依赖关系,可能会导致其它字段的值重复。
1011 hehe1 w 20
1011 hehe1 w 20
1011 c1
1011 c2
1012 c1
1012 c3
3、在遵循第二范式的基础,字段不能传递依赖于主键
如果一个字段与主键仅有传递依赖关系,也可能会导致其它字段的值重复。
七、数据操作语言
1、插入数据
插入一条完整数据:insert into students values(字段值);
字段值要与表结构一一对应。
随意插入一条不完整数据:insert into students(字段名) values(字段值);
字段名与字段值要一一对应。
2、修改表数据
修改所有行:update 表名 set 字段名=数据;
修改部分行:update 表名 set 字段名=数据 where 条件;
3、删除表数据
删除所有数据:delete from 表名;
功能相当于 truncate 表名;
删除符合条件的数据:delete from 表名 where 条件;
4、客户端不允许修改、删除
Edit->preferences->SQL Editor->取消底部的Safe Updates…
八、数据查询语言
select 字段1,字段2,… from 表名 where 条件;
注意:*是SQL中的通配符,代表所有字段