MySQL_2 常见列类型与表的基本操作

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 第二节 常见字段类型及表的相关操作 内容分享。

目录

一、常见列类型(字段类型)

       1.数值类型 :

               1° 整型

               2° 浮点型

       2.文本类型(字符串类型) :

       3.二进制类型 :

       4.日期类型 :

二、表的基本操作

       1.创建表 :

               1° 基本语法

               2° 代码演示

       2.删除表 :

               1° 基本语法

               2° 代码演示

       3.修改表 :

               1° 基本语法

               2° 代码演示

       4.复制表 :

               1° 基本语法

               2° 代码演示


一、常见列类型(字段类型)

       1.数值类型 :

               1° 整型

       ①tinyint [1 byte;有符号-128~127,无符号0~255]

       smallint [2 bytes;有符号-2^15~2^15 - 1,无符号0~2^16 - 1]

       mediumint [3 bytes;有符号-2^23~2^23 - 1,无符号0~2^24 - 1]

       int [4 bytes;有符号-2^31~2^31 - 1,无符号0~2^32 - 1]

       bigint [8 bytes;有符号-2^63~2^63 - 1,无符号0~2^64 - 1]

       PS : 1>Δ默认均为有符号数。若想定义无符号数,需要在定义字段的类型时,在后面添加一个UNSIGHED。
               
2>以上范围均为补码可表示的范围。
               3>bit类型默认为无符号数,使用格式为“bit(M)”,其中M表示指定的位数,默认值是1,实际范围是1~64;使用bit类型的字段,查询时以二进制的形式显示;当需要存入0或者1时,可以考虑使用bit(1)来节省空间。

               演示Ⅰ——

               代码如下 :

# 创建一张新的表
CREATETABLE IF NOT EXISTS `table_2` 
(  `id` INTUNSIGNED,  `key` BIT(1)) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin ENGINE INNODB;# 向表中添加数据
INSERTINTO table_2 VALUES(0,1);# 查询表
SELECT*FROM table_2;

image.gif

               运行效果 :

image.png

image.gif编辑

               演示Ⅱ——

               代码如下 :

CREATETABLE IF NOT EXISTS `table_1`
(  `id` bit(8));INSERTINTO table_1 VALUES(38);SELECT*FROM table_1;

image.gif

              运行效果 :

image.png

image.gif编辑

               2° 浮点型

       float [single precision, 4 bytes]

       double [double precision, 8bytes]

       decimal [M, D],M决定了数的长度(M最大65),D决定了其中的小数位数(D最大30);如果D是0,表示无小数点或分数部分;若D被省略,默认是0;若M被省略,默认是10;

               演示——

              代码如下 :

CREATETABLE IF NOT EXISTS `table_3`
(  `t1` FLOAT,  `t2` DOUBLE,  `t3` DECIMAL(25,20));INSERTINTO `table_3` VALUES(3.14159265358979323,3.14159265358979323,3.14159265358979323);SELECT*FROM `table_3`;

image.gif

               运行效果 :

image.png

image.gif编辑

       2.文本类型(字符串类型) :

       char [0~255(字符)],固定长度字符串(即分配的空间大小是固定的);这里的范围就是字符数的范围(不管中英文)。

       varchar [0~65535 (0 ~ 2^16 - 1)(字节)],可变长度字符串(即分配的空间大小决定于实际的占用情况;这里的范围是字节的范围。实际最大字节是65535 - 3 = 65532,因为要预留出1~3个字节用于存储字段的大小,在不同编码中65532最终对应的字符数不同。

      text [0 ~ 2^16 - 1] ,更简单,存放文本内容时可以考虑,可以将TEXT类型视为VARCHAR类型。PS : TEXT类型没有默认值。

       longtext [0 ~ 2^32 - 1]

       PS : 实际使用时,括号中传入的一定是字符数。一般来讲,使用varchar类型更好;但是,若某个字段已明确为定长,使用char类型可以提高查询速度。

               演示——

              代码如下 :

CREATETABLE IF NOT EXISTS `table_4`
(  `content1` CHAR(255),  `content2` VARCHAR(255),  `content3` TEXT(256)) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin ENGINE INNODB;INSERTINTO `table_4` VALUES('Cyan_RA9','cyan_ra9','塞峎_RA9');SELECT*FROM `table_4`;

image.gif

              运行效果 :

image.png

image.gif编辑

       3.二进制类型 :

       blob [0 ~ 2^16 - 1]

       longblob [0 ~ 2^32 - 1]

       PS : 一般不会直接存储二进制数据。

       4.日期类型 :

       date [日期,年月日]

       time [时间,时分秒]

       datetime [年月份 时分秒 YYYY-MM-DD HH:mm:ss]

       timestamp [时间戳],可在定义时间戳类型的字段时加入以下约束——NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,其中,NOT NULL表示不为空;DEFAULT...表示默认是当前时间戳;ON UPDATE...表示以后每次修改记录(INSERT, UPDATE),时间戳会自动更新为修改时的当前时间戳。

               演示——

              代码如下 :

CREATETABLE IF NOT EXISTS `table_5` (  `date` DATE,  `time` TIME,  `datetime` DATETIME,  `timestamp` TIMESTAMPNOTNULL DEFAULT CURRENT_TIMESTAMP 
ONUPDATE CURRENT_TIMESTAMP
) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin ENGINE INNODB;INSERTINTO `table_5`(`date`, `time`, `datetime`)VALUES('2023-5-6','20:06:55','2023-5-6 20:06:55');SELECT*FROM `table_5`;

image.gif

               运行结果 :

image.png

image.gif编辑


二、表的基本操作

       1.创建表 :

               1° 基本语法

       CREATE TABLE table_name

       (

               field1 data_type,

               field2 data_type,

               field3 data_type...

       ) CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎;

       其中——

       filed : 字段名,表示指定的列名。

       data_type : 字段的数据类型,表示指定的列类型。

       CHARACTER SET : 若不指定则为表所在数据库的字符集。

       CLOOATE : 若不指定则为表所在数据库的排序规则。

       PS : 创建表时,要根据需保存的数据创建相应的列,并根据字段的数据类型定义相关的列类型。

               2° 代码演示

               首先,选择要创建表的数据库,如下图所示 :

image.png

image.gif编辑

               代码如下 :

# 创建数据库
CREATE DATABASE IF NOT EXISTS temp_1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;# 创建表(记得添加反引号)
CREATETABLE `table_0`
(  `id` INT,  `name` VARCHAR(255),  `password` VARCHAR(255),  `birthday` DATE) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin ENGINE INNODB;

image.gif

               创建效果 :

image.png

image.gif编辑

       2.删除表 :

               1° 基本语法

       ①删除整张表——

       DROP TABLE table_name;

       ②只删除表数据(不可使用WHERE)——

       TRUNCATE TABLE table_name;

       ③只删除数据(可使用WHERE)——

       DELETE FROM table_name WHERE...;

               2° 代码演示

               现有三张一模一样的表(table_0,table_1,table_2),表的具体内容如下图所示 :

image.png

image.gif编辑

               删除表的代码如下 :

-- 删除表的第一种方式:直接删除整张表。DROPTABLE `table_0`;-- 删除表的第二种方式:删除表的所有数据但保留结构TRUNCATE TABLE `table_1`;-- 删除表的第三种方式:删除表的指定数据且保留结构DELETEFROM `table_2` WHERE `name` ='Ice';

image.gif

               删除效果 :

image.png

image.gif编辑

image.png

image.gif编辑

       3.修改表 :

               1° 基本语法

      ①添加列——

       ALTER TABLE table_name

               ADD column data_type [DEFAULT expr],

               ADD column data_type [DEFAULT expr]...;

       ②修改列的类型——

       ALTER TABLE table_name

               MODIFY column data_type [DEFAULT expr],

               MODIFY column data_type [DEFAULT expr]...;

       ③修改列的名字——

       ALTER TABLE table_name

               CHANGE 旧列名 新列名 data_type NOT NULLDEFAULT '';

       ④删除列——

       ALTER TABLE table_name

               DROP column,

               DROP column ...;

       PS :

       ①修改表名——

       RENAME TABLE 旧表名 TO 新表名;

       ②修改表字符集——

       ALTER TABLE 表名 CHARACTER SET 字符集;

      ③查看表的结构——

       DESC 表名; (可以查看表的列的情况)

               2° 代码演示

               已知如下表 :

image.png

image.gif编辑

               该表由以下代码形成 :

# Create a demo employee table...
CREATETABLE IF NOT EXISTS `e1` (  `id` INT,  `name` VARCHAR(255),  `sex` char(4),  `birthday` DATE,  `entry_date` DATETIME,  `job` VARCHAR(255),  `salary` DOUBLE,  `resume` TEXT(256));INSERTINTO `e1` 
VALUES(11,'Cyan','male','2002-11-17','2025-11-7 00:00:00','nb',20000.0,'NB');SELECT*FROM `e1`;

image.gif

               现要求——

               增加VARCHAR类型的image列,要求置于resume后;删除sex列;修改job列的长度为60;修改表名为e1_employee_table:修改表的字符集为utf8mb4;将列名name修改为name_EX

               代码如下 :

ALTERTABLE `e1` 
      ADD `image` VARCHAR(255)NOTNULL DEFAULT ''      AFTER `resume`;ALTERTABLE `e1` 
      MODIFY `job` VARCHAR(60)NOTNULL DEFAULT '';ALTERTABLE `e1` 
      CHANGE `name` `name_EX` VARCHAR(255)NOTNULL DEFAULT '';ALTERTABLE `e1` 
DROP `sex`;RENAME TABLE `e1` TO `e1_employee_table`;ALTERTABLE `e1_employee_table` CHARACTER SET utf8mb4;DESC `e1_employee_table`;

image.gif

              效果如下 :

image.png

image.gif编辑

image.gif编辑

image.png

image.gif编辑

       4.复制表 :

               1° 基本语法

       ①表数据的复制——

       INSERT INTO table_name(column_1, column_2...)

               SELECT (column_1, column_2...) FROM table_name;

       该语句可以将查询到的表中的指定数据复制到当前表中,亦可以通过该语句进行自我复制(蠕虫复制)。通过蠕虫复制可以为表中添加海量数据,可用于SQL语句性能的测试。

       ②表结构的复制——

       CREATE TABLE table_name LIKE table2_name;

       PS : 表的去重——

       1>先创建一张临时表,该表的表结构与要去重的表相同。(使用LIKE);

       2>通过DISTINCT关键字处理后,把要去重的表中的数据复制到临时表一份;

       3>清除掉要去重的表中的全部记录;

       4>将临时表中的记录复制到要去重的表一份;

       5>删除临时表;

               2° 代码演示

               演示Ⅰ—— 表的复制

               现有一张员工表如下 :

image.gif编辑

               要求建立一张新表demo,并将该员工表中的数据复制到新表demo中,代码如下 :

CREATETABLE IF NOT EXISTS `demo`(  `id` MEDIUMINTUNSIGNEDNOTNULL DEFAULT 0,  `name` VARCHAR(32)NOTNULL DEFAULT '',  `salary` DECIMAL(8,2)) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin ENGINE INNODB;INSERTINTO `demo`(`id`,`name`,`salary`)SELECT `eno`,`ename`,`esalary`
FROM `employee`;SELECT*FROM `demo`;

image.gif

               运行效果 :

image.gif编辑

               演示Ⅱ—— 表的去重

               对演示Ⅰ中的demo表进行多次蠕虫复制,复制后,demo表中的记录总数如下图所示 :

image.gif编辑

               先对demo表进行去重操作,代码如下 :

# 1.创建一张临时表,该表的结构与要去重的表相同
CREATETABLE IF NOT EXISTS `temp` LIKE `demo`;# 2.通过DISTINCT关键字处理后,把要去重的表中的数据复制到临时表一份
INSERTINTO `temp`
SELECTDISTINCT*FROM `demo`;# 3.删除要去重的表中的全部数据
TRUNCATE TABLE `demo`;# 4.将临时表中的数据复制到要去重的表一份
INSERTINTO `demo`
SELECT*FROM `temp`;# 5.删除临时表
DROPTABLE `temp`;# 查看去重后demo表的效果:
SELECTCOUNT(*)AS'totalNum_in_demo'FROM `demo`;SELECT*FROM `demo`;

image.gif

               运行效果 :

image.gif编辑

image.gif编辑

       System.out.println("END-----------------------------------------------------------------------------");

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
17 8
|
1月前
|
关系型数据库 MySQL
用dbeaver创建一个enum类型,并讲述一部分,mysql的enum类型的知识
这篇文章介绍了如何在DBeaver中创建MySQL表的枚举(ENUM)字段,并探讨了MySQL中ENUM类型的一些行为特点,例如ENUM值的默认排序和在插入重复值时的表现。
37 1
用dbeaver创建一个enum类型,并讲述一部分,mysql的enum类型的知识
|
10天前
|
关系型数据库 MySQL Java
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
20 0
|
2月前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
115 4
|
5月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错之在处理MySQL的DECIMAL类型时出现了报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
自然语言处理 算法 Java
Java如何判断两句话的相似度类型MySQL的match
【9月更文挑战第1天】Java如何判断两句话的相似度类型MySQL的match
25 2
|
3月前
|
存储 关系型数据库 MySQL
MySQL bit类型增加索引后查询结果不正确案例浅析
【8月更文挑战第17天】在MySQL中,`BIT`类型字段在添加索引后可能出现查询结果异常。表现为查询结果与预期不符,如返回错误记录或遗漏部分数据。原因包括索引使用不当、数据存储及比较问题,以及索引创建时未充分考虑`BIT`特性。解决方法涉及正确运用索引、理解`BIT`的存储和比较机制,以及合理创建索引以覆盖各种查询条件。通过`EXPLAIN`分析执行计划可帮助诊断和优化查询。
|
3月前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
3月前
|
关系型数据库 MySQL 数据管理
深入解析 MySQL 中的关系类型
【8月更文挑战第31天】
50 0