前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【MySQL】数据库基础&&库/表的操作&&数据类型详解

【MySQL】数据库基础&&库/表的操作&&数据类型详解

作者头像
用户10925563
发布2025-02-16 19:59:52
发布2025-02-16 19:59:52
6300
代码可运行
举报
文章被收录于专栏:c/c++&&linuxc/c++&&linux
运行总次数:0
代码可运行

1.什么是数据库

存储数据用文件就可以了,为什么要数据库呢?

首先,文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件才程序中控制不方便

数据库存储的介质:

  • 磁盘
  • 内存

为解决上述问题,专家们设计出更加利于管理数据的东西-数据库,能更加有效的管理数据,数据库的水平是衡量一个程序员水平的重要指标

2.主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中

3.基本使用

3.1 MySQL安装

CentOS 6.5下编译安装MySQL 5.6.14_野马红尘的技术博客_51CTO博客

https://zhuanlan.zhihu.com/p/49046496

Windows下通过MySQL Installer安装MySQL服务_野马红尘的技术博客_51CTO博客

ubuntu 安装 MySql_ubuntu安装mysql-CSDN博客

3.2 连接服务器

代码语言:javascript
代码运行次数:0
复制
mysql -h 127.0.0.1 -P 3306 -u root -p

注意:

  • 如果没有写 -h 127.0.0.1 默认是连接本地
  • 如果没有写 -P 3306 默认是连接3306端口号

3.3 服务器管理

  • 执行 win+r 输入 services.msc 打开服务管理器
  • 通过下图左侧停止,暂停,重启动按钮进行服务管理

3.4 服务器、数据库、表关系

所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:

3.5 使用案例

创建数据库

代码语言:javascript
代码运行次数:0
复制
create database helloworld;

使用数据库

代码语言:javascript
代码运行次数:0
复制
use helloworld;

创建表

代码语言:javascript
代码运行次数:0
复制
create table student(
    id int,
    name varchar(32),
    gender varchar(2)
);

表中插入数据

代码语言:javascript
代码运行次数:0
复制
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');

查询表中的数据

代码语言:javascript
代码运行次数:0
复制
select * from student;

3.6 数据逻辑存储

3.7 MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性

4.SQL分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create, drop, alter
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作 代表指令: insert,delete,update
  • DML中又单独分了一个DQL,数据查询语言 代表指令: select
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务 代表指令: grant,revoke,commit

5.存储引擎

存储引擎是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法

MySQL的核心就是插件式存储引擎,支持多种存储引擎

5.1 查看存储引擎

代码语言:javascript
代码运行次数:0
复制
show engines;

5.2 存储引擎对比

6.库的操作

6.1 创建数据库

语法:

代码语言:javascript
代码运行次数:0
复制
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: 指定数据库字符集的校验规则

6.2 创建数据库案例

创建名为db1的数据库

  • 在mysql8之前当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci
  • 在mysql8之后默认字符集为utf8mb4,校验规则是uft8mb4_0900_ai_ci

6.3 字符集和校验规则

6.3.1 查看系统默认字符集以及校验规则
代码语言:javascript
代码运行次数:0
复制
show variables like 'character_set_database';
show variables like 'collation_database';
6.3.2 查看数据库支持的字符集
代码语言:javascript
代码运行次数:0
复制
show charset;

字符集主要是控制用什么语言。比如utf8就可以使用中文

6.3.3 查看数据库支持的字符集校验规则
代码语言:javascript
代码运行次数:0
复制
show collation;
6.3.4 校验规则对数据库的影响
6.3.4.1 不区分大小写

创建一个数据库,校验规则使用utf8_ general_ ci/utf8mb4_0900_ai_ci[不区分大小写]

代码语言:javascript
代码运行次数:0
复制
create database test1 collate utf8_general_ci;

use test1;

create table person(name varchar(20));

insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
6.3.4.2 区分大小写

创建一个数据库,校验规则使用utf8_ bin[区分大小写]

代码语言:javascript
代码运行次数:0
复制
create database test2 collate utf8_bin;

use test2;

create table person(name varchar(20));

insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');

6.4 操纵数据库

6.4.1 查看数据库
代码语言:javascript
代码运行次数:0
复制
show databases;
6.4.2 显示创建语句
代码语言:javascript
代码运行次数:0
复制
show create database 数据库名;

说明:

  • MySQL 建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
  • /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话
6.4.3 修改数据库

语法:

代码语言:javascript
代码运行次数:0
复制
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]

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

说明:

  • 对数据库的修改主要指的是修改数据库的字符集,校验规则
6.4.4 数据库删除
代码语言:javascript
代码运行次数:0
复制
DROP DATABASE [IF EXISTS] db_ name;

执行删除之后的结果:

  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

注意:不要随意删除数据库

6.4.5 备份和恢复
6.5.4.1 备份
代码语言:javascript
代码运行次数:0
复制
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

可以打开看看 .sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句

都装载这个文件中

6.5.4.2 还原
代码语言:javascript
代码运行次数:0
复制
mysql> source /home/dc/mysql_test1/test1.sql;
6.4.5.3 注意事项

如果备份的不是整个数据库,而是其中的一张表,怎么做?

代码语言:javascript
代码运行次数:0
复制
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql

同时备份多个数据库

代码语言:javascript
代码运行次数:0
复制
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

如果备份一个数据库时,没有带上 -B 参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source 来还原

6.4.6 查看连接情况

语法:

代码语言:javascript
代码运行次数:0
复制
show processlist;

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况

7.表的操作

7.1 创建表

语法:

代码语言:javascript
代码运行次数:0
复制
CREATE TABLE table_name (
    field1 datatype,
    field2 datatype,
    field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎

说明:

  • field 表示列名
  • datatype 表示列的类型
  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

7.2 创建表案例

代码语言:javascript
代码运行次数:0
复制
create table users (
    id int,
    name varchar(20) comment '用户名',
    password char(32) comment '密码是32位的md5值',
    birthday date comment '生日'
) character set utf8 engine MyISAM;

说明:

  • 不同的存储引擎,创建表的文件不一样。
  • users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是: users.frm :表结构 users.MYD :表数据 users.MYI :表索引

7.3 查看表结构

代码语言:javascript
代码运行次数:0
复制
desc 表名;

7.4 修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表

代码语言:javascript
代码运行次数:0
复制
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,columndatatype]...);

ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,columndatatype]...);

ALTER TABLE tablename DROP (column);

案例:

  • 在users表中添加两条记录
代码语言:javascript
代码运行次数:0
复制
mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');
  • 在users表添加一个字段,用于保存图片路径
代码语言:javascript
代码运行次数:0
复制
mysql> alter table users add assets varchar(100) comment '图片路径' after birthday;
  • 修改name,将其长度改成60
代码语言:javascript
代码运行次数:0
复制
mysql> alter table users modify name varchar(60);
  • 删除password列

注意:删除字段一定要小心,删除字段及其对应的列数据都没了

代码语言:javascript
代码运行次数:0
复制
mysql> alter table users drop password;
  • 修改表名为employee
代码语言:javascript
代码运行次数:0
复制
mysql> alter table users rename to employee;

to:可以省掉

  • 将name列修改为xingming
代码语言:javascript
代码运行次数:0
复制
mysql> alter table employee change name xingming varchar(60); 
--新字段需要完整定义

7.5 删除表

语法格式:

代码语言:javascript
代码运行次数:0
复制
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

示例:

代码语言:javascript
代码运行次数:0
复制
drop table t1;

8.数据类型

8.1 数据类型分类

8.2 数值类型

8.2.1 tinyint类型

数值越界测试:

说明:

  • 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
  • 可以通过UNSIGNED来说明某个字段是无符号的

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

8.2.2 bit类型

基本语法:

代码语言:javascript
代码运行次数:0
复制
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

举例:

  • bit字段在显示时,是按照ASCII码对应的值显示
  • 如果我们有这样的值,只存放 0 或 1 ,这时可以定义 bit(1) 。这样可以节省空间
8.2.3 小数类型
8.2.3.1 float

语法:

代码语言:javascript
代码运行次数:0
复制
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

案例:

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入

如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99

8.2.3.2 decimal

语法:

代码语言:javascript
代码运行次数:0
复制
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
  • decimal(5,2) 表示的范围是 -999.99 ~ 999.99
  • decimal(5,2) unsigned 表示的范围 0 ~ 999.99
  • decimal和float很像,但是有区别:
  • float和decimal表示的精度不一样

说明:float表示的精度大约是7位。

  • decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略, 默认是10

建议:如果希望小数的精度高,推荐使用decimal

8.3 字符串类型

8.3.1 char

语法:

代码语言:javascript
代码运行次数:0
复制
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

案例(char):

说明:

  • char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255
8.3.2 varchar

语法:

代码语言:javascript
代码运行次数:0
复制
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

案例:

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532
  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)
8.3.3 char和varchar比较

如何选择定长或变长字符串?

  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
  • 如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是要保证最长的能存进去
  • 定长的磁盘空间比较浪费,但是效率高
  • 变长的磁盘空间比较节省,但是效率低
  • 定长的意义是,直接开辟好对应的空
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少

8.4 日期和时间类型

常用的日期有如下三个:

  • date :日期 'yyyy-mm-dd' ,占用三字节
  • datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
  • timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节

案例:

更新数据

8.5 enum和set

语法:

  • enum:枚举,“单选”类型;
  • enum('选项1','选项2','选项3',...);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号

  • set:集合,“多选”类型;
  • set('选项值1','选项值2','选项值3', ...);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个

案例:

有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]

集合查询使用find_ in_ set函数:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是数据库
  • 2.主流数据库
  • 3.基本使用
    • 3.1 MySQL安装
    • 3.2 连接服务器
    • 3.3 服务器管理
    • 3.4 服务器、数据库、表关系
    • 3.5 使用案例
    • 3.6 数据逻辑存储
    • 3.7 MySQL架构
  • 4.SQL分类
  • 5.存储引擎
    • 5.1 查看存储引擎
    • 5.2 存储引擎对比
  • 6.库的操作
    • 6.1 创建数据库
    • 6.2 创建数据库案例
    • 6.3 字符集和校验规则
      • 6.3.1 查看系统默认字符集以及校验规则
      • 6.3.2 查看数据库支持的字符集
      • 6.3.3 查看数据库支持的字符集校验规则
      • 6.3.4 校验规则对数据库的影响
    • 6.4 操纵数据库
      • 6.4.1 查看数据库
      • 6.4.2 显示创建语句
      • 6.4.3 修改数据库
      • 6.4.4 数据库删除
      • 6.4.5 备份和恢复
      • 6.4.6 查看连接情况
  • 7.表的操作
    • 7.1 创建表
    • 7.2 创建表案例
    • 7.3 查看表结构
    • 7.4 修改表
    • 7.5 删除表
  • 8.数据类型
    • 8.1 数据类型分类
    • 8.2 数值类型
      • 8.2.1 tinyint类型
      • 8.2.2 bit类型
      • 8.2.3 小数类型
    • 8.3 字符串类型
      • 8.3.1 char
      • 8.3.2 varchar
      • 8.3.3 char和varchar比较
    • 8.4 日期和时间类型
    • 8.5 enum和set
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档