1.数据库介绍
数据库:存储和管理数据的软件系统;是用通俗易懂的语言可以理解为管理数据的软件,未学MySQL之前,我们会认识到excel,这也可以被认为是一种数据库
常见数据库有MySQL,SQL-Server,Redis,Myhabits
1.1数据库分类:关系型数据库/非关系型数据库
可以将数据库分类为关系型数据库与非关系型数据库
关系型数据库:以表格为基础的数据库,通过行列的组合来管理数据,其中MySQL,SQL server就是关系型数据库
非关系型数据库:往往不是以表格的形式进行存储数据,而是使用键值对/文档的形式进行存储数据,对数据存储的形式要求不是很严格,常见的非关系型数据库有Redis,MongoDB,HBase,都是使用非常广泛的数据库,这种类型的数据库在性能上比较出色,常常在分布式的场景中使用
1.2为什么学MySQL:因为MySQL开源免费;其他的数据库,类似于SQL server会要求客户端搭配Windows Server系统,还要搭配使用.net平台,比较麻烦;另外MySQL也是比较易学的数据库
1.SQL语句的使用,SQL本质上是一个“编程语言”,专门用来操作数据库的语言,SQl语言是各个数据库之间通用的,各种数据库使用的语言都是SQL(SQL是一门结构化的查询语言)熟悉了SQL语言之后各种数据库都可以很容易上手了
2.针对数据库进行编程,使用Java来操作数据库,也就是我们听闻的jdbc,在这个过程中也是会使用到SQL语句的
MySQL是一个“客户端-服务器”结构的程序
客户端(client):主动发起请求的一方
服务器(server):被动接受请求的一方
请求(request):客户端主动给服务器发的数据
响应(response):服务器给客户端返回的数据
MySQL是基于网络通信的数据库:
1.服务器能否知道客户端什么时候给他发请求?
不能,服务器是被动的一方;所以一个专业的服务器往往要7*24小时运行,来应对随时到来的客户端请求
2.服务器是只给一个客户端提供服务嘛?还是要给多个客户端提供服务?
多个客户端!那我们可以提出一个问题:一个客户端可以对应多个服务器嘛?理论上是可以的,但是很少见,大部分的客户端都是访问一个服务器就够了
2.MySQL其实涉及到两个部分:客户端,服务器端,在MySQL官网直接下载即可
可以直接把客户端-服务器端安在两个不同电脑上,也可以安装在同一台主机上,在我们学习阶段就安装在同一台主机上,选择第二个MySQL打开,第一个是图形化界面MySQL,我们使用命令行模式,输入在安装时设置的密码即可进入
2.1输入密码之后的界面
2.2MySQL数据结构
MySQL的数据可以这样分层:数据库->表->列->行
一个MySQL可以有多个数据库
一个数据库可以有多个表
一个表可以有多个列
一个列可以有多个行
通过具体的SQL语句可以更深刻的理解MySQL中的结构
3.操作数据库
3.1查看现有数据库:show databases;
可以看到 8 rows in set (0.01 sec),这代表着查出来了8行用了 0.01秒 无限接近于0
注意:像其中的information_schema/performance_schema/sakila/sys/world 一般都是MySQL自带的数据库,如果删除了出现问题可能得卸载重装
如果语句输入错误,我们一定要会看信息
大概可以猜出意思 databases 拼写错误,还有一些常见错误是 忘记分号以及分号或者分号是中文
3.2创建数据库:create database 数据库名;
在这里我们看到了jjj数据库被创建成功
注意:创建数据库时,数据库名不能和其他数据库名字一致,也不能是关键字,如果业务要求必须是关键字,可以使用`` 反引号引出数据库名
创建数据库时还可以指定字符集(在某些字符集中汉字有可能占3个字节,也有可能占2个字节,这取决于你使用何种类型的的字符集):create database java charset utf8;
MySQL5.7默认使用拉丁文字符集不支持中文,MySQL8默认使用utf8,支持所有语言
MySQL的utf8其实不是完全体,比完全体的utf8少了emoji表情,但是MySQL提供了utf8mb4这样的字符集,这是MySQL所特有的字符集
3.3使用/选中 数据库:use 数据库名;
3.4.删除数据库:drop database 数据库名;
删除数据库非常危险,MySQL没有回收站的概念,这对自己和公司都是毁灭性的打击,一般公司会有权限或者备份,但也不要有这种危险的思想
上述操作是整体操作数据库,接下来讲述具体操作数据库内部的操作
我们在上面说了数据库中有很多表
在创建表之前我们先认识一下SQL语言的数据类型:
数据类型-SQL
1.数值类型(整型+浮点型)
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
常见的有 INT BIGINT FLOAT DOUBLE DECIMAL(*,*),demical(3,1)代表着小数长度位3,小数点后保留1位,例如22.1,99.3,77.3都符合该数据类型
2.日期类型
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 |
TIMESTAMP | 4 | '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |
DATETIME和TIMESTAMP 中较为常见的是TIMESTAMP 也就是我们常见的时间戳
3.字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
常见的有:VARCHAR(20),里面代表的是20个字节,VARCHAR有自适应机制,可以自动扩容,在开发中更多地使用VARCHAR
BLOB是用来存储的二进制数据,增删查改对二进制数据来说效率比较低下,所以平时会很少使用到,除非是一些特殊情况
表操作:
1.列出当前数据库的表:show tables;
2.创建表:create table 表名(列名 类型,列名 类型,列名 类型,.....);
create table ttt(t1 varchar(20),t2 blob,t3 decimal(3,1),t4 timestamp);
desc ttt; 查看该表
同一个表中的列名不能重复
3.查看该表结构:desc 表名;
desc代表着describe表示的意思,后面也会有desc,不过会代表着descand降序。下表中Type代表着数据类型,field代表着字段的含义,null/key/default/extra后面再讲,这涉及到主键之类的限制
4.删除表:drop table 表名;
comment是注释的意思,只在创建表时有效果,在之后查看表是没有注释的
删除数据表是比删除数据库更为严重的问题,有可能很久之后才发现问题,此时就是造成更深远影响,会损失更多的钱财,所以平时要慎重
下一期我们会详细介绍CRUD