MySQL 的基础操作

数据库的基础操作

  • 1. 库操作
  • 2. 表的操作
  • 3. 数据类型

数据库是现代应用程序中至关重要的组成部分,通过数据库管理系统(DBMS)存储和管理数据。

1. 库操作

  1. 创建数据库
    创建数据库是开始使用数据库的第一步。下面是一些常见的创建数据库的示例:
-- 创建名为 db1 的数据库,使用 utf8 字符集
CREATE DATABASE db1 DEFAULT CHARACTER SET utf8;

-- 创建名为 db2 的数据库,指定字符集为 utf8
CREATE DATABASE db2 CHARSET=utf8;

-- 创建名为 db3 的数据库,指定字符集为 utf8,校验规则为 utf8_general_ci
CREATE DATABASE db3 CHARSET=utf8 COLLATE utf8_general_ci;
  1. 查看系统默认字符集和校验规则
    您可以使用以下命令查看系统默认字符集和校验规则:
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
  1. 查看数据库支持的字符集和校验规则
    您可以使用以下命令查看数据库支持的字符集和校验规则:
SHOW CHARSET;
SHOW COLLATION;
  1. 查看数据库
    您可以使用以下命令查看当前数据库中的所有数据库:
SHOW DATABASES;
  1. 显示数据库创建语句
    您可以使用以下命令显示数据库的创建语句:
SHOW CREATE DATABASE database_name;
  1. 修改数据库
    您可以使用以下命令修改数据库的字符集和校验规则:
ALTER DATABASE database_name CHARACTER SET charset_name;
ALTER DATABASE database_name COLLATE collation_name;
  1. 删除数据库
    如果需要删除数据库,可以使用以下命令:
DROP DATABASE database_name;
  1. 备份数据
    您可以使用 mysqldump 命令将数据库备份到文件中:
mysqldump -u username -p database_name > backup_file.sql
  1. 恢复数据
    要恢复备份的数据,可以使用 source 命令:
source /path/to/backup_file.sql;
  1. 查看连接情况
    您可以使用以下命令查看当前数据库连接情况:
SHOW PROCESSLIST;

2. 表的操作

数据库表是组织和存储数据的关键。在数据库中,您可以通过创建、修改、删除表等操作来管理数据。

  1. 创建表
    表的创建是数据库设计的第一步,通过以下语法可以创建表:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

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

具体示例可以参考以下案例:

create table users (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码',
birthday date comment '生日'
) character set utf8 engine MyISAM;
  1. 查看表结构

使用 DESC 命令可以查看表的结构:

DESC users;

在这里插入图片描述

Field(字段):列名,分别是 id、name、password 和 birthday。
Type(类型):数据类型,分别是 int(11)、varchar(20)、char(32) 和 date。
Null(可为空):表示该列是否允许为空,这里都是YES,表示允许为空。
Key(键):表示该列是否为主键,这里为空。
Default(默认值):表示该列的默认值,这里都是NULL,表示没有默认值。
Extra(额外信息):包含了关于列的额外信息,这里都为空。

  1. 修改表

在项目实际开发中,我们经常需要修改表的结构,比如添加字段、修改字段属性、删除字段等。以下是一些常见的修改表的操作:

-- 在users表添加记录
INSERT INTO users VALUES (1, 'a', 'b', '1982-01-04'), (2, 'b', 'c', '1984-01-04');
-- 在users表添加一个字段,用于保存图片路径
ALTER TABLE users ADD assets VARCHAR(100) COMMENT '图片路径' AFTER birthday;
-- 修改name字段长度为60
ALTER TABLE users MODIFY name VARCHAR(60);
-- 删除password列
ALTER TABLE users DROP COLUMN password;
-- 修改表名为employee
ALTER TABLE users RENAME TO employee;
-- 将name列修改为xingming
ALTER TABLE employee CHANGE COLUMN name xingming VARCHAR(60);
  1. 删除表

如果需要删除表,可以使用以下命令:

DROP TABLE IF EXISTS table_name;

3. 数据类型

数值类型
BIT(M): 位类型,M指定位数,默认为1,范围为1-64。
TINYINT [UNSIGNED]: 字节最小值为 -128,最大值为127(有符号),范围为0~255(无符号)。
BOOL: 使用01表示真和假。
SMALLINT [UNSIGNED]: 带符号范围为 -3276832767,无符号范围为0~65535。
INT [UNSIGNED]: 带符号范围为 -21474836482147483647 ,无符号范围为0~4294967295
BIGINT [UNSIGNED]: 带符号范围为 -92233720368547758089223372036854775807 ,无符号范围为 0~18446744073709551615
FLOAT(M,D) [UNSIGNED]: 单精度浮点数,M指定显示长度,D指定小数位数,占用4字节。
DOUBLE(M,D) [UNSIGNED]: 双精度浮点数,M指定显示长度,D指定小数位数,占用8字节。
DECIMAL(M,D) [UNSIGNED]: 定点数,M指定长度,D表示小数位数。

二进制类型
BLOB: 二进制大对象,用于存储二进制数据。
BIT(M): 位类型,M指定位数,默认为1,范围为1-64

文本类型
TEXT: 大文本,不支持全文索引,不支持默认值。
CHAR(size): 固定长度字符串,最大255
VARCHAR(SIZE): 可变长度字符串,最大长度65535

时间日期类型
DATE: 日期类型,格式为yyyy-mm-dd
DATETIME: 日期时间类型,格式为yyyy-mm-dd hh:mm:ss
TIMESTAMP: 时间戳类型,从1970年开始的yyyy-mm-dd hh:mm:ss
TIME: 时间类型,格式为hh:mm:ss

String类型
ENUM类型: 枚举类型,表示一列值,每个值来自表创建时在列规定中显示的一列值。
SET类型: 集合类型,表示一列值,可以有零或多个值,值来自表创建时规定的允许的一列值。

  1. 整数类型

MySQL提供了多种整数类型,包括TINYINT、SMALLINT、INT、BIGINT等。这些类型可以是有符号的或无符号的,默认情况下是有符号的。对于存储范围更广泛的数据,可以考虑使用无符号整数类型,但需要注意越界插入的问题。

CREATE TABLE users (
    id INT UNSIGNED,
    age TINYINT
);

例子:

-- 正确的插入示例
INSERT INTO users (id, age) VALUES (1, 25);
-- 错误的插入示例(越界)
INSERT INTO users (id, age) VALUES (-1, 128);
  1. 位类型

bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1

创建了一个名为 flags 的表,其中包含了三个名为 status 的列,分别指定了长度为 123 位的 BIT 数据类型,用于存储不同长度的比特位状态值,BIT 数据类型的最大长度为 64 位。

CREATE TABLE flags (
    status1 BIT(1),  -- 数字范围:0 到 1
    status2 BIT(2),  -- 数字范围:00 到 11
    status3 BIT(3)   -- 数字范围:000 到 111
);
  1. 浮点数

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

有符号浮点数范围
考虑一个有符号的float(6, 3)类型,它表示的范围是什么?float(6, 3)表示总共有6位数字,其中3位是小数部分。因此,剩余的3位是整数部分。对于有符号的浮点数,其中一位用于表示正负号。

因此,对于float(6, 3),可以表示的范围是从 -999.999999.999

无符号浮点数范围
如果我们将浮点数指定为无符号的,那么它的范围将从0开始。比如,对于float(6, 3) unsigned,范围将是从 0999.999

-- 创建表 tt7,其中 salary 是一个有符号的 float(6, 3) 类型的列
CREATE TABLE tt7 (
    id INT,
    salary FLOAT(6, 3)
);

-- 向 tt7 表插入一条数据
INSERT INTO tt7 VALUES (1, -999.999);
-- 向 tt7 表插入一条数据
INSERT INTO tt7 VALUES (2, 999.999);
  1. char数据类型

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

示例:

-- 创建表 tt9,其中 name 是一个长度为 2 的固定长度字符串
CREATE TABLE tt9 (
    id INT,
    name CHAR(2)
);

-- 向 tt9 表插入数据
INSERT INTO tt9 VALUES (100, 'ab');
INSERT INTO tt9 VALUES (101, '中国');

-- 尝试向 char 类型的列插入超出长度的值
INSERT INTO tt9 VALUES (102, 'abc'); -- 错误:超出了指定的长度

错误示例:

-- 创建表 tt11,尝试使用超出最大长度的值
CREATE TABLE tt11 (
    name CHAR(256) -- 错误:超过了最大长度限制
);

char(L) 数据类型中,L 表示的是可以存储的字符长度,而不是字节长度。这一点与 C 语言中的字符长度概念略有不同C 语言中的字符长度通常是以字节为单位。因此,在使用 char 数据类型时,需要根据实际需求来确定合适的长度,并注意字符编码对存储空间的影响。

  1. varchar

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

-- 创建表 tt10,其中 name 是一个可变长度字符串,最大长度为 6
CREATE TABLE tt10 (
    id INT,
    name VARCHAR(6)
);

-- 向 tt10 表插入数据
INSERT INTO tt10 VALUES (100, 'hello');
INSERT INTO tt10 VALUES (101, '我爱你,中国');

注意事项

字符编码影响长度: varchar 类型的长度受字符编码影响。在 utf8 编码下,一个字符通常占用 3 个字节,而在 gbk编码下,一个字符通常占用 2 个字节。 最大长度限制: varchar 类型的最大长度为 65535个字节,但需要留出一部分字节用于记录数据大小,因此有效字节数是 65532。尝试超出最大长度限制会导致错误。

错误示例:

-- 尝试创建表时超出最大长度限制
CREATE TABLE tt11 (
    name VARCHAR(21845) CHARSET=utf8 -- 错误:超过了最大长度限制
);

-- 尝试插入超出最大长度限制的数据
INSERT INTO tt11 VALUES ('a' REPEAT(21845)); -- 错误:超出了指定的长度
  1. char 和 varchar 比较

实际存储

char: 固定长度字符串,存储空间在创建表时分配,不受实际存储内容长度影响。
varchar:可变长度字符串,存储空间在插入数据时动态分配,根据实际存储内容长度调整。

存储空间分配:

char(4): 如果存储内容不足指定长度,会用空格填充至指定长度,因此实际占用的存储空间是固定的。
varchar(4): 根据实际存储内容长度动态分配存储空间,不会浪费空间。

假设有以下数据:

“abcd” 是 4 个字符长度
“A” 是 1 个字符长度
“Abcde” 是 5 个字符长度

在使用 char 和 varchar 存储这些数据时:

char(4) 存储方式

“abcd” 占用 4 * 3=12 个字节
“A” 占用 4 * 3=12 个字节,需要用空格填充至指定长度
“Abcde” 超过4个字符

varchar(4) 存储方式

“abcd” 占用 4 * 3+1=13 个字节(1 个字节用于记录存储内容长度)
“A” 占用 1 * 3+1=4 个字节
“Abcde” 超过4个字符

  1. 日期和时间类型

date 类型
date 类型表示日期,格式为 yyyy-mm-dd,占用三个字节。它用于存储不包含具体时间的日期信息。

datetime 类型
datetime 类型表示日期和时间,格式为 yyyy-mm-dd HH:ii:ss,范围从 1000 年到 9999 年,占用八个字节。它用于存储具体的日期和时间信息。

timestamp 类型
timestamp 类型也表示日期和时间,格式与 datetime 完全一致,但其范围从 1970 年开始,占用四个字节。它通常用于记录数据的更新时间或创建时间,在数据更新时自动更新为当前时间。

-- 创建表
CREATE TABLE birthday (
    t1 DATE,
    t2 DATETIME,
    t3 TIMESTAMP
);

-- 插入数据
INSERT INTO birthday(t1, t2) VALUES ('1997-07-01', '2008-08-08 12:01:01');

以上插入了两种时间数据,日期和时间都被正确存储在对应的列中。此时 timestamp 列会自动填入当前时间作为默认值。

  1. Enum 和 Set 类型

Enum 类型
语法:ENUM(‘选项1’, ‘选项2’, ‘选项3’, …)
枚举类型提供了若干个选项的值,但实际上只存储其中一个值。
出于效率考虑,枚举值实际上存储的是相应选项值的数字索引,从1开始,最多65535个。

Set 类型
语法:SET(‘选项值1’, ‘选项值2’, ‘选项值3’, …)
集合类型提供了若干个选项的值,但实际上可存储其中任意多个值。
Enum 类型类似,出于效率考虑,集合值实际上存储的是相应选项值的数字索引,但索引值是通过二进制位来表示的。

CREATE TABLE votes (
    username VARCHAR(30),
    hobby SET('登山', '游泳', '篮球', '武术'),
    gender ENUM('男', '女')
);

-- 插入数据
INSERT INTO votes VALUES ('雷锋', '登山,武术', '男');
INSERT INTO votes VALUES ('Juse', '登山,武术', '男');
INSERT INTO votes VALUES ('LiLei', '登山', '男');
INSERT INTO votes VALUES ('HanMeiMei', '游泳', '女');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/445322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嘉绩咨询创新招商落地方案,助力品牌加速市场渗透

领先的渠道招商全案系统孵化平台——嘉绩咨询,今日发布了其创新的招商落地方案,此举标志着企业在加速品牌拓展和市场渗透方面迈出了坚实的步伐。嘉绩咨询专注于为企业提供包容性和深度一体化的服务,从招商教育、招商落地到项目孵化等多方位助…

【leetcode热题】 二叉树的后序遍历

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1]示例 2: 输入:root [] 输出:[]示例 3: 输入:root [1] 输出…

微信小程序uniapp+django+python的酒店民宿预订系统ea9i3

Android的民宿预订系统设计的目的是为用户提供民宿客房、公告信息等方面的平台。 与PC端应用程序相比,Android的民宿预订系统的设计主要面向于民宿,旨在为管理员和用户、商家提供一个Android的民宿预订系统。用户可以通过Android及时查看民宿客房等。 An…

FreeRTOS操作系统学习——同步互斥与通信

同步(Synchronization) 同步是一种机制,用于确保多个任务能够按照特定的顺序协调执行或共享数据。当一个任务需要等待其他任务完成某个操作或满足某个条件时,同步机制可以帮助任务进行协调和等待。 在FreeRTOS中,常见…

力扣--动态规划5.最长回文子串

class Solution { public:string longestPalindrome(string s) {// 获取输入字符串的长度int n s.size();// 如果字符串长度为1,直接返回原字符串,因为任何单个字符都是回文串if (n 1)return s;// 创建一个二维数组dp,用于记录子串是否为回…

【Python】成功解决ModuleNotFoundError: No module named ‘seaborn’

【Python】成功解决ModuleNotFoundError: No module named ‘seaborn’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 …

掌握项目进度管理:确保项目按时交付的关键策略

项目进度管理是确保项目按时、按预算完成的重要环节。在项目执行过程中,项目进度可能会受到各种因素的影响,如资源不足、任务延误、需求变更等。因此,掌握项目进度管理的关键策略对于项目经理来说至关重要。本文将介绍一些实用的项目进度管理…

011-keep-alive详解

keep-alive详解 1、简介2、keep-alive的使用效果未使用keep-alive的效果图使用keep-alive的效果图include和exclude指定是否缓存某些组件使用keep-alive的钩子函数执行顺序问题 3、keep-alive的应用场景举例4、总结 1、简介 keep-alive 是 Vue 的内置组件,当它包裹…

什么是自动化测试?什么情况下使用?

什么是自动化测试? 自动化测试是指把以人为驱动的测试行为转化为机器执行的过程。实际上自动化测试往往通过一些测试工具或框架,编写自动化测试脚本,来模拟手工测试过程。比如说,在项目迭代过程中,持续的回归测试是一项非常枯燥…

解决阿里云服务器开启frp服务端,内网服务器开启frp客户端却连接不上的问题

解决方法: 把阿里云自带的Alibabxxxxxxxlinux系统 换成centos 7系统!!!! 说一下我的过程和问题:由于我们内网的服务器在校外是不能连接的,因此我弄了个阿里云服务器做内网穿透,所谓…

【C++】二叉树进阶之二叉搜索树

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握二叉搜索树,能自己模拟实现二…

使用 Docker 部署 Next Terminal 轻量级堡垒机

1)Next Terminal 介绍 官网:https://next-terminal.typesafe.cn/ GitHub:https://github.com/dushixiang/next-terminal 想必经常玩服务器的都了解过 堡垒机,类似于跳板机,但与跳板机的侧重点不同。堡垒机的主要功能是…

20240310-1-Java后端开发知识体系

Java 基础 知识体系 Questions 1. HashMap 1.8与1.7的区别 1.71.8底层结构数组链表数组链表/红黑树插入方式头插法尾插法计算hash值4次位运算5次异或运算1次位运算1次异或运算扩容、插入先扩容再插入先插入再扩容扩容后位置计算重新hash原位置或原位置旧容量 (1) 扩容因子…

排查线上JVM CPU飙升使用率高和线程死锁问题

一、排查CPU飙升使用率高问题 在开始前新建一个 SpringBoot 项目构建CPU使用率高的场景&#xff1a; RestController public class JvmThread1Controller {ThreadPoolExecutor executor new ThreadPoolExecutor(10,15,2,TimeUnit.SECONDS,new LinkedBlockingDeque<>(5…

【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

目录 &#x1f384;API介绍&#x1f338;ServerSocket API&#x1f338;Socket API &#x1f340;TCP中的长短连接&#x1f333;建立TCP回显客户端与服务器&#x1f338;TCP搭建服务器&#x1f338;TCP搭建客户端 ⭕总结 TCP服务器与客户端的搭建需要借助以下API &#x1f384;…

springcloud-alibaba Sentinel入门

Releases alibaba/Sentinel GitHubSentinel下载官方 在cmd 里面运行 启动命令 java -jar sentinel-dashboard-1.8.6.jar 启动成功前提 java环境 &#xff0c;已经注册到服务注册中心&#xff0c;8080端口没有被占用 启动后访问地址为 qhttp://localhost:8080http://lo…

Clion开发STM32之printf的缓冲区验证方式

前言 clion开发stm32时&#xff0c;涉及到printf函数的重写&#xff0c;一般我们重写__io_putchar函数经发现printf函数在没有加换行符时&#xff0c;数据不会立刻通过串口发送数据&#xff0c;而是等到1024字节之后发送数据 测试 主程序 现象 debug调试 不加换行的情况 总…

Windows系统安装Tomcat并结合内网穿透实现公网访问本地网页

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个拥有强大功能的轻量级服务器&#xff0c;由于其可以实…

万界星空科技MES系统中的车间管理的作用

在了解mes生产管理系统的作用包括哪些方面之前&#xff0c;我们先来了解一下作为生产管理信息化的关键部分&#xff0c;车间管理系统包含哪几个部分&#xff1a;一、mes系统中的车间管理通常包含以下部分&#xff1a; 1、设备管理&#xff1a;用于监控车间内的设备状态&#xf…

网络安全: Kali Linux 进行 MSFvenom 程序利用

目录 一、实验 1.环境 2. Kali Linux 进行 MSFvenom 程序利用 3. 创建计划任务自动运行 MSFvenom 程序 二、问题 1.在线加密解密 2.MSF 运行失败 3.MobaXterm 连接Ubuntu 失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本IP备注Kali Linux20…