[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就可以找到我们想要的分类。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode203:移除链表元素

题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 解题思想 使用虚拟头节点 代码 struct ListNode {int val;ListNode* next;ListNode() :val(0), next(nullptr) {};ListNode(i…

使用IDEA远程Debug调试

文章目录 背景配置IDEA设置启动脚本改造 细节细节1:停在本地断点,关闭程序后会继续执行吗?细节2:jar包代码和本地不一致会怎么样?细节3:日志打印在哪里?细节4:调试时其他人会不会卡住&#xff…

spring-data-elasticsearch官方文档解读(部分)

Spring Data Elasticsearch 这里主要学习的是4.4.16版本的文档 1. 版本 下表显示了 Spring Data 发行版系列使用的 Elasticsearch 版本和其中包含的 Spring Data Elasticsearch 版本,以及引用该特定 Spring Data 发行版系列的 Spring Boot 版本。给出的 Elastics…

【APP逆向】酒仙网预约茅台程序,包含逆向过程详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:爬虫实战,零基础、进阶教学 景天的主页:景天科技苑 文章目录 酒仙网预约抢购茅台1.抓包分析,账户名和密码登录2.短信登录3.登录+茅台预约 密码登录酒仙网预约抢购茅台 目标:账号登…

MVO-CNN-LSTM多输入时序预测|多元宇宙优化算法-卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&a…

mysql题库详解

1、如何创建和删除数据库? 创建数据库 CREATE DATABASE 数据库名; 删除数据库 drop database 数据库名; 2、MyISAM与InnoDB的区别? 1)事务:MyISAM 不支持事务 InnoDB 支持 2)行锁/表锁:MyISAM 支持表级锁…

力扣---最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…

【Redis】RedisTemplate序列化传输数据

使用自定义的序列化器 使用RedisTemplate默认的序列化器发送数据,会将key全都当成Object处理,从而按照对象的方式转成json格式发送到服务器,这样会导致两个问题。一是不方便阅读,二是会大大浪费内存。因此,建议自定义…

js 添加、删除DOM元素

1. js添加、删除DOM元素 1.1. 添加DOM元素 1.1.1. appendChild()方法 该方法添加的元素位于父元素的末尾,使用方法: parentNode.appenChild(NewNode) // parentNode是需要添加元素的容器,NewNode是新添加的元素   创建一个li元素并添加到…

阿里云-零基础入门推荐系统 【多路召回】

文章目录 赛题介绍评价方式理解赛题理解多路召回 代码实战导包读取数据读取文章的基本属性读取文章的Embedding数据调用定义函数获取用户-文章-时间函数获取文章-用户-时间函数获取历史和最后一次点击获取文章属性特征获取用户历史点击的文章信息获取点击次数最多的topk个文章定…

【数据库】软件测试之MySQL数据库面试总结

有表如下: Student 学生表 SC 成绩表 Course 课程表 Teacher 老师表 每个学生可以学习多门课程,每一个课程都有得分,每一门课程都有老师来教,一个老师可以教多个学生 1、查询姓‘朱’的学生名单 select * from Student whe…

直播录屏软件电脑版盘点,哪个才是你的最佳选择?

随着网络直播的兴起,录屏功能逐渐成为了许多用户电脑上的必备工具。无论是为了记录游戏过程、制作教学视频,还是为了保存会议内容,一个易于操作且功能全面的录屏软件都是不可或缺的。那直播录屏软件电脑版都有哪些呢?本文将为大家…

安卓项目:app注册/登录界面设计

目录 第一步:设计视图xml 第二步:编写登录和注册逻辑代码 运行效果展示: 总结: 提前展示项目结构: 第一步:设计视图xml 在layout目录下面创建activity_login.xml和activity_main.xml文件 activity_lo…

GEE错误——Landsat 9 数据集(LANDSAT/LC09/C02/T1_L2)ST_10波段缺少影像问题如何处理

简介 Landat 9的数据集是由卫星传感器记录并传输的。ST_10波段是其中一个波段,但是如果这个波段的影像数据缺失,可能是由于各种原因导致的。 以下是一些可能导致ST_10波段影像数据缺失的原因: 1. 传感器故障:可能是传感器在记录或传输过程中发生了故障,导致无法正确记录…

重要通告 | 公司更名为“浙江实在智能科技有限公司”

更名公告 升级蜕变、砥砺前行 因业务快速发展和战略升级,经相关政府机构批准,自2024年3月1日起,原“杭州实在智能科技有限公司”正式更名为“浙江实在智能科技有限公司”。 更名后,公司统一社会信用代码不变,业务主体…

【vue3之Pinia:状态管理工具】

Pinia:状态管理工具 一、认识Pinia二、定义store三、gettters四、Action1.定义普通函数2.异步实现 五、storeToRefs工具函数六、pinia持久化插件1. 安装插件2. main.js 使用3. 开启4.其他配置 一、认识Pinia Pinia 是 Vue 的最新 状态管理工具 ,是 Vuex 的 替代品 …

关于多权威属性加密论文阅读

来源于2007年Multi-authority Attribute Based Encryption 从单权威机构到多权威机构的意义是什么呢? 基础方案(单权威方案SW)支持数据持有者对数据进行加密使用指定的属性集合并且指定一个数值d。当一个用户需要使用该数据时,需…

盘点CSV文件在Excel中打开后乱码问题的两种处理方法

目录 一、CSV文件乱码问题概述 二、修改文件编码格式 1.识别CSV文件编码 2.修改编码格式 3.在Excel中打开修改后的CSV文件 案例 三、利用文本编辑器进行预处理 1.打开CSV文件并检查乱码 2.替换或删除乱码字符 3.保存并导入Excel 案例 四、注意事项 1、识别原始编码…

【机器学习】有监督学习算法之:逻辑回归

逻辑回归 1、引言2、逻辑回归2.1 定义2.2 基本原理2.3 公式2.3.1 核心公式2.3.2 Sigmoid函数 2.4 代码示例 3、总结 1、引言 小屌丝:鱼哥,鱼哥,求助 小鱼:咋了。 小屌丝:我被逻辑回归难住了。 小鱼:然后你…

数据结构 - 堆

这篇博客将介绍堆的概念以及堆的实现。 1. 堆的定义: 首先堆的元素按照是完全二叉树的顺序存储的。 且堆中的某个节点总是不大于或不小于其父节点的值。 根节点最大的堆叫做大堆,根节点最小的堆叫小堆。逻辑结构如下图所示: 大堆和小堆的…