内存与硬盘的区别:
- 内存:容量小,速度快,造价高,断电后数据丢失
- 硬盘:容量大,速度慢,造价低,断电后数据不丢失
常见的关系型数据库:
- 1.ACCESS-微软出的在OFFICE里集成的一个小型数据库;SQLITE-常用在手机APP里,桌面程序
- 2.SQL Server-微软真正意义上的大型数据库
- 3.MySQL-用的最多的数据-开源的,免费
- 4.PostgreSql-具说效率比MySQL要高些,有一部分公司在用
- 5.Oracle-业内最强的数据库,收费
非关系型数据库:
不规定基于SQL实现,现在更多的是指NoSQL数据库
- 1.基于键值对:memcached,redis
- 2.基于文档型:mongodb
- 3.基于列族:hbase
- 4.基于图型:neo4j
连接数据库:mysql -u root -p
端口号:3306
主机IP:127.0.0.1
注释:单行:- - 或 #
多行:/* */
数据库操作:
显示当前服务器有哪些真实数据库:
show databases;
information_schema, mysql, performance_schema, sys数据库是mysql自带的存放着MYSQL本身的配置信息;
sakila, worid数据库是MYSQL提供的实例库
创建数据库:
create database [if not exists] db_name [create_specification[,create_specification]…];
create_specification:
- character set charset_name 当前创建库的编码集 utf8mb4
- collate collation_name 排序规则
MYSQL中允许用户使用关键字做为数据库名,但是需要用反引号``把关键字引起来
查看数据库字符集:
show variables like ‘%character%’;
选择数据库:
use 数据库名;
查看当前使用的是哪个数据库:
select database();
删除数据库:
drop database [if exists] db_name;
查警告信息:
show warnings;
查看当前数据库有哪些表:
show tables;
常用数据类型:
数值类型:
- TINYINT 1字节 对应Byte
- INT 4字节 对应Integer
- BIGINT 8字节 对应Long
- DECIMAL(M,D) M/D最大值+2 对应BigDecimal
字符串类型:
- VARCHAR(SIZE) 对应String 可变长度字符串
- TEXT 对应String 长文本数据
- MEDIUMTEXT 对应String 中等长度文本数据
- BLOB 对应byte[] 二进制形式的长文本数据
补充:字节的多少和编码格式有关
- GBK:编码使用两个节点表示一个汉字
- UTF-8:编码使用三个或四个字节表示一个字符
日期类型:
- DATATIME 8字节 对应java.util.Date,java.sqlTimestamp
表的操作:
创建表:
create table tabe_name(
字段名1 数据类型,
字段名2 数据类型,
…
);
查看表结构:
desc 表名;
删除表:
drop table [if exists] tbl_name [,tbl_name]…;
CRUD:增加(Create),查询(Retrieve),更新(Update),删除(Delete)
新增(Create):
insert into table_name [字段名,字段名…] values (值1,值2…);
查询(Retrieve):
select [去重distinct] 字段名1 as 别名,字段名2… from table_name [where …] [order by 字段名 [ASC|DESC]…] [LIMIT …];
排序:order by …;
- ASC为升序
- DESC为降序(默认为ASC)
补充:NULL在MYSQL中比任何值都小,与任何值比较都返回false,与任何值运算都会返回NULL
条件查询(where):
比较运算符:
逻辑运算符:and,or,not。
分页查询:LIMIT
select … from table_name [where …] [order by …] LIMIT num;从0开始,筛选n条结果
select … from table_name [where …] [order by …] LIMIT start,num;从start开始,筛选n条结果
select … from table_name [where …] [order by …] LIMIT num OFFSET start;
修改(Update):
update table_name set 字段名=修改值… [where…] [order by…] [limit …];
删除(Delete):
dalete from table_name [where…] [order by…] [limit…];
数据库约束:
自动增长:AUTO_INCREMENT
FOREIGN KEY(外键约束):foreign key (字段名) references 主表(列)
CHECK(检查约束):check(字段名 = ‘ ’ or 字段名 = ‘ ’)
聚合查询:
聚合函数:
count统计个数;sum总和;avg平均值;max最大值;min最小值。
group by字句:
select 字段名… from table_name [where…] group by 要分组的字段名 [having 分组后的条件];
SQL的执行过程是:from->where->select->group by->order by->limit
联合查询:
内连接:
select 字段名 from 表名 as 别名 where 连接条件 and 其他条件;
外连接:
左外连接,左边表数据都会显示,没有以null填充
select 字段名 from 表名1 left join 表名2 on 连接条件;
有外连接,右边表数据都会显示,没有以null填充;
select 字段名 from 表明1 right join 表名2 on 连接条件;
自连接:
连接的表是同一张表,主要作用是把列转为行,从而实现数据之间的运算;
select * from 表名 as 别名1,表名 as 别名2;
子查询:
一个查询的条件依赖于另一个查询的结果;
单行子查询:
select * from 表名 where 字段名=(select * from 表名…);
多行子查询:
select * from 表名 where 字段名 in (select * from 表名…);
合并查询:把两个不同表中的数据合并到一个结果集中,查询的列一定要相同;
- union:合并并去重;
- union all:显示所有数据,不去重。