MySQL——数据类型以及对表结构的修改

2023-11-19

MySQL的数据类型

刚才我们在创建表的时候,说到了一个字段类型,所谓的字段类型就是这个字段能存放的数据的数据类型,在MySQL中有以下几种数据类型:

数据类型

大小(字节)

用途

格式

INT

4

整数

FLOAT

4

单精度浮点类型

DOUBLE

8

双精度浮点类型

ENUM

-

单选,比如性别

ENUM('a','b','c')

SET

-

多选

SET('1','2','3')

DATE

3

日期

YYYY-MM-DD

TIME

3

时间点或持续日期

HH:MM:SS

YEAR

1

年份值

YYYY

CHAR

0~255

定长字符串

VARCHAR

0~255

变长字符串

TEXT

0~65535

长文本数据

整形

除了可以使用INT表示整形之外,还可以使用TINYINT,SMALLINT,MEDIUMINT,BIGINT。区别在于占用的字节大小的不同

CHAR和VARCHAR的区别

CHAR的长度是固定的,而VARCHAR的长度是可以变化的,比如,存储字符串“abc",对于CHAR(10),表示存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR(12)则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度,12只是最大值,当你存储的字符小于12时,按实际长度存储。

ENUM和SET的区别

ENUM类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而SET类型的值则可以多选。

插入数据

首先我们要查看数据,使用查看数据的命令:

select * from 表名;

表示查看表中的所有数据:

此时我们的表因为是新创建的所有是没有数据的,我们需要向里面插入数据,使用插入数据的命令:

insert into 表名 values ('数据1','数据2','数据3','数据4'.……);

使用这种格式表示我们向表中所有的字段插入数据,数据的个数与格式必须和表中的字段数量和字段类型对应匹配才可以:

然后我们再次查看表中的所有数据:

然后就可以在表中看到我们刚才插入的一行数据。

插入数据的格式

在插入数据的时候,valus关键字后面括号中的值就是我们要插入到表中的值,可以看到我们在写值的时候,有一些值被引号包含着,有一些则没有。根据MySQL的规定,我们在向表中插入数据的时候,CHAR,VARCHAR,TIME,DATA,TEXT,ENUM这些类型需要使用单引号包裹,而INT,FLOAT,DOUBLE这些类型则不用。

根据字段插入数据

在插入数据的时候,出了向全部的列插入数据,还可选择想要插入数据的列,而没有选择的列则不会被插入数据

insert into 表名(列名1,列名2,列名3) values ('数据1','数据2','数据3');

然后我们使用查询命令查看表中的数据:

可以看到,我们插入数据的列会存在数据,没有选择的列中则不会有数据。

MySQL修改与删除

删除数据库

drop database 数据库的名字;

在删除之前先查看一下我们已有的这些数据库,我们先创建一个空的数据库:

然后我们删除这个数据表:

drop database test;

然后这个数据库就被删除了。

关于修改数据库

目前MySQL没有提供修改数据库名称的方法,因为这曾导致一系列安全问题。

在老版本中 RENAME DATABASE可以修改数据库名称,这条命令在MySQL 5.1.7中被加入,但官方很快就发现这条命令所带来的危险,于是在MySQL 5.1.23中把这条命令移除。

事实上,数据库名几乎不会遇到必须修改的情况,如果你一定要这么做,比较安全的做法是重新建一个新库,然后将旧库中的数据转移到新库中,并且暂时不要删除l旧的数据库,以防数据遗失。

对一张表的修改

重命名

rename table 原名 to 新名字; alter table 原名 rename 新名字; alter table 原名 rename to 新名字;

这三种方式都可以做到修改数据表的名字,在修改之前,我们先来看一下原有的数据表:

可以看到我们现在又很多的数据表,现在我们要把user表的名字修改成client:

rename table user to client; alter table user rename client; alter table user rename to client;

三种方式选择其中一种使用即可,但是不能三种方式一起使用。

删除一张表

删除表的方式可以直接参考之前我们删除数据库的方式:

drop table 表名;

使用drop关键字进行删除,比如现在我要删除client表:

现在client表就已经被删除了。

对一列的修改(既对表结构的修改)

对表结构的修改,是本节实验的难点,有时候一些小的错误会造成不可挽回的后果,所以请细心操作。另外需要注意,非必要情况不要修改表结构。

增加一列

在已经创建好的表中增加一列使用以下命令

alter table 表名 add column 列名 数据类型 [约束];

现在book表中已经存在四列,现在要添加一列可以使用以下命令:

现在我们就在已经创建好的表中新添加了一列。

现在我们创建一个新的列,并添加一个约束:

对于约束的查看方式和表数据的查看方式略有不同,如果要查看表中的约束要使用另一种方法:

使用查看表结构的方式可以查看部分的约束。

在添加列的时候决定列的位置

在我们添加列的时候,默认新添加的列是在最后一个,但是如果我们想让添加的列向前移动,那么就需要使用一个新的关键字:after

alter table 表名 add 列名 数据类型 [约束] after 列名1;

当我们使用这个语句之后,我们新创建的列就会排在after关键字后面的列之后:

在上面的图中,我们新建了一列叫做information,并在最后添加了after name,那么我们创建的列就会在name之后出现。

除了使用after来调整创建列的时候列的位置,还可以使用first将创建的列直接放在第一个:

删除一列

删除表中的一列和刚才使用的新增─列的语句格式十分相似,只是把关键词ADD改为DROP,语句后面不需要有数据类型、约束或位置信息。具体语句格式:

alter table 表名 drop 列名;

在上图中我们删除了book表的job列,执行之后这个列就被删除了。

修改一列

这条语句其实不只可用于重命名一列,准确地说,它是对一个列做修改(CHANGE):

alter table 表名 change 原列名 新列名 数据类型 [约束];

现在我们要把class列修改成c_class:

当原列名和新列名相同的时候,指定新的数据类型或约束,就可以用于修改数据类型或约束。需要注意的是,修改数据类型可能会导致数据丢失,所以要慎重使用。

注意在修改列名的时候一定要带上数据结构,否则会修改失败。

先看一下现在的表结构:

现在要把sex列的数据类型修改成int,但是列名不变:

这样就完成了对一列数据库的修改。

修改表中的数据

先看一下现在表中的数据

使用命令对表中的数值进行修改:

update 表名 set 列名 = 值 , 列名 = 值 , 列名 = 值 where 条件;

现在我添加一条数据:

现在要修改第二列数据的address的值:

并且可以同时修改多个列的值:

这样就完成了对列中数据的修改。

注意这里在修改的时候一定要加where条件,否则会将所有的列都进行修改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL——数据类型以及对表结构的修改 的相关文章

  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • POINT 列上的 MySQL INSERT/UPDATE

    我正在尝试用我国家的地理位置填充我的数据库 我的一张表有 4 个字段 ID PK 纬度 经度和地理点 EDIT SCDBs Punto Geografico SET lat 18 469692 SET lon 63 93212 SET g
  • 显示标准化数据

    跟进问题 添加 2 个不同表的总和 https stackoverflow com questions 39717541 adding sum from 2 different tables 我创建了3个表 members videos v
  • 海量记录的bulk_create最佳实践

    I use bulk create将 1 mio 记录插入到新表中 需要 80 秒 Django 只使用一个 CPU 核心 大约 25 CPU 但没有一个核心达到 100 我相信有改进的潜力 这是代码 class Stock models
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 从另一台计算机访问 MYSQL

    我想开发一个java桌面应用程序 我想在其中设置服务器 这意味着我在这里使用mysql db 该数据库将仅存储在一台电脑上 其余所有用户都可以访问该数据库 所以 我听说了mysql远程连接 其中尝试了一些事情 这些措施如下 我的电脑已连接w
  • 合并两个 MYSQL SELECT 查询[重复]

    这个问题在这里已经有答案了 可能的重复 如何将两个 Post Category 表 MYSQL SELECT 查询合并为一个 https stackoverflow com questions 12972130 how to combine
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • 如何从批量数据中的mysql列中删除所有非数字字符

    我想从列中删除所有非数字字符 我的数据库中有大量数据 目前我正在使用以下链接中描述的方法 http venerableagents wordpress com 2011 01 29 mysql numeric functions http
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • MySQL 转储未知选项“-no-beep”

    在旧服务器上我使用了mysql转储命令来备份 MySQL 数据库 在新服务器上 MySQL 版本为 5 6 相同的命令给出了错误 unknown option no beep 无论它插入什么 我也在互联网上搜索过 但找不到任何帮助 在 my

随机推荐

  • 选择软件外包公司需要注意哪些方面

    每个行业中不同公司的实力都是良莠不齐 特别是IT软件外包公司更是如此 当我们一旦将整个项目交付对方之后 项目的成败就全看软件外包公司的表现 风险极大 那么 我们该如何选择一家靠谱的深圳软件外包公司 选择软件外包公司需要注意哪些方面 北京木奇
  • 刷脸支付让城市真正迈入智能化数字化新阶段

    众所周知 每一次通信时代的变革都会催生一系列新兴事物的发展 比如3G时代的到来让越来越多国人开始了解互联网 4G时代的普及 让互联网产业得到了前所未有的发展空间 而5G时代的来临 将进一步推动数字化工作的进程刷脸支付正是如此 让城市真正迈入
  • 二分查找--中间值取值原则

    在数组总长度为奇数时 二分查找的中间值就是数组中间的那个元素 例如 对于长度为5的数组 中间元素的下标为2 在数组总长度为偶数时 二分查找的中间值有两个 可以取任意一个作为中间值 一种常用的方法是取靠左的那个中间值 例如 对于长度为6的数组
  • Image Processing图像处理(对比俩张图像的差异并且在图上标注出来)

    图像处理是构建所有计算机视觉的基础 按照我的图像处理指南使用OpenCV库学习计算机视觉的基础知识 SSIM进阶 利用python openCV将图片的差异性画框展示出来 诀窍是学习如何准确地确定在 x y 坐标位置上 图像的差异在哪里 使
  • shader学习网站

    https www shadertoy com https shaderfrog com http glslb in http glslsandbox com
  • Linux网络网卡配置相关知识记录

    Linux系统网络相关配置 1 网卡配置文件说明 2 使用 ifconfig 配置网卡 3 配置 DNS 地址 3 1 编辑 etc hosts 文件 在空白处输入 3 2 编辑 DNS 配置文件 4 确定 linux 服务器哪个网卡对应哪
  • MyTinyStl源码刨析

    文章目录 源码信息及目录 启动项目 迭代器 分配器 算法 容器实现 测试框架Test 源码信息及目录 MyTinySTL 项目地址 该项目实现了C 的stl库 阅读该项目可以使我们对stl的底层有更深入的认识 同时可以增强我们的c 的内功
  • 配置使用Eslint的时候 版本错误 "eslint": "5.6.0" a different version of eslint was detected higher up in the tr

    1 如果你也遇到下面的问题 你可以 按照命令行提示的那样 下面这四步完成的一般就可以了 但是不排除你在运行的时候忘记下载某些依赖 1 删除 package lock json 不是package json 你可以选择 yarn lock 或
  • W800开发板

    目录 概况 下载工具链编译工具 查看wsl版本 wsl所采用的工具链 添加工具链bin到环境变量中 编译 接口说明 概况 海凌科W800开发板 HLK W800 KIT 是海凌科电子面向开发者针对联盛德W800 芯片推出的一款多功能开发板
  • 服务器修改动态磁盘,服务器数据库使用动态磁盘

    服务器数据库使用动态磁盘 内容精选 换一换 云服务器备份 云服务器备份可以对普通服务器进行整机备份或部分磁盘备份 不适用于部署了数据库等应用的服务器 支持备份弹性云服务器ECS和裸金属服务器BMS 成本相对于VBS较高 适合对需要备份整个服
  • for循环执行顺序

    for循环的表达式一般如下 for 表达式1 表达式2 表达式3 表达式4 执行的顺序为 1 第一次循环 即初始化循环 首先执行表达式1 一般为初始化语句 再执行表达式2 一般为条件判断语句 判断表达式1是否符合表达式2的条件 如果符合 则
  • JDK1.6官方下载_JDK6官方下载

    JDK1 6官方下载 JDK6官方下载 JDK1 6官方下载 JDK6官方下载地址 http www java net download jdk6 6u10 promoted b32 binaries jdk 6u10 rc2 bin b3
  • 【Java基础】泛型记录概要

    泛型记录概要 泛型出现重要原因之一 创造容器类 泛型主要目的之一 指定容器持有什么类型的对象 保证编译的正确性 泛型简单实例 class GenericsClass
  • CoLab设置使用GPU和TPU

    tf2 4 0 from tensorflow python keras callbacks import EarlyStopping from tensorflow python keras layers import Embedding
  • mysql学习系列(2)--忘记mysql登录密码怎么办?

    系列文章目录 文章目录 系列文章目录 前言 一 登录mysql 二 操作步骤 1 找到mysql exe所在的文件夹 2 Win R打开cmd 进入bin文件夹 3 跳过mysql用户验证 3 net start mysql启动服务 总结
  • c++模板 --- 类模板、自定义类型当做模板参数

    生成一个类模板 类中用到了未知类型叫做类模板 用 template 修饰的类 这个类就是一个模板类 多用在数据结构中 忽略类型的问题 只要被 template 修饰 就是一个模板类 有没有用未知类型都是模板类 把模板当做一种特殊的数据类型即
  • hdoj1036

    讨厌的输入和输出 include
  • C语言枚举

    一 枚举类型 枚举类型 一个整型变量只有几种可能的值 值用枚举常量来表示 每个枚举常量可以用一个标识符来表示 也可以为它们指定一个整数值 如果没有指定 那么默认从 0 开始递增 在C 语言中 枚举类型是被当做 int 或者 unsigned
  • 计算机图形学----光线追踪----路径追踪

    基础知识预备 概率论 概率 期望 概率 值 PDF 概率密度函数 概率密度函数 p x 在数学中 连续型随机变量的概率密度函数 在不至于混淆时可以简称为密度函数 是一个描述这个随机变量的输出值 在某个确定的取值点附近的可能性的函数 也就是结
  • MySQL——数据类型以及对表结构的修改

    MySQL的数据类型 刚才我们在创建表的时候 说到了一个字段类型 所谓的字段类型就是这个字段能存放的数据的数据类型 在MySQL中有以下几种数据类型 数据类型 大小 字节 用途 格式 INT 4 整数 FLOAT 4 单精度浮点类型 DOU