[MySQL]基本数据类型及表的基本操作

一、常用的数据类型

1.1 数据库表的列类型

数值 1 2 3.14

  • tinyint 十分小的数据 1个字节
  • smallint 较小的数据 2个字节
  • mediumint 中等大小的数据 3个字节
  • int 标准的整数 4个字节
  • big 较大的数据 8个字节
  • float 浮点数 4个字节
  • double 浮点数 小数 8个字节(精度问题)
  • decimal 字符串形式的浮点数 (金融计算的时候一般使用)

字符串

  • char 固定大小字符串 0-255 char(5) 00001
  • varchar 可变字符串 0-65535 varchar(5) 1
  • tinytext 微型文本 2^8 - 1
  • text 文本串 2^16 -1 保存大文本

时间日期

  • date YYYY-MM-DD,日期 (year,month,day)
  • time HH: MM : SS 时间格式(hour:minutes,seconds)
  • datetime YYYY-MM-DD HH: MM:SS (年月日,时分秒)最常用的时间格式
  • timestamp 时间戳, 1970.1.1到现在的毫秒数!
  • year 年份

null

  • 没有值, 未知
  • 注意,不要使用null进行运算,结果肯定为null

  1. 上面看到的这类基本数值数据类型都是有符号的,MySql 也是支持无符号的数据类型,unsigned 作为前缀,但是 官方也建议无符号类型不建议使用,特定情况下会产生很严重的误差,例如,a - b, b > a,但是由于没有符号限制,两者相减反而会产生一个很大的数,在MySql 后续的版本中也不会在支持无符号类型了。
  2. 在使用浮点型数据时,最好选择decimal ,他的精度比 float 、double 更高,语法: decimal(M,N) M : 整个数据的总长度,N:数据小数的位数。例如: 3.14, M = 3, N = 2; 在表示货币的时候我们可以采用 int 类型,这样就不会有精度的问题,采用”分“为单位。例 :123,表示 1.23 元。
  3. 我们在使用时间类型是,不知道该用什么样的格式插入时间,在插入时间的时候,是通过特定的字符串来表示时间日期的,例如: "2023-02-9 16:12:00", 对于字符串来讲 英文单引号或者双引号都可以。日期年月日之间用 '-' 减号连接,与时间之间隔一个空格,时间之间用 ':' 连接。以这样的形式输入的字符串,服务器就会识别为时间。如果我们想使用当前系统时间,SQL 提供了一个返回当前系统时间的函数 now(),这个函数赋值即可。

二、数据表的基本操作

书接上篇,我们已经学习了如何操作数据库,本篇学习如何操作数据表,在操作数据表的时候,需要选中数据库;

2.1 创建和删除表

声明:本篇博客讲述的是基础操作,关于数据库的字段属性尽请期待下一篇博客。

基础语法 :

create table table_name (

`字段名` [属性] [索引] [注释],

  `字段名` [属性] [索引] [注释],

  ...

  `字段名` [属性] [索引] [注释],

 …… ……

);

那么在创建一个表之前呢,也可以判断一下这个表是否存在,就像创建数据库时的操作一样。

create table if not exists student (

              ……

);

可以使用 comment 增加字段说明,只是给 sql语句提供一个注释作用,在创建的时候。

例如:

create table stu_test (

id int,

name varchar(20) comment '姓名',

password varchar(50) comment '密码',

);

例题:

-- 创建学生表(列,字段) 使用SQL创建

-- 学号int 姓名 varchar(10),varchar性别sex('男','女'),身高decimal(3,2),加入时间 datetime。

-- 字符串使用 单引号括起来!

-- 所有语句后面加,(英文的),最后一个不用加

目前我们已经创建好了一个student 的数据表,接下来的操作是查看一下这个表的结构。

desc teble_name;

desc ->describe 的缩写,描述一个表的结构。


创建了一个表,那自然要学习如何删除一个表,。

删除表(drop):(如果表存在再删除)

drop table if exists student;

--当然最稳妥的操作是 指定数据库之后再选择表,这样就可以避免误操作

drop table if exists school.student;

--这样删也是可以的,但是更容易报错

drop table student;

因为我们是student 数据表是创建在 school 数据库里面,然后可以通过 ‘.’这个符号来约束一下,避免误操作,这也是一种精确表示的方法。

==所有的创建和删除操作,尽量加上判断以免报错==


2.2 修改表的结构(alter)

-- 修改表结构

依据上表 student 表为例,如果我们在创建好表的结构之后,难免在会有所纰漏,比如说少添加了一个字段,又或者是发现某个字段不合适需要删除,还有修改字段属性等等……

2.2.1-- 添加字段

student 表 新增一个叫做 telephone (手机号)的字段,它的类型是可变字符串。

语法:add 是关键字

alter table 【表名】 add 【新增字段名】【属性】 ;


2.2.2 -- 修改字段 (注意本条语句不修改字段名)

假如我们发现表中的telephone (手机号)的字段 属性的长度给少了,所以我们需要修改一下这个字段。

语法:modify 是关键字

alter table 【表名】 modify 【字段名】【修改后的属性】 ;


2.2.3 -- 修改字段名

假如我们发现表中的某个字段的 字段名没取好名,也是可以修改的,例如将 sex 修改为 gender (性别)

语法: change 是关键字

alter table 【表名】 change 【原字段名】【修改后的字段名】【属性】 ;


2.2.4 -- 删除字段

这个就很好理解了,删除某个字段(列名), 本次删除 telephone 字段。

语法:

alter table 【表名】 drop 【字段名】;


2.2.5 -- 修改表名

将student 数据表 表名修改为 stud。

语法:关键字 rename

alter table 【表名】 rename 【修改后的表名】;

执行语句后表名已经被修改,以上操作,轻易不要操作,容易造成一系列的连锁反应(蝴蝶效应,动了一个表,可能需要修改多个表的数据,关系型数据库),在创建的时候就将表的结构计划好,尽可能的减少表结构的修改。


2.3 添加数据(insert into )插入

语法:

insert into 表名([字段名1,字段名2,字段名3])values('值1'),('值2)',('值3')...

into 其实可以不用写,可以根据个人意愿决定。

2.3.1-- 插入时匹配对应的值

这种方式插入数据,需要指定需要插入的列名(字段),然后根据列名(在记录没有约束的情况下)插入数据。

意思就是你可以只插入“李四" 独占一行。注意观察插入日期的格式。


2.3.2 -- 不声明字段新增数据,必须把所有字段的值都写上

此处使用now() 函数来插入日期时间。


2.3.3 -- insert语句后面可以加多个VALUES,可以添加多个数据

多行插入只需要写一个 values 即可,多行插入的性能也是优于 单行插入的,因为MySql 本质上就是客服端服务器的程序,客服端发出指令,服务器进行相应的处理,一行一行的插入意味着反复发送指令,这个点不知道大家能否能 get 到呢?


注意事项:

字段和字段之间使用英文逗号隔开
字段是可以省略的,但是后面的值必须要一一对应
可以同时插入多条数据,VALUES后面的值需要使用,隔开即可。
value,是一个具体的值,也可以是一个函数


2.4 基础查询

语法:

SELECT 字段,...FROM 表

以student 表为例。

-- 查询所有的员工 SELECT 字段 FROM 表

如果我们需要一次性查找所有的字段,其实不用讲所有字段全部列举出来,可以使用 ”*“ 来替代。

可以看出两者的结果是一样的。


-- 查询指定字段,ID + Name

-- 别名,给查询结果起一个名字 AS, 可以给字段取别名,也可以给表取别名

-- as可以加也可以不加

这样看起来舒服多了吧,哈哈,as 不加也可以运行,但是最好是加上,避免将别名看成字段。

-- 别名可以简化字段或者表的名称,更精准的输入

-- 给student表起别名为stu

不使用 as 也是可以的,在复杂的查询中,使用别名查询,能提升效率。

本文图片由保护小周ღ的博客_CSDN博客-C语言,JavaEE,每日一题领域博主提供

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

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

相关文章

JSON的用法和说明

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。 JSON建构于两种结构: "名称/值"对的集合。理解为对象 值的有序列表。理解为数组 JSON具有以下这些形式: 对象是一个无序的“ ’名称/值‘ 对”集合。一个…

【排序】快速排序(递归和非递归)

快速排序 前言图解大致思路对于hoare版本对于挖坑法对于前后指针法 实现方法递归非递归 快排的优化(基于递归的优化)三数取中法小区间优化 时间复杂度和空间复杂度 前言 快速排序,听名字就比较霸道,效率根名字一样,非…

永久免费内网穿透不限制速度

市面上的免费内网穿透大都有格式各样的限制,什么限制流量啊,每个月要签到打卡啊,还有更改域名地址等,只有神卓互联内网穿透是永久免费没有限制的,白嫖也可以。 这篇文章分享了3个方案,按照性能和综合指标排…

项目驱动的编写

驱动代码直接使用nfs传输,设备树直接在开发板中修改设备树文件 1、修改好设备树,在内核顶层make dtbs ,然后替代tftp目录中的设备树文件 2、使用内核源码编译生成驱动程序,然后传送到开发板中,使用insmod动态加载 LCD驱动 1、初始…

从零学习SDK(7)如何打包SDK

打包SDK的目的是为了方便将SDK提供给其他开发者或用户使用,以及保证SDK的兼容性和安全性。打包SDK可以有以下几个好处: 减少依赖:打包SDK可以将SDK所需的库、资源、文档等打包成一个文件或者一个目录,这样就不需要用户再去安装或…

ArduPilot开源飞控系统之简单介绍

ArduPilot开源飞控系统之简单介绍 1. 源由2. 了解&阅读2.1 ArduPilot历史2.2 关于GPLv32.3 ArduPilot系统组成2.4 ArduPilot代码结构 3. 后续4. 参考资料 ArduPilot是一个可信赖的自动驾驶系统,为人们带来便利。为此,提供了一套全面的工具&#xff0…

读SQL进阶教程笔记12_地址与三值逻辑

1. SQL和数据库都在极力提升数据在表现层的抽象度,以及对用户隐藏物理层的概念 2. 关系模型是为摆脱地址而生的 2.1. “地址”不仅包括指针操作的地址,还包括数组下标等 3. 一个优雅的数据结构胜过一百行杂耍般的代码 3.1. 精巧的数据结构搭配笨拙的…

Spring MVC 的调用(12)

目录 SpringMVC流程 源码分析 第一步:用户发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者…

高效部署Redis Sentinel模式(哨兵模式),手把手教学

Redis Sentinel模式部署 前言一、服务器部署同版本的redis1、换软件源在yum拉取包的时候启用remi源 二、修改配置文件1.修改/etc/redis.conf2.配置/etc/redis/sentinel.conf 三、启动redis服务1、启动服务2、连接redis3、检查redis 前言 这里就不过多的解释高可用的好处了&…

CRM系统是什么?它有什么作用?

CRM系统是什么? CRM是Customer Relationship Management(客户关系管理)的缩写,是一种通过对客户进行跟踪、分析和管理的方法,以增加企业与客户之间的互动和联系,提高企业与客户之间的互信,从而…

基于 VITA57.4 标准的 8 路 500MSPS/1GSPS/1.25GSPS 采样率 14 位 AD 采集 FMC 子卡模块

板卡概述 FMC148 是一款基于 VITA57.4 标准的 JESD204B 接口 FMC 子卡模块,该模块可以实现 8 路 14-bit、500MSPS/1GSPS/1.25GSPS ADC 采集功能。该板卡 ADC 器件采用 ADI 公司的 AD9680 芯片,全 功率-3dB 模拟输入带宽可达 2GHz。该 ADC 与 FPGA 的主机接口通 …

Revit相关问题:符号线,转转问题,生成三维视图

一、Revit符号线如何画粗一些?如何自定义符号线子类别? 1、Revit在族里面符号线的粗细、显示颜色、显示线型为符号线的子类别控制! 你可以通过,管理选项卡新建子类别,然后在画符号线的时候应用该子类别! 新建符号线对象样式 应用子类别 二、Revit三维模…

背包问题——01背包|完全背包

目录 前言&背包问题的历史 01背包 1、题目 2、暴力解01背包 Ⅰ、代码 3、动态规划解01背包 Ⅰ、二维dp数组解01背包 1)dp数组的含义 2)递推公式 3)dp数组的初始化 4)遍历顺序的讨论 5、代码 Ⅱ、一维数组解01背包 1&…

C#调用C++封装的SDK库(dll动态库)——上

C#调用C封装的SDK库(dll动态库)——上 一、C封装库 通过前几篇文章,我们封装了C的动态DLL库,有Qt版的,有C版的,当然还有介绍了Pimpl模式在SDK封装中的使用: Qt创建SDK VS创建SDK Pimple在SDK封装中的应用 但是&a…

RabbitMQ入门

AMQP AMQP(Advanced Message Queuing Protocol,高级消息队列协议) 是进程之间传递异步消息的网络协议。 AMQP工作过程 发布者(Publisher)发布消息(Message),经过交换机(Exchange),交换机根据路由规则将收到消息分发给交换机绑定的队列(Queue),最后AM…

二维数组的总结

一、时间复杂度和空间复杂度 时间复杂度和空间复杂度是衡量算法效率的两个重要指标。时间复杂度是指算法执行所需的时间,而空间复杂度是指算法执行所需的内存空间。 计算时间复杂度和空间复杂度需要分析算法中各个操作的执行次数和内存使用情况。具体的计算方法可以…

亚马逊、ebay、temu如何提升产品点击率?测评自养号解析

产品点击率对于店铺销售额的影响至关重要,尤其是在竞争越来越激烈的市场环境中,想要有销量和转化,提高产品listing点击率成为了非常关键的一环。 1. 产品主图 顾客浏览产品时,第一眼看到的就是主图,一张优质的主图更容…

CSDN博客编写教程

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

UniLM模型简单介绍

目录 一、概要 二、深入扩展 2.1 预训练任务 2.2 模型精调 一、概要 如果将基于Transformer的双向语言模型(如BERT模型中的掩码语言模型)与单向的自回归语言模型(如BART模型的解码器)进行对比,可以发现&#xff0c…

springboot+vue职称评审管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的职称评审管理系统。项目源码请联系风歌,文末附上联系信息 。 目前有各类成品java毕设,需要请看文末联系方式 …