1、随着应用程序功能越来越复杂,数据量越来越大,面临2个问题
第一:读写文件并解析出数据需要大量重复代码
第二:成千上万的数据中快速查询出指定数据需要复杂逻辑
第三:如果每个应用程序都各自写自己的读写数据代码,一方面效率低,易错。另一方面,每个应用程序访问数据的接口各不相同。
2、数据库作为专门管理数据的软件,通过数据库提供的接口来读写数据
1、数据库按数据结构来组织、存储和管理数据,共有三种模型:层次模型、网状模型、关系模型
最终关系模型获得最广泛运用。
INT 整型 4字节整数类型,范围约+/-21亿
BIGINT 长整型 8字节整数类型,范围约+/-922亿亿
REAL 浮点型 4字节浮点数,范围约+/-1038
DOUBLE 浮点型 8字节浮点数,范围约+/-10308
DECIMAL(M,N) 高精度小数 由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算
CHAR(N) 定长字符串 存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串
VARCHAR(N) 变长字符串 存储可变长度的字符串,例如,VARCHAR(100)可以存储0~100个字符的字符串
BOOLEAN 布尔类型 存储True或者False
DATE 日期类型 存储日期,例如,2018-06-22
TIME 时间类型 存储时间,例如,12:20:59
DATETIME 日期和时间类型 存储日期+时间,例如,2018-06-22 12:20:59
是结构化查询语言的缩写,用来访问和操作数据库系统
DDL(data definition language):允许用户定义数据,创建表、删除、修改表结构,通常此类由数据库管理员执行
DML(data manipulation language):为用户提供添加、删除、更新数据的能力,
DQL(data query language):允许用户查询数据,
内含常用的数据引擎:
InnoDB:由Innobase Oy公司开发的一款支持事务的数据库引擎,2006年被Oracle收购;
MyISAM:MySQL早期集成的默认数据库引擎,不支持事务。
通俗点就是我们操作数据库的几条sql,要么全部执行成功,要不全不成功。(事务是为了解决数据安全问题)
事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。
事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
事务的持久性:表示已提交的数据在事务执行失败时,数据的状态都应该正确
主键:能够通过某字段唯一区分出不同的记录,这个字段被称为主键。
联合主键:
索引:是数据库中对某一列或多值进行预排序的数据结构。
创建索引:alter table A add index score
唯一索引:在数据表中,例如身份证号、邮箱地址,因为有具体的业务含义,又不能用来做主键,又需具有唯一性约束,就得给该列添加唯一索引。
指定索引:数据库会自动分析查询语句,很多时候数据库查询优化器,不一定总能使用最优索引,我们可以通过force index 强制查询
例如
select * from students force index(class_id) where id=1 order by id
limit M offset N
每页3条,获取第1页
用limit 3 offset 0
每页3条,获得第2页
limit 3 offset 3
inner 取交集
right join =right outer join 返回右表都存在的行。如果某一行仅在右表存在,那么结果集就会以NULL填充剩下的字段
left join=LEFT OUTER JOIN则返回左表都存在的行
full outer join 会把两张表所有记录选择出来
insert into table(column1,2,3…)values(值1,值2,…)
update table set 字段1=值1, 字段2=值2, … WHERE …;
在UPDATE语句中,更新字段时可以使用表达式。例如,把所有80分以下的同学的成绩加10分:
UPDATE students SET score=score+10 WHERE score<80;
-- 查询并观察结果:
SELECT * FROM students;
DELETE FROM <表名> WHERE …;
DELETE FROM students WHERE id=1;
±---------±------------------------------------------------------+
| students | CREATE TABLE students
( |
| | id
bigint(20) NOT NULL AUTO_INCREMENT, |
| | class_id
bigint(20) NOT NULL, |
| | name
varchar(100) NOT NULL, |
| | gender
varchar(1) NOT NULL, |
| | score
int(11) NOT NULL, |
| | PRIMARY KEY (id
) |
| | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 |
±---------±------------------------------------------------------+