[MYSQL数据库]--表的增删查改和字段类型

前言

作者:小蜗牛向前冲

名言:我可以接受失败,但我不能接受放弃

  如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 

目录

一、表的增删查改

1、表的创建

​2、表的查看

3、表的修改

4、表的删除

二、字段的类型 

1、数据类型

2、tinyint类型

3、bit类型

4、float类型 

5、decimal类型 

5、字符类型 

 6、日期和时间类型

 7、enum和set


对表的增删查改,字段的类型:tinyint,bit,float,decimal,字符,日期和时间,enum,set类型。

一、表的增删查改

1、表的创建

语法:

CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎

说明:

  • field 表示列名 datatype 表示列的类型
  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

创建表案例 

在创建表的时候我们要先建立库:库的建立不懂可以看这里(传送门) 

这里我们建立了一个test1的数据库,并且use test。

在我们建库后在下面的路径下,可以看到的test1库,其实就是一个目录(查看这里需要root权限su -)

/var/lib/mysql

 进入到目录里面后,默认只要一个db.opt的文件,里面配置了默认的字符集和校验规则。

了解完这些,我们继续来创建表 

create table users(name varchar(20) comment '用户名字',password char(32) comment '用户密码',birthday date comment '生日'
) charset=utf8 collate=utf8_general_ci engine=MyIsam;

说明:

  • 不同的存储引擎,创建表的文件不一样。
  • users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:
  • users.frm:表结构 users.MYD:表数据 users.MYI:表索引

这里我们继续创建users2 ,但我们改用了InnoDB存储引擎

这里我们继续在数据库test1的目录下查看发现,存储引擎的不同,其实就是文件类型的不同。

 2、表的查看

语法:

desc 表名;

 这里我们分别查看一下我们上面创建的users和users2

 Field:表示字段名字

Type:表示字段的类型

当然我们也可以用下面命令查看建表的细节

show create table users \G

当我们怎么发现和我们写的代码好像,不一样?

这是因为mysql会对我们的命令进行词法语法的分析,优化成mysql的标准。 

3、表的修改

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

语法:

ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column
datatype]...);
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...);
ALTER TABLE tablename DROP (column);

 案例:

将users表名字改为user1

alter table users renmae to user1;

 在表中添加数据:

insert into user1 values('张三','123456','2001-2-24');
insert into user1 values('李四','242421','2012-2-1');

 查看表中信息

select * from user1

在user1表添加一个字段(添加列),用于保存图片路径 

alter table user1 add image_path varchar(128) comment '这是用户头像的路径' after birthday;

 插入数据后是对原来数据没有影响的

删除password列

alter table user1 drop password;

删除字段一定要小心,删除字段及其对应的列数据都没了 

修改name,将其长度改成60

 alter table user1 modify name varchar(60);

将name列修改为xingming 

 alter table user1 change name xingming varchar(60);

注意这里新的字段要完整定义 

4、表的删除

语法:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

这里我们删除我们以前建的users2

drop table users2;

二、字段的类型 

1、数据类型

MySQL支持多种数据类型,这些类型可以分为几个主要的类别,包括数值类型、日期和时间类型、字符串类型、二进制类型等。以下是MySQL中常见的数据类型:

整数类型:

  • TINYINT: 1字节,范围从-128到127(有符号),0到255(无符号)。
  • SMALLINT: 2字节,范围从-32,768到32,767(有符号),0到65,535(无符号)。
  • MEDIUMINT: 3字节,范围从-8,388,608到8,388,607(有符号),0到16,777,215(无符号)。
  • INTINTEGER: 4字节,范围从-2^31到2^31-1(有符号),0到2^32-1(无符号)。
  • BIGINT: 8字节,范围从-2^63到2^63-1(有符号),0到2^64-1(无符号)。

 小数类型:

  • FLOAT: 单精度浮点数。
  • DOUBLEREAL: 双精度浮点数。
  • DECIMALNUMERIC: 固定小数点数。

日期和时间类型:

  • DATE: 日期,格式为'YYYY-MM-DD'。
  • TIME: 时间,格式为'HH:MM:SS'。
  • DATETIME: 日期和时间,格式为'YYYY-MM-DD HH:MM:SS'。
  • TIMESTAMP: 时间戳,表示自1970年1月1日以来的秒数。
  • YEAR: 年份,格式为'YYYY'。

字符串类型:

  • HAR: 定长字符串。
  • VARCHAR: 变长字符串。
  • TEXT: 长文本字符串。
  • ENUM: 枚举类型。
  • SET: 集合类型。

 二进制类型:

  • BINARY: 定长二进制数据。
  • VARBINARY: 变长二进制数据。
  • BLOB: 二进制大对象,用于存储大量数据。

下面进行一些比较常见类型的介绍 

2、tinyint类型

我们创建一个tinyint类型的数据(取值范围:-128~127),进行插入测试:

create table t1(num tinyint)
insert into t1 values(-128);
nsert into t1 values(127);
insert into t1 values(66);
insert into t1 values(-666);
select * from t1;

  • 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
  • 可以通过UNSIGNED来说明某个字段是无符号的

比如上面例子:只要在 创建t2的指定为为无符号的类型就可以了。

create table t1(num tinyint unsigned)

注意:我们在使用unsigned要根据场景来使用尽可能的节约资源。

3、bit类型

基本语法:

bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

举例:

create table t3(id int,online bit(1));
insert into t3 (id,online) values(123,0);
insert into t3 (id,online) values(456,1);
insert into t3 (id,online) values(124,4);
desc t3;
select *from t3;

 这里我们创建了标t3里面online是bit位图类型,0就表示用户不在线,1表示在线

bit字段在显示时,是按照ASCII码对应的值显示。这里我们继续把位图改大

并且分别以ASCII码对应的值显示和十进制显示。

alter table t3 modify online bit(64);
insert into t3 (id,online) values(234,42);
desc t3;
select *from t3;
select id,hex(online) from t3;

4、float类型 

语法:

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

案例 

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

这里我们继续创建表t4,并且对里面数据进行插入内容,salary我们设置为float型。

insert into t4(id,salary) values(1,99.99);
insert into t4(id,salary) values(2,-99.99);
insert into t4(id,salary) values(3,23.23);
insert into t4(id,salary) values(3,2.123);
insert into t4(id,salary) values(3,100);
insert into t4(id,salary) values(3,2.129);

 当我们对salary插入100肯定是被mysql约束不允许插入的,但我们也可以观察到float类型是有四舍五入的。

这里我继续建立t5试试float类型的无符号类型 

如果定义的是float(6,4) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99

为表插入一些数据 

 seletc *from t5;

5、decimal类型 

语法:

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

  •  decimal(5,2) 表示的范围是 -999.99 ~ 999.99
  • decimal(5,2) unsigned 表示的范围 0 ~ 999.99
  • decimal和float很像,但是有区别: float和decimal表示的精度不一样

这里我们分别插入数据:

insert into t6(id,salary1,salary2) values(1, 25.12345678,25.12345678);

明明我们插入的值是一样的,但是salary1和salary2存储的值却不一样,这是因为, float表示的精度大约是7位。而decimal的精度却很高。

  • decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略, 默认是10
  • 建议:如果希望小数的精度高,推荐使用decimal。

5、字符类型 

char语法:

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

但是我们这里要注意的是,这里说的是字符长度不是子节长度 。

char(1),可以插入1字母,也可1个中文(在UTF8的校验码占三个字节)。

举例:

 varcahr语法:

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

 关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字 节数是65532。
  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。

见一见 varcahr

create table t8( id int, name varchar(4));
insert into t8(id,name) values(1,'小明');
insert into t8(id,name) values(2,'中国是我心中最好的国家');//error
mysql> alter table t8 modify name varchar(65535);//1:error
mysql> alter table t8 modify name varchar(21845);//2:error
mysql> alter table t8 modify name varchar(21843);//3:error
alter table t8 modify name varchar(21842);
insert into t8(id,name) values(2,'中国是我心中最好的国家');select *from t8;

这里我在修改 varcahr大小的时候报了三次错误,

错误1,2上面已经解释过了,但是为什么我明明都已经预留了存放1 - 3 个字节用于记录数据大小的字节数,还是报错误3,那是因为id也在同一行中,也会占字节大小。

char和varcahr比较 

 如何选择定长或变长字符串?

  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号。
  • 如果数据长度有变化,就使用变长(varchar), 比如:名字,地址。
  • 但是你要保证最长的能存的进去。 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。
  • 定长的意义是,直接开辟好对应的空间。
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

 6、日期和时间类型

常用的日期有如下三个:

  • date :日期 'yyyy-mm-dd' ,占用三字节
  • datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
  • timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用 四字节

举例:

 create table t9( time date, time2 datetime, time3 timestamp);insert into t9(time,time2) values('1990-2-4','2414-4-2 12:3:23');select *from t9;

update t9 set time = '2002-1-1';
select *from t9;

更新了time的数据,其中tiem3时间戳的数据也会更新。 

 7、enum和set

 语法:

enum:枚举,“单选”类型; enum('选项1','选项2','选项3',...);、

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考 虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535 个;当我们添加枚举值时,也可以添加对应的数字编号。

set:集合,“多选”类型; set('选项值1','选项值2','选项值3', ...);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率 考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。 

 案例:

create table votes( username varchar(20), 
gender enum('男','女'),hobby set('跑步','美食','看电影','打球')
);insert into votes values('张三','男','跑步');
insert into votes values('李四','女','美食');
insert into votes values('赵六','男','3');
insert into votes values('老陈','1','打球,看电影,跑步');
select * from votes;

为什么我在存存放赵六hobby的时候,填3会存放的是跑步,而填老陈性别写1会是男。

因为这些是存放在放在位图中的,对赵六

爱好有4个所以对应的位图是0000;变1就是有这个爱好

当我们填3--->位图0011。而位图中不就是表示赵六的爱好为跑步和美食。

对来陈

性别有二种:位图为00,变1就是对应的选择(男或者女)

填1--->位图01。位图就表示男。

enum和set的选择 

select * from votes where hobby='美食';

 但是这样我们仅仅查到了有美食爱好的只有李四,赵六不也是有这个爱好吗

因为这语句过滤出了所有"hobby"列值为"美食"的行,如果含义其他的就查出来了。

集合查询使用find_ in_ set函数:

  • find_in_set(sub,str_list) :
  • 如果 sub 在 str_list 中,则返回下标;
  • 如果不在,返回0; str_list 用逗号分隔的字符串。

select * from votes where find_in_set('美食', hobby);

 通过find_in_set就可以找到我们想要的分类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高数立体几何笔记

上个学期立体几何章节的一点笔记,很潦草,但重点内容基本都有复习到 Page1:介绍了向量的模、夹角、单位向量、投影投影向量、方向角、点乘、叉乘、混合积的基本运算和性质Page2: 回顾了高中所学的平面直线的多种表示方法以及距离的计算方法&…

Go语言必知必会100问题-21 切片初始化方法及最佳实践

切片初始化 切片使用内置的make函数进行初始化,初始化需要提供两个参数,分别是切片的长度和容量(可选)。如果这两个参数设置的不合理,会使得后续对切片的操作非常低效。下面来看看怎么设置这两个参数是合适的。 假设我们要实现一个转换函数…

【工作实践-07】uniapp关于单位rpx坑

问题:在浏览器页面退出登录按钮上“退出登录”字样消失,而在手机端页面正常;通过查看浏览器页面的HTML代码,发现有“退出登录”这几个字,只不过由于样式问题,这几个字被挤到看不见了。 样式代码中有一行为&#xff1a…

Midjourney绘图欣赏系列(十一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

Linux常见指令总结

ls:显示当前目录下文件列表 常用的命令行参数: -l 显示更多的文件属性 -a 显示所有的文件/目录(包括隐藏的) -d 只显示目录 ps:参数可以叠加使用。 例如:ls -la 显示所有文件…

wait 和 notify方法

目录 1.1 wait()方法 wait 做的事情: wait 结束等待的条件: 1.2 notify()方法 1.3notifyAll方法 1.4wait()和sleep()对比 由于线程之间是抢占式执行的, 因此线程之间执行的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执行先后顺序. 完成这个协调…

利用matlab处理netcdf文件中time变量的格式转换问题

我们通常读取的科研数据具有时间维度,因而通常用于数据运算的时候,最常使用的是(2003.567)等双精度格式的年份。本专栏提供了一个将nc文件中提供的时间变量的年-月-日转成-年。但是nc文件提供的time变量通常是以下两种格式&#x…

C语言入门学习 --- 2.分支与循环语句

第二章分支与循环语句 2.分支与循环语句 分支语句 ifswitch 循环语句 whiledo whilefor goto语句 2.1分支语句(选择结构) 2.1.1 什么是选择? 例:如果你努力,也许会成功。如果你不努力,你永远不会成功。这就是选择 2.1.2 if语句…

重学SpringBoot3-日志Logging

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-日志Logging 引言默认日志配置日志门面如何实现默认配置 自定义日志配置日志级别日志分组日志格式日志输出自定义 Logback 配置切换日志框架 日志使用方…

数据结构 - 链表 (四)

这篇博客将介绍带头循环的双向链表,实现链表的头部插入/删除,尾部插入/删除,查找,以及任意位置的插入删除。 1.结构 带头循环的双向链表的结构如下图所示,一个结点内部包含数据,以及分别指向前一个以及后…

LabVIEW质谱仪开发与升级

LabVIEW质谱仪开发与升级 随着科技的发展和实验要求的提高,传统基于VB的质谱仪系统已经无法满足当前的高精度和高效率需求。这些系统通常存在着功能不全和操作复杂的问题,影响了科研和生产的进度。为了解决这些问题,开发了一套基于LabVIEW开…

`PF_NETLINK` 是用于与内核通信的Socket族之一

PF_NETLINK 是用于与内核通信的Socket族之一。在Linux系统中,Netlink是一种用于内核与用户空间进程之间通信的机制,而PF_NETLINK Socket族则用于创建与Netlink通信相关的Socket。通过Netlink Socket,用户空间程序可以与内核进行双向通信&…

16. C++标准库

C标准库兼容C语言标准函数库,可以在C标准库中直接使用C语言标准函数库文件,同时C标准库增加了自己的源代码文件,新增文件使用C编写,多数代码放在std命名空间中,所以连接C标准库文件后还需要 using namespace std;。 【…

Python算法题集_搜索旋转排序数组

Python算法题集_搜索旋转排序数组 题33:搜索旋转排序数组1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【二分法区间判断】2) 改进版一【二分找分界标准二分法】3) 改进版二【递归实现二分法】 4. 最优算法5. 相关资源 本文为Pytho…

Qt使用Q_DECLARE_INTERFACE Q_INTERFACES宏实现接口类使用qobject_cast进行类型转换

在写抽象类或者接口的时候&#xff0c;肯定是不能继承QObject的 但是又想使用qobject_cast进行类型转换&#xff0c;使用以下办法就能实现 #ifndef FACTORYINTERFACE_H__ #define FACTORYINTERFACE_H__ #include <QObject> class FactoryInterface{ public:FactoryInterf…

【C++进阶】C++多态概念详解

C多态概念详解 一&#xff0c;多态概念二&#xff0c;多态的定义2.1 多态构成的条件2.2 什么是虚函数2.3 虚函数的重写2.3.1 虚函数重写的特例2.3.2 override和final 2.4 重载和重写&#xff08;覆盖&#xff09;和重定义&#xff08;隐藏&#xff09;的区别 三&#xff0c;抽象…

salesforce Multi-Line Layout中公式字段不能显示吗

在Salesforce的多行布局中&#xff0c;公式字段是可以显示的。但是&#xff0c;有一些限制和注意事项&#xff1a; 默认情况下&#xff0c;公式字段可能不会显示&#xff1a; 公式字段在多行布局中默认是不包含的。您可能需要手动编辑多行布局&#xff0c;将公式字段添加到布局…

QGIS 开发之旅一《二次开发环境搭建》

1、 安装QT 下载QT Index of /new_archive/qt 我选择的版本是 Qt5.14.2 2、安装VS2017 Downloads & Keys - Visual Studio Subscriptions。下载后选择windows通用平台开发和C 开发就可以了。 3、安装插件QT vs tools 搜索 qt vs tools&#xff0c;选择第一个安装 …

3642. 最大公约数和最小公倍数 考研上机真题

输入两个正整数 m和 n&#xff0c;求其最大公约数和最小公倍数。 输入格式 一行&#xff0c;两个整数 m和 n。 输出格式 一行&#xff0c;输出两个数的最大公约数和最小公倍数。 数据范围 1≤n,m≤10000 输入样例&#xff1a; 5 7输出样例&#xff1a; 1 35 #include…

框架和函数库的区别

框架和函数库在软件开发中各自扮演着重要的角色&#xff0c;但它们之间存在一些关键的区别。 首先&#xff0c;从目的上来看&#xff0c;框架旨在提供一个完整的解决方案和开发规范&#xff0c;使开发者能够高效地构建应用程序。它实现了大部分功能&#xff0c;并定义了开发人员…