MySQL数据库基础

1. 数据库介绍

为了解决文件保存数据的缺点,诞生出了利于管理数据的软件——数据库,数据库可以提供远程服务,即通过远程连接来使用数据库,因此也成为数据库服务器

数据库是一个 “ 客户端(client) - 服务器(server) ” 结构的程序,所有操作都是客户端通过网络给服务器发一个请求(request),然后服务器通过网络给客户端一个响应(response)

数据库分类

数据库大体可分为关系型数据库和非关系型数据库

关系型数据库(RDBMS):

是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个 关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:

  • 1. Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系 统。收费。
  • 2. MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
  • 3. SQL Server:微软的产品,安装部署在windows server上,适用于中大型项目。收费。

非关系型数据库:

(了解)不规定基于SQL实现。现在更多是指NoSQL数据库,如:

  • 1. 基于键值对(Key-Value):如 memcached、redis
  • 2. 基于文档型:如 mongodb
  • 3. 基于列族:如 hbase
  • 4. 基于图型:如 neo4j

关系型数据库与非关系型数据库的区别:

关系型数据库非关系型数据库
使用SQL不强制要求,一般不基于SQL实现
事务支持支持不支持
复杂操作支持不支持
海量读写操作效率低效率高
基本结构基于表和列,结构固定灵活性比较高
使用场景业务方面的OLTP系统用于数据的缓存、或基于统计分析的OLAP系统

注:OLTP(On-Line Transaction Processing)是指联机事务处理,OLAP(On-Line Analytical Processing)是指联机分析处理。

2. SQL分类

2.1 DDL数据定义语言,用来维护存储数据的结构

  • 代表指令: create, drop, alter

2.2 DML数据操纵语言,用来对数据进行操作

  • 代表指令: insert,delete,update
  • DML中又单独分了一个DQL,数据查询语言,代表指令: select

2.3 DCL数据控制语言,主要负责权限管理和事务

  • 代表指令: grant,revoke,commit

3. 数据库的操作

3.1 显示当前数据库

SHOW DATABASES;

3.2 创建数据库

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

create_specification:
    [DEFAULT] CHARACTER SET charset_name
    [DEFAULT] COLLATE collation_name

说明:

  • 大写的表示关键字
  • [] 是可选项
  • CHARACTER SET: 指定数据库采用的字符集
  • COLLATE: 指定数据库字符集的校验规则

示例: 创建名为 db_test1 的数据库

CREATE DATABASE db_test1;

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则 是:utf8_ general_ ci

如果系统没有 db_test2 的数据库,则创建一个名叫 db_test2 的数据库,如果有则不创建

CREATE DATABASE IF NOT EXISTS db_test2;

如果系统没有 db_test 的数据库,则创建一个使用utf8mb4字符集的 db_test 数据库,如果有则不创建

CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4;

说明:MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符。MySQL真正的utf8是 使用utf8mb4,建议大家都使用utf8mb4

3.3 使用数据库

use 数据库名;

3.4 删除数据库

语法:

DROP DATABASE [IF EXISTS] db_name;

说明:数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除

drop database if exists db_test1;
drop database if exists db_test2;

4. 常用数据类型

4.1 数值类型

分为整型和浮点型

数据类型大小说明对应java类型
BIT[ (M) ]M指定位 数,默认 为1二进制数,M范围从1到64, 存储数值范围从0到2^M-1常用Boolean对应BIT,此时 默认是1位,即只能存0和1
TINYINT1字节Byte
SMALLINT2字节Short
INT4字节Integer
BIGINT8字节Long
FLOAT(M, D)4字节单精度,M指定长度,D指定 小数位数。会发生精度丢失Float
DOUBLE(M, D)8字节Double
DECIMAL(M, D)M/D最大 值+2双精度,M指定长度,D表示 小数点位数。精确数值BigDecimal
NUMERIC(M, D)M/D最大 值+2和DECIMAL一样BigDecimal

扩展:

数值类型可以指定为无符号(unsigned),表示不取负数。

1字节(bytes)= 8bit

对于整型类型的范围:

1. 有符号范围:-2^(类型字节数*8-1)到2^(类型字节数*8-1)-1,如int是4字节,就 是-2^31到2^31-1

2. 无符号范围:0到2^(类型字节数*8)-1,如int就是2^32-1

尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。

 4.2 字符串类型

数据类型大小说明对应java类型
VARCHAR (SIZE)0-65,535字节可变长度字符串String
TEXT0-65,535字节长文本数据String
MEDIUMTEXT0-16,777,215字节中等长度文本数据String
BLOB0-65,535字节二进制形式的长文本数据byte[]

4.3 日期类型

数据类型大小说明对应java类型
DATETIME8字节范围从1000到9999年,不会进行时区的检索及转换java.util.Date、 java.sql.Timestamp
TIMESTAMP4字节范围从1970到2038年,自动检索当前时区并进行转换java.util.Date、 java.sql.Timestamp

5. 表的操作

需要操作数据库中的表时,需要先使用该数据库:

use db_test;

5.1 查看表结构

desc 表名;

 5.2 创建表

语法:

CREATE TABLE table_name (
    field1 datatype,
    field2 datatype,
    field3 datatype
);

可以使用comment增加字段说明

示例:

create table stu_test (
   id int,
   name varchar(20) comment '姓名',
   password varchar(50) comment '密码',
   age int,
   sex varchar(1),
   birthday timestamp,
   amout decimal(13,2),
   resume text
);

5.3 删除表

语法:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

示例:

-- 删除 stu_test 表
drop table stu_test;
-- 如果存在 stu_test 表,则删除 stu_test 表
drop table if exists stu_test;

6. 例题

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

  • 商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供 应商provider)
  • 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证 card_id)
  • 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)

SQL:

-- 创建数据库
create database if not exists db_test
default character set utf8 ;

-- 选择数据库
use db_test;

-- 创建数据库表
-- 商品
create table if not exists goods
(
   goods_id  int comment '商品编号',
   goods_name varchar(32) comment '商品名称',
   unitprice  int comment '单价,单位分',
   category  varchar(12) comment '商品分类',
   provider  varchar(64) comment '供应商名称'
);

-- 客户
create table if not exists customer
(
   customer_id  int comment '客户编号',
   name varchar(32) comment '客户姓名',
   address  varchar(256) comment '客户地址',
   email  varchar(64) comment '电子邮箱',
   sex bit comment '性别',
   card_id varchar(18) comment '身份证'
);

-- 购买
create table if not exists purchase
(
   order_id  int comment '订单号',
   customer_id int comment '客户编号',
   goods_id  int comment '商品编号', 
   nums  int comment '购买数量'
);
  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值