现阶段学习的是单机的数据库!
数据库系统概述:
数据库系统(DBMS)是指一个能为用户提供信息服务的系统。它实现了有组织地,有动态地存储大量相关数据的功能,提供了数据处理和信息资源共享的便利手段。
关系型数据库:
关系型数据库系统(RDBMS)是指使用了关系模型的数据库系统。关系模型中,数据时分类存放的,数据之间可以有联系。
关系型数据库可以有效组织和管理大量复杂的数据,所以关系型数据库才是最重要的数据库产品。
大型系统使用的都是数据库集群!
主流的关系型数据库:
1.DB2(IMB公司开发,价格昂贵,用于电信,金融领域,跨平台)
2.Oracle(甲骨文公司研发,价格亲民,不开放源代码,跨平台)
3.MySQL(现阶段学习的数据库,开源,跨平台)
4.SQL Server(兼容性差,早期不跨平台,不支持Linux系统)
NoSQL:
NoSQL数据库指的是数据分类存放,但是数据之间没有关联关系的数据库系统,是关系型数据库的补充。
适用于秒杀库存,登录信息,消息通知,新闻篇幅等保存海量低价值的信息。
类似Redis数据库,单线程,用于解决关系型数据库多线程并行多发引发的问题,读写速度快。
主流的NoSQL数据库:
1.Redis:用内存保存数据的数据库,运行速度快
2.MemCache:用内存保存数据的数据库
3.MongoDB:用硬盘保存数据,保存海量低价值的信息
4.Neo4J:用硬盘保存数据
MySQL专栏:
登录数据库:mysql -urooot -p 显示存放不同数据的文件(逻辑空间):show database;
MySQL用户权限:
需要用到MySQL的图形客户端:Navicat
SQL语言分类:
DML:添加,修改,删除,查询
DCL:用户,权限,事务
DDL:逻辑库,数据表,视图,索引
SQL语句必须以分号结尾
DDL创建逻辑库:
CREATE DATABASE 逻辑库名称;SHOW DATABASES;DROP DATABASE 逻辑库名称;
DDL创建数据表:
USE 逻辑空间;
CREATE TABLE 数据表(
列名1 数据类型 【约束】【comment 注释】,
列名2 数据类型 【约束】【comment 注释】,
)【comment = 注释】;
DDL数据表的其他操作:
SHOW tables; DESC students;(查看表内容) SHOW CREATE TABLE student;(查看student表格的创建语句) DROP TABLE student;(删除数据表)
DDL数据类型:
浮点数容易丢失精度,在使用float的时候容易造成数据的不精确。可以使用DECIMAL代替。使用date数据类型年月日之间要加“-”号
数字数据类型:
tinyint:1字节 smallint:2字节 mediumint:3字节 int:4字节 bigint:8字节 float:4字节 double:8字节 decimal:精确精度
字符串数据类型:
char:1-255字符(需要加括号确定长度) varchar:1-65535字符(需要加括号确定长度) text:不确定长度 注:一个汉字等于2个字符。
日期数据类型:
date:3字节(年月日之间需要 加-) time:3字节 year:1字节 datetime:8字节 timestamp:4字节(时间戳,1970年后)
枚举数据类型:
ENUM:枚举
DDL修改数据表结构:
添加字段:
alter table 表名
add 列1 数据类型【约束】【command 注释】,
...;
修改字段:
alter table 表名
modify 列1 数据类型【约束】【command 注释】,
...;
修改字段名字:
alert table 表名
change 列1(原名和要修改的名字) 数据类型【约束】【command 注释】,
...;
删除字段:
alert table 表名
drop 列1,
...;
范式:
第一范式:原子性(数据库的基本要求)数据表的每一项都是不可分割的基本数据,同一列中不能有多个值,也不能存在重复的属性。
例:班级—>高三年纪一般 可以再划分为 高三和一班
第二范式:唯一性 数据表汇总的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列来存储唯一标识,这个唯一属性列被称作主键列
例: 学号 考试成绩 日期
230 58 2018-07-15
230 58 2018-07-15 该同学在同一天进行两次考试,数据一致,不能区别
第三范式:关联性 每列都与主键有直接关系,不存在传递依赖
例:爸爸 儿子 女儿 女儿的玩具 女儿的衣服(女儿的玩具和衣服都与女儿有依赖,但是这个表中儿子和女儿都是依赖于爸爸的,需要重新建一个女儿的表来存放玩具和衣服)
字段约束:
主键约束:primary key 字段值值唯一,且不能为null(auto_increment) 非空约束:not null 字段值不能为null
唯一约束:unique 字段值唯一,且可以为null 外键约束:foreign key 保持关联数据的逻辑性
外键约束使用:创建在子表上 foreign key (字段名)reference 表名(字段名)
外键约束的闭环问题:
如果形成外键闭环,我们将无法删除任何一张表的记录(避免使用外键约束)
设置默认值:
default
索引机制:(二叉树的二分查找)
创建索引:在创建表格语句中,加入 index [索引名称(没有则默认为字段值)] (字段),
添加索引:create index 索引名称 on 表名(字段) 或 alert table 表名称 add index [索引名](字段) ;
查看索引:show index from 表名;
删除索引:drop index 索引名称 on 表名;
习惯:
在表名前面添加前缀方便识别如:t_表示表 v_表示视图等
DML数据库的增删改查:
查询语句:select *(as “别名”可选)from 表名;
数据分页:select * from 表名 limit 开始位置,偏移量; 执行顺序from—>select—>limit
数据排序:ASC升序(默认) DESC(降序)
例:select emane,sal,edept from t_emp order by edept asc,sal desc;(每个部门的工资按降序排序) 执行顺序:from—>select—>order by—>limit
去除重复字段:
使用distinct关键字,distinct关键字在select子句中只能查询一列数据,如果查询多列,去除重复记录就会失效。
条件查询:
语句:select...from...where 条件【and | or】条件...;
函数:IFNULL(comm,0)判空,如果为空则赋0 DTAEDIFF(day1,day2)算两个日期偏差多少天
where语句会用到的四类运算符:
1.数学运算符 2.比较运算符 3.逻辑运算符 4.按位运算符
数学运算符:
1.+-*/% 2.in
比较运算符:
1.is null 为空 2.is not null 不为空 3.between and 范围 4.like 模糊查询(例子:like“A%”) 5.REGEXP 正则表达式
逻辑运算符:
1.and 与 2.or 或 3.not 非 4.xor 异或 例:age>=18 xor sex = "男"(年龄大于18的男性,年龄小于等于18的女性都为false)
按位运算符:
1.& 按位与 2.| 按位或 3.~ 按位取反 4.^ 按位异或 5.<< 左移 6.>> 右移
使用where子句的注意事项:
where子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录最多的条件写在最左侧。
各种子句的执行顺序:from——>where——>select——>order——>limit