欢迎点击上方蓝字关注我

〇、MySQL数据类型

1. 数值数据类型

数值数据类型存储数值。
MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围。

整数

  • 长度 int(n) 与 zerofill

int(n) 只影响显示字符的宽度,不限制数值的合法范围。int(3) 依然可以存储 123456789 这么大的数值。
若设置了 zerofill 属性,当 int(3) 存储 12 时,会在前面补0,补足3位。即 012;当 int(5) 存储 12 时,会在前面补三个0,补足5位。即 00012

  • 有符号或无符号

所有数值数据类型(除 BIT 和 BOOLEAN 外)都可以有符号或无符号。有符号数值列可以存储正或负的数值,无符号数值列只能存储正数。默认情况为有符号,但如果你知道自己不需要存储负值,可以使用 UNSIGNED 关键字,这样做将允许你存储两倍大小的值。

小数

DECIMAL最常用的用法就是用来存储货币,例如 DECIMAL(8, 2)
DECIMAL还可以用于存储比BIGINT还大的整数以及精确的小数。

2. 串数据类型

从 MySQL4.1 版本开始,char(n) 和 varchar(n) 中的 n 指字符长度,不再表示之前版本的字节长度。也就是说在不同字符集下,char类型列的内部存储可能不是定长数据。

CHAR

CHAR 是定长字符串,会直接根据定义字符串时指定的长度分配足够的空间。
CHAR 适合存储所有值长度相同的字符串或很短的字符串。

VARCHAR

VARCHAR 的最大长度是65535个字节,而 varchar(n) 中的 n 指字符长度,因此,n 的最大值是由当前字段的字符集决定的。当字符集是 utf8 时,n 的最大值为 21845。当字符集是 utf8mb4 时,n 的最大值为 16383。(但是实际上MySQL要求一个行的定义长度不能超过65535个字节,因此,除非表中只有这一个字段,否则 n 的值达不到上述的最大值)。

VARCHAR 使用1-2个额外字节记录字符串长度,列长度小于等于255个字符时,使用1个字节记录,否则使用2个字节。

最佳实践
  • 对于经常变更的数据, CHAR 比 VARCHAR 更好,CHAR 的磁盘空间利用率更高,不容易产生碎片。

  • 当列中数据的长度相同时,选择 CHAR;当列中数据长度参差不齐时,选择 VARCHAR。

  • 对于非常短的列,CHAR 比 VARCHAR 在存储上更有效率。

  • 只分配真正需要的空间,更长的列会消耗更多的内存。

  • 尽量避免使用 BLOB/TEXT 类型,查询时会使用临时表,导致严重的性能开销。如果一定要用,建议单独建表存储该字段。

3. 二进制数据类型

4. 日期和时间类型

最佳实践
  • 尽量使用 TIMESTAMP,比 DATETIME 的空间利用率高。


一、创建数据表

CREATE TABLE

使用CREATE TABLE 创建表,必须给出下列信息:

  • 表的名字,在关键字 CREATE TABLE 之后给出;

  • 表中字段的名字和定义,用逗号分隔。

以下为创建MySQL数据表的SQL通用语法:

CREATE TABLE table_name (    column1 datatype [NULL|NOT NULL] [DEFAULT ],    column2 datatype,);
实例
  • 创建用户表

CREATE TABLE IF NOT EXISTS `user` (    `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,      `username` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,      `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,      `password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '密码',      `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '状态',      `created_at` int(11) unsigned NOT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `unq_email` (`email`) USING BTREE,     KEY `idx_username` (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT '用户表';
实例解析

如果数据库中不存在 user 表时,创建该表。存储引擎为 InnoDB,默认字符集为utf8
ENGINE 设置存储引擎,CHARSET 设置编码。

CREATE TABLE IF NOT EXISTS `user` (...) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT '用户表'

创建名为 id 的字段,整型,非负数,不能为空,自增。

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT

创建名为 username 的字段,字符串类型,最大长度为190个字符,字符集为 utf8mb4,不能为空

`username` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,

将字段 id 设为主键,使用 BTREE 索引

PRIMARY KEY关键字用于定义列为主键。 可以使用多列来定义主键,列间以逗号分隔。

PRIMARY KEY (`id`) USING BTREE,

为字段 email 添加唯一索引,索引名称为 unq_email
设置了唯一索引的字段不能出现重复的值,但是如果字段可以为 null,则允许出现多个 null 值。

UNIQUE KEY `unq_email` (`email`) USING BTREE

为字段 username 添加普通索引,索引名称为 idx_username

KEY `idx_username` (`username`)

二、查看数据表

1. 查看数据库中的所有数据表

SHOW TABLES 用于查看数据库中的所有数据表。

mysql> SHOW TABLES;+----------------+| Tables_in_test |+----------------+| user           |+----------------+1 row in set (0.07 sec)

2. 查看数据表的建表SQL语句

SHOW CREATE TABLE 用于查看指定数据表的建表SQL语句

语法:

SHOW CREATE TABLE table_name
  • 查看 user 表的建表语句

mysql> SHOW CREATE TABLE `user`\G*************************** 1. row ***************************Table: userCreate Table: CREATE TABLE `user` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `username` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,  `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '密码',  `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '状态',  `created_at` int(11) unsigned NOT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `unq_email` (`email`) USING BTREE,  KEY `idx_username` (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='用户表'1 row in set (0.00 sec)

3. 查看数据表结构

DESCRIBE 和 DESC

DESCRIBE 可用于查看表结构,DESC 是 DESCRIBE 的缩写。

语法:

DESCRIBE table_name
  • 查看 user 表的表结构

mysql> DESCRIBE `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+6 rows in set (0.00 sec)
mysql> DESC `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+6 rows in set (0.00 sec)
EXPLAIN

EXPLAIN 也可以用于查看表结构。

语法:

EXPLAIN table_name

DESCRIBE 和 EXPLAIN 语句是同义词,实际上在平时使用过程中 DESCRIBE 多用于获取表结构的信息,而 EXPLAIN 多用于获取SQL语句的执行计划。

  • 查看 user 表的表结构

mysql> EXPLAIN `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+6 rows in set (0.03 sec)

三、修改数据表

1. 重命名数据表

  • 语法

RENAME TABLE old_name TO new_name;
  • 将 user 表重命名为 consumer ,再改回 user

mysql> RENAME TABLE `user` TO `consumer`;Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES;+----------------+| Tables_in_test |+----------------+| consumer       |+----------------+1 row in set (0.06 sec)

mysql> RENAME TABLE `consumer` TO `user`;Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES;+----------------+| Tables_in_test |+----------------+| user           |+----------------+1 row in set (0.05 sec)

2. 增加字段

  • 语法

ALTER TABLE table_name ADD column_name column_type
  • 给 user 表添加一个字段 intro

mysql> ALTER TABLE `user` ADD `intro` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '简介' AFTER `email`;Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || intro      | varchar(255)        | YES  |     | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+7 rows in set (0.06 sec)

3. 修改字段

修改字段名和属性
  • 语法

ALTER TABLE table_name CHANGE old_name new_name column_type;
  • 将 user 表的 intro 字段名改为 about

mysql> ALTER TABLE `user` CHANGE `intro` `about` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '简介';Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || about      | varchar(255)        | YES  |     | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+7 rows in set (0.07 sec)
修改字段属性
  • 语法

ALTER TABLE table_name MODIFY column_name column_type;
  • 将 user 表的 about 字段字符串最大长度改为200个字符

mysql> ALTER TABLE `user` MODIFY `about` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '简介';Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || about      | varchar(200)        | YES  |     | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+7 rows in set (0.09 sec)

4. 删除字段

  • 语法

ALTER TABLE table_name DROP COLUMN column_name;
  • 从 user 表中删除 about 字段

mysql> ALTER TABLE `user` DROP COLUMN `about`;Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+6 rows in set (0.08 sec)

5. 添加索引

  • 语法

ALTER TABLE `user` ADD [ KEY | UNIQUE KEY | PRIMARY KEY] idx_name (column_name);
  • 为 user 表中的 created_at 字段添加普通索引,索引名为 idx_created_at

mysql> ALTER TABLE `user` ADD KEY `idx_created_at` (`created_at`);Query OK, 0 rows affected (0.02 sec)Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  | UNI | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   | MUL | NULL    |                |+------------+---------------------+------+-----+---------+----------------+6 rows in set (0.07 sec)

6. 删除索引

  • 语法

ALTER TABLE `user` DROP KEY idx_name;
  • 删除 user 表中的 created_at 和 email 两个字段的索引,索引名为 idx_created_at 和 unq_email

mysql> ALTER TABLE `user` DROP KEY `idx_created_at`;Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE `user` DROP KEY `unq_email`;Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC `user`;+------------+---------------------+------+-----+---------+----------------+| Field      | Type                | Null | Key | Default | Extra          |+------------+---------------------+------+-----+---------+----------------+| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment || username   | varchar(190)        | NO   | MUL | NULL    |                || email      | varchar(255)        | YES  |     | NULL    |                || password   | varchar(255)        | YES  |     | NULL    |                || status     | tinyint(3) unsigned | NO   |     | 0       |                || created_at | int(11) unsigned    | NO   |     | NULL    |                |+------------+---------------------+------+-----+---------+----------------+6 rows in set (0.06 sec)

四、删除数据表

可以使用 DROP TABLE 命令删除一个或者多个数据表。

在使用 DROP TABLE 删除数据表时,要删除的数据表必须存在,否则会报错。

1. 删除一个数据表

DROP TABLE tablename

2. 批量删除数据表

DROP TABLE tablename1,tablename2,tablename3
  • 删除 user 表

mysql> DROP TABLE `user`;Query OK, 0 rows affected (0.01 sec)

mysql> DESC `user`;1146 - Table 'test.user' doesn't existmysql> SHOW TABLES;Empty set

点个在看升职加薪

类型数据合并去重 mysql_MySQL基础知识 数据类型和数据表管理相关推荐

  1. SQL Server 索引基础知识(1)--- 记录数据的基本格式

    不论是缓存的数据信息,还是物理保存的信息,他们的基本单位都是数据页.所以理解数据页是最最基础的知识点,本篇博客就介绍跟索引有关的数据页的一些基础知识. 数据页的基础知识 SQL Server 中数据存 ...

  2. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个.1>.数据类型关键字(12个)char,sh ...

  3. SQL Server 索引基础知识 1 --- 记录数据的基本格式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 由于需要 ...

  4. 【若泽大数据001】Linux基础知识汇总

    [若泽大数据001]Linux基础知识汇总 前情提要: Linux平台搭建 [若泽大数据001]Linux基础知识汇总 1.查看当前光标所在的目录的命令是什么? 2.切换到当前用户的家目录,哪三种方式 ...

  5. RGB、YUV像素基础知识及处理数据

    RGB.YUV像素基础知识及处理数据 目录 RGB YUV RGB.YUV像素数据处理 转载自Gemfield的知乎文章:从YUV到RGB 转载自雷神的博客:视音频数据处理入门:RGB.YUV像素数据 ...

  6. 权限认证php,2016年Linux认证基础知识:php做权限管理

    2016年Linux认证基础知识:php做权限管理 在学习Linux认证过程中,每个人会遇到每个人不同的问题,或小或大,那么你知道在Linux下,php怎么做权限管理?下面跟yjbys小编来看看最新的 ...

  7. python各种类型的数据拼接_python基础2 数据类型、数据拼接、数据转换

    一.数据类型 1.字符串 字符串英文string,简写str,只要是被[单/双/三引号]这层皮括起来的内容,不论那个内容是中文.英文.数字甚至火星文.只要是被括起来的,就表示是字符串类型 如:prin ...

  8. python定义一个list数据来源于变量_python基础知识4--数据类型与变量

    阅读目录 一.变量 二.数据类型 2.1 什么是数据类型及数据类型分类 2.2 标准数据类型: 2.2.1 数字 2.2.1.1 整型: 2.2.1.2 长整型long: 2.2.1.3 布尔bool ...

  9. 数据标注基础知识:文本数据标注的类型及应用场景

    目录 一.文本数据标注的类型 二.文本数据标注的基本流程 三.文本数据标注应用场景 (1)新零售行业: (2)客服行业: (3)广告行业: (4)金融行业 自然语言处理是指用计算机对自然语言信息进行处 ...

最新文章

  1. 火山引擎向企业客户开放上万款抖音同款特效
  2. mysql之 mysql 5.6不停机主主搭建(活跃双主基于日志点复制)
  3. 用pyhton 写一个简单的三级列表
  4. JS中如何判断null
  5. 伟创力回应扣押华为物资;谷歌更新图片界面;Python 3.8.0b3 发布 | 极客头条
  6. linux svn 客户端安装配置
  7. 盐池元宵转九曲【山乡元夕】
  8. 【毕业设计选题】C51单片机毕业设计题目推荐大全
  9. 韩立春21日工作内容
  10. 小米平板2 android6,小米平板2终于来了MIUI7/Win10双系统
  11. 街机游戏模拟器 mame for linux
  12. React-SSR-Nextjs
  13. 中国农科院基因组所汪鸿儒课题组诚邀加入
  14. bzoj 3238 差异
  15. Adobe PhotoShop安装程序无法初始化的解决办法
  16. 【物理实验及其数据处理】 集成电路传感器特性测量及其应用
  17. POJ 1265-Area(计算几何+皮克定理+多边形面积公式)
  18. 2021-08-10第一章绪论1.1统计学与医学统计学
  19. 混沌网格(Chaos Mesh)的设计和工作原理
  20. redis如何使用命令清空所有key

热门文章

  1. 网络DevOps探索与实践
  2. Redis 高可用篇:你管这叫主从架构数据同步原理?
  3. MacBook Air写代码真香!包邮送一台!
  4. 牛逼!硬核图解 Tomcat 整体架构
  5. 用它调试线上 bug,真得劲 | webconsole
  6. 阿里巴巴为什么让初始化集合时必须指定大小?
  7. IT人永远不老,老程序员价值何在?
  8. Leangoo看板工具做单团队敏捷开发
  9. oracle调整字段精度的四种方法
  10. JVM基本架构及生命周期