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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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-----------------------------------------------------------------------------");

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
7月前
|
存储 SQL 关系型数据库
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为'0'或'1',查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
|
7月前
|
关系型数据库 MySQL Java
【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
|
7月前
|
自然语言处理 关系型数据库 MySQL
MySQL索引有哪些类型?
● 普通索引:最基本的索引,没有任何限制。 ● 唯一索引:索引列的值必须唯一,但可以有空值。可以创建组合索引,则列值的组合必须唯一。 ● 主键索引:是特殊的唯一索引,不可以有空值,且表中只存在一个该值。 ● 组合索引:多列值组成一个索引,用于组合搜索,效率高于索引合并。 ● 全文索引:对文本的内容进行分词,进行搜索。
|
9月前
|
机器学习/深度学习 关系型数据库 MySQL
mysql bit对gorm使用何种类型?
在GORM中使用MySQL的BIT类型时,通常使用 `bool`类型来处理BIT(1),使用 `[]byte`类型来处理BIT(N)(N > 1)。通过正确的类型映射和位操作,可以高效地处理位字段数据。确保在定义结构体字段时,明确指定字段类型,以便GORM能够正确地处理数据库交互。
204 18
|
8月前
|
存储 SQL 关系型数据库
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
|
10月前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
452 6
|
11月前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
229 8
|
关系型数据库 MySQL
用dbeaver创建一个enum类型,并讲述一部分,mysql的enum类型的知识
这篇文章介绍了如何在DBeaver中创建MySQL表的枚举(ENUM)字段,并探讨了MySQL中ENUM类型的一些行为特点,例如ENUM值的默认排序和在插入重复值时的表现。
299 1
用dbeaver创建一个enum类型,并讲述一部分,mysql的enum类型的知识
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
400 4
|
11月前
|
关系型数据库 MySQL Java
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
217 0

推荐镜像

更多