【MySQL】_1.数据库基础

目录

1.数据库介绍

1.1 数据结构与数据库

1.2 常见的数据库软件

1.3 数据库的分类

1.4 MySQL介绍

1.4.1 重要概念

1.4.2 学习内容

1.4.3 数据库服务器在硬盘上组织数据的方式

2. 数据库操作

2.1  显示当前数据库

2.2 创建数据库

2.3 选中数据库

2.4 删除数据库

3.常用数据类型

3.1 数值类型

3.2 字符串类型

3.3 日期类型

4. 表操作

4.1 查看数据库中的表

4.2 创建表

4.3 查看指定表的表结构

4.4 删除表

5. 简单商店数据库


1.数据库介绍

1.1 数据结构与数据库

(1)数据结构是一门研究数据如何组织的学科,服务于大量数据后续的增删查改;

(2)数据库是一类用于组织、保存、管理数据的软件,同样是为了后续进行增删查改,在数据库的实现过程中也应用到了很多数据结构;

1.2 常见的数据库软件

(1)数据库中最好的软件:Oracle,但由于其软件收费且必须搭配IBM小型机使用,故而使用并不是很广泛;

(2)数据库中使用最广泛的软件:MySQL;

(3)微软数据库:SQL Server;

(4)轻量级数据库:SQLite,整个程序就是一个exe可执行文件,体积大约为1M,常用于小型嵌入式系统,比如安卓系统就内置了sqlite;

以上数据库虽然在功能与操作上稍有差异,但都大同小异,基本相通;

注:嵌入式:生活中部分设备比如智能冰箱、空调、电视、投影仪等等也搭载了计算机,但只需要完成一些特定功能,不需要非常高的配置,在为其编程时与计算机编程也具有一些差异,就将以上设备称为嵌入式设备,开发以上设备就称为嵌入式开发;

1.3 数据库的分类

(1)关系型数据库:

对数据库中的数据格式较为严格,以上数据库统称为关系型数据库;

使用硬盘来保存数据,这与冯诺依曼体系有关,在Python第一篇文章中已经有所提及,具体内容请参考:CSDN

(2)非关系型数据库:

如redis,MongoDB,HBase等就是非关系型数据库,其功能相比关系型数据库要少一些,但是性能更高,更适合当下大数据分布式时代背景;

注:① 大数据:数据一个机器无法承载,就通常称为大数据;

② 分布式:这些数据需要多台机器相互配合,共同管理和存储,就称为“分布式”系统;

1.4 MySQL介绍

1.4.1 重要概念

MySQL是一个客户端服务器结构的程序:

(1)客户端(Client):主动发起交互的一方;

打开方式1:开始栏有:

打开就显示客户端本体,是一个命令行程序:

打开方式2:

也可使用cmd通过输入mysql命令启动,客户端本体就是mysql命令,

方式1就是这个命令的快捷方式:

(2)服务器(Server):被动接收交互的一方:

        ① 由于客户端发出请求是不定时的,故而一般服务器程序也要持续运行;

        ② 一个服务器同一时刻可能要给多个客户端提供服务;

        ③ 安装好MySQL后,在开始栏搜索服务有以下界面:

这就是MySQL的服务器; 

        ④ MySQL的服务器和客户端通过网络进行通信;

        ⑤ 客户端和服务器可以在同一个主机上(当前情况),也可以在不同的主机上;

(3)请求(Request):客户端给服务器发出的数据;

(4)响应(Response):服务器返回给客户端的数据;

基于以上定义,某个程序可能既是客户端和服务器;

其关系简图如下:

1.4.2 学习内容

① SQL编程语言:通过SQL完成对数据库数据的增删改查,不同的数据库软件可能对于SQL语法支持略有差异,但整体大同小异;

② 数据库背后的一些典型原理;

③ 通过java代码来操作数据库;※

在本专栏系列文章中,均以命令行界面操作为主;

1.4.3 数据库服务器在硬盘上组织数据的方式

关系型数据库组织数据的方式都是上图结构,

而非关系型数据库往往基于文档或键值对,格式较为松散,要求并不严格;

2. 数据库操作

2.1  显示当前数据库

注:(1)使用“ show databases; ” 显示数据库;

(2)其中show与databases直接有一个或多个空格,且使用英文分号为结尾;

(3)注意为databases而非database;

(4)执行完一个SQL之后会得到一个反馈,显示当前执行结果有多少行记录和消耗多少时间;

          set表示集合,sec表示秒;

2.2 创建数据库

创建成功后再查看数据库:

注:(1)使用“ create database [数据库名];  ”创建一个数据库;

(2)注意是database而非databases;

(3)数据库名一般由数字、字母、下划线构成且数字不能开头,名字不能是SQL中的关键字,如果二者冲突,就会报错,比如创建名为database的数据库,如果需要将关键字作为数据库名,可以使用反引号`把数据库名引起来

 (4)数据库名字不能重复

(5)SQL的关键字是大小写不敏感的,比如CREATE DATABASE和create database是一样的; 

(6)创建数据库时还可以指定字符集

平时常用的字符集为gbk(windows简体中文版默认字符集,2个字节表示一个汉字)和utf8(更通用的字符集,通常是3个字节表示一个汉字),其中C语言所使用的vs默认就是gbk字符集。

当在使用SQL时,如果不指定字符集,就很有可能插入中文失败;

语法为:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, 
create_specification] ...]

create_specification:
 [DEFAULT] CHARACTER SET charset_name   // 设置字符集
 [DEFAULT] COLLATE collation_name       // 设置约束关系

 示例代码:

2.3 选中数据库

注:(1)使用“ use [数据库名];”选中一个数据库;

(2)对某个数据库进行后续增删改查的操作,就必须先明确针对的数据库是哪一个;

2.4 删除数据库

注:(1)使用“ drop database [数据库名]; ”删除一个数据库;

(2)删除数据库一旦删除,难以恢复,故而删除操作需要谨慎;

3.常用数据类型

SQL的数据类型系统与C、java是非常相似的;

3.1 数值类型

数据类型 大小 说明 对应java类型 对应c类型
BIT[(M)]

M指定数,

默认为1

二进制数,M范围1~64,

存储数值范围0~2^M-1

常用boolean对应BIT,

即只能存0和1

char[]
TITYINT 1字节 Byte signed char
SMALLINT 2字节 Short short int
INT 4字节 Integer int
BIGINT 8字节 Long long long int
FLOAT(M,D) 4字节

单精度,M指定长度,

D指定小数位数,会发生精度丢失

Float float
DOUBLE(M,D) 8字节 Double double
DECIMAL(M,D) M/D最大值+2

双精度,M指定长度,

D指定小数位数,会发生精度丢失

BigDecimal char[]
NUMERIC(M,D) M/D最大值+2

双精度,M指定长度,

D指定小数位数,会发生精度丢失

BigDecimal char[]

注:(1)由于浮点数的内存存储结构,double和float表示某些数据时存在误差,不能精确表示,比如0.1+0.2==0.3会被判定为flase, 虽然存储空间小,计算速度快但可能存在误差,decimal使用了类似字符串的方式进行保存的,故而更精确,但存储空间更大,计算速度更慢;

(2)虽然MySQL存在无符号类型,但MySQL官方文档明确说明无符号类型不建议使用。

3.2 字符串类型

数据类型 大小 说明 对应java类型 对应c类型
VARCHAR(SIZE) 0~65535字节 可变长度字符串 String char[]
TEXT 0~65535字节 长文本数据 String char[]
MEDIUMTEXT 0~16777215字节 中等长度文本数据 String char[]
BLOB 0~65535字节(64KB) 二进制形式的长文本数据 byte[]

char[]

注:(1)对于VARCHAR类型,SIZE指定的是最大长度,单位是字符;,即假定指定name列,类型为varchar(10),即姓名最多可以存储10个字;

(2)BLOB存储的是二进制串,注意区别bit[]只能最多存储64bit,但BLOB可以存更长,如存小图片或小段音频,可以使用BLOB,但如果文件太大,一般会采用将图片存在硬盘上,在数据库中存储图片路径;

3.3 日期类型

数据类型 大小 说明 对应java类型 对应c类型
DATETIIME 8字节 范围:1000~9999年,不会进行时区的检索及转换 java.util.Date、java.sql.Timestamp MYSQL TIME
TIMESTAMP 4字节 范围:1970~2038年,自动检索当前时区并进行转换 java.util.Date、java.sql.Timestamp MYSQL TIME

4. 表操作

4.1 查看数据库中的表

注:先选中数据库再使用“ show tables; ”查看表,若没有选中数据库就查看表会报错:

4.2 创建表

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdemo1          |
+--------------------+
5 rows in set (0.00 sec)

mysql> use testdemo1;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table student (id int, name varchar(20));
Query OK, 0 rows affected (0.14 sec)

mysql> show tables;
+---------------------+
| Tables_in_testdemo1 |
+---------------------+
| student             |
+---------------------+
1 row in set (0.00 sec)

注解如下: 

注:(1)创建表时,需要指定列以及列的类型;

(2)使用“ create table [表名] (列名 类型,列名 类型...);  ”创建表,注意列名在前,类型在后;

(3)创建表时可以使用commend进行注释,但请注意commend只能在创建表时进行注释,相比之下更推荐“ -- ”和“ # ”进行注释;

注释只在源码中存在,在数据库中不会被保存起来;

4.3 查看指定表的表结构

mysql> show tables;
+---------------------+
| Tables_in_testdemo1 |
+---------------------+
| student             |
+---------------------+
1 row in set (0.00 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

注解如下: 

注:(1)使用“ desc [表名]; ”查看表结构;(desc是description的缩写)

4.4 删除表

mysql> drop table student;
Query OK, 0 rows affected (0.07 sec)

mysql> show tables;
Empty set (0.00 sec)

 注:(1)使用“ drop table[表名]; ”删除表;

(2)删除表和删除库都很危险,删除都需要谨慎;

(3)删除前可以增加if操作:存在再删除,不存在则不执行;

5. 简单商店数据库

有一个商店的数据,记录客户及购物情况,由以下三个表组成:

(1)商品goods(商品编号goods_id,商品名goods_name,单价unitprice,商品类别category,供应商provider);

(2)客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id);

(3)购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums);

试创建以下数据库及表,并展示表结构:

mysql> show tables;
+---------------------+
| Tables_in_testdemo1 |
+---------------------+
| customer            |
| goods               |
| purchase            |
+---------------------+
3 rows in set (0.00 sec)

mysql> desc customer;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| customer_id | int(11)      | YES  |     | NULL    |       |
| name        | varchar(50)  | YES  |     | NULL    |       |
| address     | varchar(512) | YES  |     | NULL    |       |
| email       | varchar(50)  | YES  |     | NULL    |       |
| sex         | varchar(5)   | YES  |     | NULL    |       |
| card_id     | varchar(20)  | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> desc goods;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| goods_id   | int(11)     | YES  |     | NULL    |       |
| goods_name | varchar(50) | YES  |     | NULL    |       |
| unitprice  | int(11)     | YES  |     | NULL    |       |
| category   | varchar(50) | YES  |     | NULL    |       |
| provider   | varchar(50) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> desc purchase;
+-------------+---------+------+-----+---------+-------+
| Field       | Type    | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| order_id    | int(11) | YES  |     | NULL    |       |
| customer_id | int(11) | YES  |     | NULL    |       |
| goods_id    | int(11) | YES  |     | NULL    |       |
| nums        | int(11) | YES  |     | NULL    |       |
+-------------+---------+------+-----+---------+-------+
4 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/m0_63299495/article/details/131773724