数据库概述
- 数据库:存储和管理数据的仓库
- 常见的数据库分为:
关系型数据库:Oracle、mysql、sqlserver、access
非关系型数据库:MongoDB、Redis、Solr、ElasticSearch、Hive、HBase - 关系型数据库
底层以二维表的形式保存数据的库就是关系型数据库
- 非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档、键值对或图形等。
- 扩展内容(了解即可)
常见的关系型数据库
·MySQL:Oracle公司产品,08年被Sun公司收购,09年Sun被Oracle收购,开源产品,为了担心MySQL闭源MySQL创始人离开Oracle创办了MariaDB,市占率第一
·Oracle:Oracle公司产品,闭源产品,性能最高价格最贵,市占率第二
·SQLServer:微软公司产品,闭源产品,市占率第三;网站整套解决方案:编程语言+web服务软件+操作系统+数据库软件
·DB2:IBM公司产品,主要应用在IBM整套解决方案中,主要服务于对安全性要求极高的场景 比如银行
·SQLite:轻量级数据,安装包只有几十kb
数据库相关概念
- 数据库服务器
数据库服务器是一个软件,将数据库软件安装在电脑上,当前电脑就是一个数据库服务器。就可以对外提供存取数据的服务
在一个数据库服务器中可以创建多个数据库,每一个数据库都是一个单独的仓库。 - 什么是数据库
数据库就是存储和管理数据的仓库 - 表
一个数据库中可以创建多张表,每张表用于存储一类信息 - 什么是表记录
一张表中可以包含多行表记录,每一行表记录用于存储某一个具体数据
连接mysql服务器
1.连接mysql服务器:
mysql -uroot -p
-u:用户名
-p(小写):密码
2. 连接mysql服务器并指定ip和端口
mysql -uroot -proot -h127.0.0.1 -P3306
-h:服务器主机名或ip地址,默认连接本机
-P(大写):端口3306,默认连接3306
3. 快捷打开方式
– windows: 开始菜单中找到MySQL/MariaDB 里面的 MySQL Client 并点击, 输入自己的密码后回车
– linux/苹果系统: 桌面空白右键 打开终端 输入 mysql -uroot -p 回车 输入密码再回车
4.退出客户端命令
quit exit \q
5.FAQ:常见问题:
解决方法:复制mysql安装目录下的bin目录的路径,将bin目录的路径添加到path环境变量中!!
可以在cmd中通过 echo %path%
检查path环境变量的值。
sql语句
什么是sql语言
Structured Query Language 结构化查询语言
SQL是一门用于操作关系型数据库的通用的语言(使用SQL可以操作所有的关系型数据库)
使用SQL可以操作数据库、表、表记录
(1)创建数据库、删除数据库、修改数据库、查询数据库
(2)创建表、删除表、修改表、查询表
(3)新增表记录、删除表记录、修改表记录、查询表记录
使用SQL也可以操作存储过程/视图/索引等。
提示:SQL是一个标准通用的操作关系型数据库的语言(普通话),每个数据库厂商为了增强自己数据库的功能,都提供了支持自己数据库的语言,称之为数据库的方言。方言不通用!
ssql语句的分类
SQL规范非常成熟,分为下面的部分:
- DDL: 数据定义语言, 包括数据库和表相关的SQL语言
- DML:数据操作语言, 包括数据的增删改相关SQL
- DQL:数据查询语言, 只包括查询SQL
- DCL: 数据控制语言, 包括权限分配相关SQL
- TCL: 事务控制语言, 包括事务相关的SQL
最常见的是CRUD相关的SQL语句:创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete),每个程序员必须掌握,也是面试必考内容。
sql语句注意事项
- 以分号结尾
- 对大小写不敏感。推荐关键字使用大写,自定义的名称(库名,表名,列名等)使用小写。mysql习惯全小写.
- 在自定义名称时,针对多个单词不要使用驼峰命名,而是使用下划线连接。(例如:tab_name,而不是 tabName )
- 可以有多个换行和空格
导入*.sql批处理文件
-
下载emp.zip解压得到emp.sql 把文件移动到某个盘的根目录,其他系统放到桌面
-
在终端中执行以下命令:
source d:/emp.sql;
-
测试是否成功:
show tables; 会显示2个表 emp和dept select * from emp ; 如果出现乱码 执行 set names gbk; 再次查询
mysql的数据类型
数值类型
整型
MySQL中支持多种整型,其实很大程度上是相同的,只是存储值的大小范围不同而已。
tinyint:占用1个字节,相对于java中的byte
smallint:占用2个字节,相对于java中的short
int:占用4个字节,相对于java中的int
bigint:占用8个字节,相对于java中的long
浮点型
浮点类型即:float和double类型
float:4字节单精度浮点类型,相对于java中的float
double:8字节双精度浮点类型,相对于java中的double
float/double(m,d):m是总个数,d是小数位
定点型
decimal: 定点数,浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
字符串类型
1、char(n) 定长字符串,最长255个字符。n表示字符数,例如:
– 创建user表,指定用户名为char类型,字符长度不超过10
create table user(
username char(10),
...
);
所谓的定长,是当插入的数据的长度小于指定的长度时,剩余的空间会用空格填充。(这样会浪费空间)
char类型在插入数据时,比varchar类型效率要高!
char类型往往用于存储长度固定的数据。
2、varchar(n) 变长字符串,最长不超过65535个字节,n表示字符数,一般超过255个字符,会使用text类型,例如:
iso8859-1码表:一个字符占用1个字节,1*n < 65535, n最多等于 65535
utf8码表:一个中文汉字占用3个字节,3*n < 65535,n最多等于 65535/3
GBK码表:一个中文汉字占用2个字节,2*n < 65535,n最多等于 65535/2
– 创建user表,指定用户名为varchar类型,长度不超过10个字符
create table user(
username varchar(10)
);
所谓的不定长,是当插入的数据的长度小于指定的长度时,剩余的空间可以留给别的数据使用。(节省空间)
总结:长度固定的数据,用char类型,这样既不会浪费空间,效率也比较高
如果长度不固定,使用varchar类型,这样不会浪费空间。
3、大文本(长文本)类型
最长65535个字节,一般超过255个字符列的会使用text。
– 创建user表:
create table user(
resume text
);
另,text也分多种,其中bigtext存储数据的长度约为4GB。
扩展内容3:(面试题)char(n)、varchar(n)、text都可以表示字符串类型,其区别在于:
(1)char(n)在保存数据时,如果存入的字符串长度小于指定的长度n,后面会用空格补全,因此可能会造成空间浪费,但是char类型的存储速度较varchar和text快。
因此char类型适合存储长度固定的数据,这样就不会有空间浪费,存储效率比后两者还快!
(2)varchar(n)保存数据时,按数据的真实长度存储,剩余的空间可以留给别的数据用,因此varchar不会浪费空间。
因此varchar适合存储长度不固定的数据,这样不会有空间的浪费。
(3)text是大文本类型,一般文本长度超过255个字符,就会使用text类型存储。
日期类型
date:年月日
time:时分秒
datetime:年月日 时分秒, 默认是null, 最大9999-12-31
timestamp:时间戳,年月日 时分秒,默认当前系统时间, 最大2038-1-19
图片
blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。
数据库操作(DDL)
查询所有数据库
- 格式: show databases;
创建数据库
-
默认字符集格式: create database 数据库名;
-
指定字符集格式: create database 数据库名 character set utf8/gbk;
需要注意的是,mysql中不支持横杠(-),所以utf-8要写成utf8;
-
举例:
create database db1; create database db2 character set utf8; create database db3 character set gbk;
show databases; 检查是否创建成功
查询数据库详情
-
格式: show create database 数据库名;
-
举例:
show create database db1; show create database db2