数据库总结

总结数据库

1.1 为什么要使用数据库?

1.持久化:将内存中的数据存储在数据库中

   方便管理数据

1.2 什么是数据库

DB:数据库保存了一系列有组织的数据

DBMS:数据管理系统

mysql 是一种开放源代码的关系型数据库管理系统

Mysql的逻辑架构与存储引擎

1.连接层

2.服务层

3.引擎层(最与众不同)

4.存储层

MySQL的数据类型

  • 整型(xxxint)

  • 位类型(bit)

  • 浮点型(float和double、real)

  • 定点数(decimal,numeric)

  • 日期时间类型(date,time,datetime,year)

  • 字符串(char,varchar,xxxtext)

  • 二进制数据(xxxBlob、xxbinary)

  • 枚举(enum)

     

特殊的NULL值

Null特征:

(1)所有的类型的值都可以是null,包括int、float等数据类型

(2)空字符串"",不等于null,0也不等于null,false也不等于null

(3)任何运算符,判断符碰到NULL,都得NULL

(4)NULL的判断只能用is null,is not null

(5)NULL 影响查询速度,一般避免使值为NULL

面试:

为什么建表时,加not null default '' 或 default 0

答:不想让表中出现null值.

为什么不想要的null的值

答:(1)不好比较,null是一种特殊值,比较时,只能用专门的is null 和 is not null来比较.

碰到运算符,一律返回null

(2)效率不高,影响提高索引效果.

因此,我们往往,在建表时 not null default '' 或 default 0

SQL

sql :structure  query  language  结构化查询语言

sql分类:

DDL:数据定义语言, 关键字 create,drop alter

DML: 数据操作语言,用于添加,删除,更新,查询  insert,delete,update,select

DCL:数据控制语句  关键字 grant,revoke

 

约束:constraints

数据完整性是指数据的精确性 和可靠性

 

    从4个方面考虑:实体完整性,域完整性,引用完整性,用户自定义完整性

 

约束分为 主键约束,primary key

外键约束,foreign key

唯一键约束  unique key

                not nulL 约束 非空约束 d7802f253cc0412391d73964577db44e.doc

check    检查约束   age int check(age>0)  sex char(2) (sex in('男',“女”))

default  缺省约束     is_actived int default 1

索引index

索引:索引是一个单独的,物理的数据库结构,索引是要消耗数据库空间的,而约束是一种逻辑概念

索引好处:加快了查询的速度

索引坏处:降低了增删改的速度,增大了表的文件大小(索引文件甚至可能比数据文件大)

mysql提供了多种 索引类型选择:

1》普通索引

2》唯一性索引

3》主键索引

4》全文索引

自增列  auto_increment

   关于自增长auto_increment:

(1)整数类型的字段才可以设置自增长。

(2)当需要产生唯一标识符或顺序值时,可设置自增长。

(3)一个表最多只能有一个自增长列

(4)自增长列必须非空

(5)自增长列必须是主键列或唯一键列。

(6)InnoDB表的自动增长列可以手动插入,但是插入的值如果是空或者0,则实际插入的将是自动增长后的值。

 

DML操作

数据操纵语言(DML)DML用于插入、修改、删除数据记录,包括如下SQL语句:

INSERT:添加数据到数据库中

UPDATE:修改数据库中的数据

DELETE:删除数据库中的数据

 

去重DISTINCT(distinct)

select distinct dept_id from t_employe;

笛卡尔积

定义:将两个(或多个)表的所有行进行组合,连接后的行数为两个表的乘积数

在MySQL中如下情况会出现笛卡尔积,主要是因为缺少关联条件或者关联条件不准确

关联条件

表链接的约束条件有三种方式:where,on,using

where: 适用于所有关联查询

  • ON:只能和JOIN一起使用,只能写关联条件。虽然关联条件可以并到WHERE中和其他条件一起写,但分开写可读性更好。

  • USING:只能和JOIN一起使用,而且要求两个关联字段在关联表中名称一致,而且只能表示关联字段值相等

自连接

当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义。然后两个表再进行内连接,外连接等查询

select的5个句子

where条件查询

group by 分组查询

聚合函数  avg,count,min,max,sum

having筛选

having与where不同点

where针对表中的列发挥作用,查询数据,having针对查询结果中的列的发挥作用

where后面不能写分组函数,而 having后面可以使用分组函数

having只用于group by 分组统计语句

order by 排序

按一个或多个字段对查询结果进行查询

#查询员工基本工资,按照基本工资升序排列,如果工资相同,按照eid升序排列
SELECT t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary
ON t_employee.eid = t_salary.eid
ORDER BY basic_salary,eid;

#查询员工基本工资,按照基本工资降序排列,如果工资相同,按照eid排列
SELECT t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary
ON t_employee.eid = t_salary.eid
ORDER BY basic_salary DESC,eid;

 

 

limit 分页

limit m,n

m表示从下标为m的记录开始查询,第一条记录下标为0,n表示取出n条出来,如果从m开始不够n条了,就有几条取几条。m=(page-1)*n,(page页码,n表示每页显示的条数)

 

如果第一页limit 0,n

如果第二页limit n,n

依次类推,得出公式limit  (page-1)*n , n

#分页
#查询员工信息,每页显示5条,第二页
SELECT * FROM t_employee LIMIT 5,5;

#统计每个部门的平均基本工资,并显示前三名
SELECT emp.dept_id,AVG(s.basic_salary)
FROM t_employee AS emp,t_salary AS s
WHERE emp.eid = s.eid
GROUP BY emp.dept_id
ORDER BY AVG(s.basic_salary) DESC
LIMIT 0,3;

 

where型子查询

where型子查询即把内层sql语句查询的结果作为外层sql查询的条件.

in 等于任何一个

all 和子查询的所有值比较sal>ALL(1,2,3)等价于sal>1 && sal>2 && sal>3

any 和子查询返回的任意一个值比较。例如:sal>ANY(1,2,3)等价于sal>1 or sal>2 or sal>3

from型子查询

from型子查询即把内层sql语句查询的结果作为临时表供外层sql语句再次查询.

`exit型子查询`

#查询部门信息,该部门必须有员工

select * from t_department where exists (select * from t_employee where t_employee.dept_id=t.department.did)

六、事务

grant:授予访问权限

revoke:撤销访问权限

commit:提交事务处理

rollback:事务处理回退

savepoint:设置保存点

lock:对数据库的特定部分进行锁定

事务的ACID特性:

  • 原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。 组成事务的所有SQL必须:要么全部执行,要么全部取消(就像上面的银行例子)。

  • 一致性(Consistency):指数据的规则,在事务前/后应保持一致

  • 隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.

  • 持久性(Durability):当事务提交完成后,其影响应该保留下来,不能撤消

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-10-23 21:00  慧瑞  阅读(82)  评论(0编辑  收藏  举报