当前位置: 首页 > news >正文

MySQL 库表操作 +数据类型+ 基础概念全梳理----《Hello MySQL!》(2)

文章目录

  • 前言
  • MySQL数据库初步认识
    • 服务器,数据库和表的关系
  • MySQL体系的架构
  • MySQL的基本使用
    • 连接服务器
  • SQL的分类
  • 存储引擎
  • 创建数据库
  • 字符集和校验规则
    • 查看系统默认字符集和校验规则
    • 查看数据库支持的字符集和校验规则
    • 校验规则对数据库的影响
  • 查看MySQL的连接情况
  • 使用数据库
    • 查看数据库
    • 显示创建语句
    • 修改数据库
    • 删除数据库
    • 数据库的备份
  • MySQL表的操作
    • 创建表
    • 查看表
    • 修改表
    • 查询表中数据
    • 删除表
  • MySQL数据类型的分类
    • 数值类型
      • tinyint
      • bit
      • 小数类型
        • float
        • decimal
    • 字符串类型
      • char
      • varchar
    • 日期和时间的类型
    • enum和set

前言

MySQL 作为目前最主流的关系型数据库,是后端开发的基本功。本文聚焦 MySQL 最核心的基础内容,不搞花里胡哨,只讲实用干货。

文章涵盖 MySQL 基础概念、C/S 架构、数据库的创建 / 查看 / 修改 / 删除、数据表的全量操作、SQL 分类、存储引擎、字符集校验规则、数据库备份还原,以及MySQL 核心数据类型(数值、字符串、日期时间、enum/set 等)等关键知识点,搭配大量命令示例与原理说明,看完就能上手实操,帮你快速搭建起 MySQL 基础知识体系,少走弯路。

MySQL数据库初步认识

mysql(也就是MySQL):是数据库服务的客户端

mysqld:是数据库服务的服务器端(也叫做数据库服务)

数据库:一般指的是再磁盘或者内存中存储特定结构组织的数据(也就是在磁盘上存储的一套数据库方案)

但是一般日常说mysql或者mysql数据库或数据库通常指的是一整个mysql体系

mysql体系的本质:基于C(mysql)S(mysqld)模式的一种网络服务

当然,除了MySQL以外,还要其他的数据库,比如:SQL Sever

虽然一般的文件提供了数据的存储功能,但是对于用户来说,文件并没有提供非常好的数据内容的管理能力

引申:MySQL对SQL的关键字是不区分大小写的

eg:create database t1;CREATE DATABASE t1;是一样的

服务器,数据库和表的关系

建立数据库,本质就是Linux下搞一个目录

在数据库内的目录里面建立表(表是二进制文件),本质就是在Linux下创建对应的文件而已

数据库的本质也是文件–只不过是数据库服务在帮忙进行管理

所谓的安装数据库服务器,其实就是装了一个数据库管理系统程序,这个程序可以管理多个数据库

MySQL体系的架构

MySQL的基本使用

连接服务器

指令:mysql -h 要连接的mysqld的主机地址 -P 端口号 -u 用户名 -p

eg:mysql -h 127.0.0.1 -P 3306 -u root -p

这个-p是指明要输入密码(注意:密码输入时是不回显的)

没有写-h 要连接的mysqld的主机地址默认是连接本地

没有写-P 端口号默认是3306

mysql -uroot -p其实就是mysql -h 127.0.0.1 -P 3306 -u root -p的简写

SQL的分类

DDL(数据定义语言):用来维护存储数据的结构的 比如:create

DML(数据操纵语言):用来对数据进行操作的 比如:insert

DCL(数据控制语言):主要负责权限管理和事务的 比如:grant

存储引擎

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

查看存储引擎的方法:show engines;

show engines \G的话,显示的会不乱一些

存储引擎的话:主要用的是MylSAMInnoDB(但是InnoDB用的又比MylSAM多很多)

创建数据库

格式:create database [if not exists] db_name [create_specification...];

create_specificationcharacter set charset_name(用charset=charset_name是一样的)和collate collation_name(用collate=collation_name也是一样的)

[]表示是可选项

if not exists表示 如果还没这个db_name就会创建数据库;如果已经存在的话,就会直接警告(不是报错)

db_name:数据库的名字

character set charset_name:指定数据库采用的字符集,没写就默认是配置文件里的值(配置文件里一般是utf8)

collate collation_name:指定数据库字符集的校验规则,没写就默认是配置文件里的值(配置文件里一般是utf8_general_ci)

使用举例: create databaseifnot exists text1charset=utf8 collate utf8_general_ci;本质就是在/var/lib/mysql下创建一个目录

不要尝试在没启动mysql的情况下去在那个目录下去创建

–虽然是可行的,但是是不符合规矩的

引申:mysql里面的关键字都是大小写不敏感的

字符集和校验规则

查看系统默认字符集和校验规则

查看系统默认字符集:show variables like'character_set_database';查看系统默认校验规则:show variables like'collation_database';

引申:%是MySQL 中LIKE语句的 “通配符”

eg:show variables like 'collation_%';会看到所有以 “collation_” 开头的变量名

查看数据库支持的字符集和校验规则

查看数据库支持的字符集:show charset;查看数据库支持的校验规则:show collation;

数据库字符集(数据库编码集):决定可以存储什么类型的东西eg:utf8支持存中文

数据库校验集:决定这些字段怎么比较和排序的

数据库无论对数据做任何操作,都必须保证操作和编码是编码一致的!

校验规则对数据库的影响

一个字符集通常会有很多个校验规则

对应utf8而言的话:在查找或者对查找的数据进行排序时

如果使用的是utf8_general_ci的话,是不会区分大小写的

如果使用的是utf8_bin的话,是会区分大小写的

查看MySQL的连接情况

show processlist 可以查看当前都有哪些用户连接了本机的MySQL

表的结构的增删查改都属于SQL里面的DDL

向表的具体数据的增删改属于SQL里面的DML,插属于SQL里面的DQL

使用数据库

数据库不能进行重命名–当然也不推荐随便改数据库的名字(因为这样的话,上层使用了这个库的也要改)

查看数据库

show databases;

显示创建语句

show create database db_name;

/*!40100 default.... */表示的是如果当前mysql版本大于4.01版本,就执行这句话;不是注释!!!

修改数据库

alter database db_name[alter_specification...];这里的[alter_specification...]跟上面一样

删除数据库

drop database[if exists]db_name;ifexists:如果存在,那就删除;如果不存在,那就会警告 本质其实就是把那个/var/lib/mysql里的目录删除

数据库的备份

备份:就是把我们创建数据库,建表,导入数据的这些语句都装在到备份文件中 语法:mysqldump-P3306-uroot-p[-B]数据库名>数据库备份存储的文件路径(包括文件名)文件路径没说明的话,就是默认在当前路径下创建 -B:有这个表示带上创建数据库+切换到这个数据库;没有-B的话需要先自行创建数据库和切换到那个数据库才行 引申:备份文件推荐以.sql结尾 eg: mysql-P3306-uroot-p-Btext1>text1.sql 如果只想备份里面的几张表: mysqldump-uroot-p数据库名 表名1 表名2...>数据库备份存储的文件路径(包括文件名)(这个必须要在)如果想备份多个数据库 mysqldump-uroot-p[-B]数据库名1 数据库名2...>数据库备份存储的文件路径(包括文件名)还原数据库:mysql>source备份文件的完整路径(包括文件名);

引申:切换数据库:use 数据库名;(不需要先退出当前数据库)

在MySQL里面用`system clear;`可以清空终端界面

MySQL表的操作

创建表

create table[if not exists]table_name(field1 datatype[其他属性eg:comment'注释'], field2 datatype[其他属性eg:comment'注释'],....//最后一个不加,)[characterset字符集][collate 校验规则][engine 存储引擎];//最后这行部分或全部搞成charset=字符集collate=校验规则engine=存储引擎也是一样的

其他属性的写法是没有严格的要求固定顺序的

这是在当前数据库中创建表

table_name是表的名字

field是列名,datatype是列的类型

comment那个的话是

最后一行那几个如果不选的话,都是采用的配置文件里面的(存储引擎的话配置文件里一般是InnoDB)

eg:

create tableifnot exists users(id int,name varchar(20)comment'用户名');这样也是一样的

注意:

使用的是不同的存储引擎的话,创建表时生成的文件是不一样的

比如:使用MYISAM创建的表会有.frm(表结构).MYD.MYI文件(把数据和索引分开存了)

使用`InnoDB`创建的表就只有`.frm`(表结构) `.ibd`(把数据和索引合在一起存了)

查看表

desc 表名;(会在当前数据库里去找)

Field:字段的名字

Type:字段的类型

NULL:是否允许为空

Key:索引类型

Default:默认值

Extra:扩充

如果想知道创建表时的详细信息的话:show create table 表名;

或者show create table 表名 \G

修改表

alter table table_name add(column datatype[其他属性][,...]);//给table_name添加字段,这里的column是添加啥字段 datatype是字段类型 这个add默认是在末尾增加 如果要在column1的后面插入:()后加after column1;如果要插入到头:()后面加first;alter table table_name modify(column datatype[其他属性,eg:default][,...]);//修改字段属性 alter table table_namerename[to]now_table_name;//更改表名,有没有to都一样 rename还有种写法,可以更改多个表名:renametable table_name to now_table_name,[...其他需要更改的表];//这里的to不能省略 alter table table_name change 原列名 新列名 新列名的datatype[其他属性];注意:表名和列名不要随意修改,因为修改了的话自己封装的上层也必须跟着改 alter table table_name drop(column1[,...]);//删除字段 以上这几种,如果只对一个字段进行操作,可以把()去了
向表中插入数据的话: insert[into]表名 values(字段的值[,...]);如果只对表中的一些列插入,其他的用默认值的话: insert[into]表名(列名1[,...])values(字段的值[,...]);

查询表中数据

select要查询的列名1[,...]from table_name;如果是查询所有列的话,可以:select * from table_name;

这个是看表内的具体数据,而desc那个是看表的结构

删除表

语法: drop[temporary]table[if exists]table_name1,table_name2...;temporary:是只删除临时表(也就是由create temporary table那样创建的)eg: drop tableifexists user1,user2;当然,删除也可以只删除表里面的单个属性 eg:alter table 表名 drop primary key;--那个就是删除的主键

如果我们向MySQL特定的类型里面插入不合法的数据,MySQL会直接拦截,不让我们这样做

–这样就可以保证我们插入到MySQL里面的数据一定是合法的

MySQL数据类型的分类

下面的话就只介绍几种常见的

数值类型

tinyint

数据类型: tinyint [unsigned]

占用空间为1个字节 可以存储的值最小是-128,最大是127

如果是tinyint unsigned的话,那就是最小是0,最大是255

一般情况下unsigned没有,会选择去使用eg:tinyint存不下,就换一个更大的类型,而不是去搞个unsigned

特例:年龄的话用tinyint unsigned就不错

bit

bit [(M)] : 位字段类型

M:表示使用几个比特位 如果M被忽略,默认为1

eg:bit(3)就表示有0-7这几个取值 插入时如果想插入3要直接3而不是11

小数类型

float

语法:float[(m, d)] [unsigned] : m指定显示长度(可以<=),d指定小数位数,占用空间4个字节

eg:float(4,2)的话,取值可以是-99.99到99.99float(4,2) unsigned的话取值是0.00到99.99

注意:如果精度不够,他会自己补;如果精度过高,他会四舍五入

–如果补和四舍五入完超过了m,那就会不让这次操作成功

如果不指定m,d的话,可以任意长度和保留原小数位数(在不超过float范围的情况下)

decimal

语法:decimal(m, d) [unsigned] : m指定长度,d表示小数点的位数

这个跟float的唯一不同点就是

如果m被省略,默认是10;如果d被省略,默认为0

并且decimal的精度比float高–eg:在MySQL5.0之后,float大概小数后7位左右,精度就开始不准了,但是decimal会比float强很多

但是float占用的字节数(固定4个字节)一般要比decimal(跟位数有关)

字符串类型

定长和变长的选择:

定长比较浪费空间,但是效率高–变长则相反

定长的意义是,直接开辟好对应的空间

变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少

char

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

这个是定长,会提前开辟好空间

注意单位是字符,不是字节!–在MySQL里面,特殊符号比如:中文或者,这些也是算一个字符

varchar

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

总长度<=L的话都没事,所占用的空间是用了多少才开辟多少(但是预算会先跟表交流)

注意:L的最大值跟采用的什么编码集和表的总的待分配空间都有关系(注意65535的基础上要先减1-3个字节,因为有1-3个字节要用来记录数据大小[数据量拉满的话肯定是要3个字节才够])

引申:utf8中一个字符要占3个字节

日期和时间的类型

常见的有三种类型:

1.date:格式'yyyy-mm-dd',占用三字节

2.datetime:格式:'yyyy-mm-dd HH:ii:ss'表示范围从 1000 到 9999 ,占用八字节

3.timestamp:格式也是'yyyy-mm-dd HH:ii:ss',这个在插入时不用填,会自动成当前插入时的时间的

enum和set

这俩的区别就是enum是多选一;set是可以多选多或者多选一

enum:enum('第一种选项'[,...])在选择的时候就直接填1,2这些或者填选项

eg:比如enum('男','女')的话,添加数据时,比如要男,就写'男'或者1

set:set('第一种选项'[,...])在选择的时候可以填选项(逗号隔开)或者用二进制表示开关

eg:set('手机','电脑','平板'),添加数据时:'手机,电脑'或者11(也就是011)

如果想查询set里面特定只喜欢…的人:(也就是严格匹配)

select * from 表名 where 列名=...;

eg:select * from users where way='手机';

如果想查询set里面喜欢…的人(可以不单单喜欢这一个):

select * from 表名 where find_in_set(..., 列名);

eg:find_in_set('电脑', way) and find_in_set)('手机', way);

注意:这种要多个都符合的这种需要分开写才行

http://www.zskr.cn/news/1495388.html

相关文章:

  • 2026年上海检测机构/力学性能/化学性能/失效分析/无损检测PAUT/风电在役/老化与金属材料检测公司权威推荐榜单 - 品牌发掘
  • 打破MCS51开发壁垒:CH55xduino如何让廉价USB微控制器成为Arduino生态新宠
  • 2000-2023年各省普通高等学校在校学生数数据
  • 世界模型:一文讲清楚AI下一个十年的核心战场
  • AI Agent 面试题 874:如何设计Agent辅助的测试用例自动生成系统?
  • D2DX:让《暗黑破坏神2》在现代PC上流畅运行的终极优化方案
  • AI 编程概念扫盲
  • PCA主成分分析原理与工业级降维实战指南
  • 保姆级教程:手把手教你搞定华为USG6000V500R005C20SPC500版本升级(含密码重置救砖指南)
  • 3个技巧彻底解决MPV播放列表管理难题:自动续播与批量操作
  • i.MX 6SLL SSI与UART接口时序详解:从理论到硬件设计实践
  • Meshroom完全指南:免费开源的3D建模神器从入门到精通
  • 夜宵好去处!深夜依旧火爆,湘潭好吃的麻辣烫推荐认准这一家 - 信息热点
  • 小程序毕业设计-基于微信小程序的防诈骗管理系统基于Springboot的防诈骗管理系统小程序(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • Untrunc终极指南:5个简单步骤修复损坏的MP4视频文件
  • 2026彩色沥青道路改造厂家实力榜:六大品牌以耐候性与色彩持久性领跑,技术革新驱动行业变现深度解析 - 品牌发掘
  • 3步解锁Wand专业版功能:免费获得完整游戏修改体验
  • 5分钟掌握SRWE:终极窗口分辨率管理神器,让屏幕效率翻倍
  • 2026天津自动变速箱维修CVT变速箱维修双离合变速箱维修变速箱阀体维修全维度数据对比:天津精捷四项断层领先 - 企业深度横评dyy6420
  • 跨界处理器i.MX RT1020:打破MCU与MPU边界的嵌入式开发实战
  • 别再手动截图了!用MATLAB plot函数一键导出Simulink仿真波形(附字体美化技巧)
  • AI穿搭教学哪家强?车内穿搭对标+平价配饰干货,这个宝藏博主值得关注 - 信息热点
  • Wand-Enhancer:释放游戏修改器完整潜力的终极解决方案
  • AI大模型时代已来!小白程序员收藏,抓住高薪新机遇
  • ZXPInstaller:3分钟搞定Adobe插件安装的免费开源方案
  • Java学生成绩管理系统实战项目:含可运行源码、MySQL建库脚本与完整功能界面
  • 2026 年鹤壁市优质财税公司实力排行榜 专业财税服务机构综合测评推荐 - GrowthUME
  • 嵌入式硬件设计:从数据手册电气特性到稳定可靠的MCU系统实战
  • [AI in Education] 上海高中语文作文评分 prompt
  • 2026年电脑蓝屏不再愁,河源启科安联教你轻松解决 - 信息热点