MySQL表的操作与数据类型

目录

前言

一、表的操作

1.创建一个表

2.查看表的结构

3.修改表

4.删除一个表

[二、 MySQL的数据类型](#二、 MySQL的数据类型)

0.数据类型一览:

1.整数类型

2.位类型

3.小数类型

4.字符类型


前言

MySQL库的操作一文中介绍了有关MySQL库的操作,本节要讲解的是由库管理的结构------表


一、表的操作

1.创建一个表

语法:

creat table [表的名字]
(
    [列的名字] [列存储数据的类型],
    [列的名字] [列存储数据的类型],
    [列的名字] [列存储数据的类型]
)charaset [字符集] collate [校验集] engine[存储引擎];

说明:

①字符集、校验集、存储引擎可以不写,不写MySQL按照默认值进行设置。

②对列进行构写的时候要使用 () 而不是 {}。

③最后以分号结尾。

示例:创建一个名为Person的表,表中有三列数据分别是:姓名、年龄、体重,使用默认字符集、校验集、存储引擎。
图1 创建表示例

2.查看表的结构

语法:

desc [表名]

图2 查看表中内容示例

3.修改表

语法:

alter table [表名] [add(添加)] [列名1] [属性] comment(添加注释(可选)) after/before(8.0版本以上支持) [列名2];

alter table [表名] [modify(修改)] [列名] [属性];

alter table [表名] [drop(删除)] [列名] [属性];

说明:

其中对于add操作,可以选在在某一列前(before)或后(after)添加一列属性,不过在某一列前添加属性在MySQL8.0后才支持。语义是列名1在列名2后或前添加一列名为列名1的列。
图3 添加一列示例
图4 修改列属性示例
图5 删除一列示例

4.删除一个表

语法:

drop table [表的名字]

图6 删除一个表示例

二、 MySQL的数据类型

0.数据类型一览:

数值类型包括:整形、bit类型(位类型)、小数类型、字符串类型
图7 MySQL数据类型一览

1.整数类型

说明:

图8所示的类型,其实与编程语言中的整数类型相似,只不过不同的类型表示的数据范围不同
图8 整形
图9 向tinyint插入数据示例

从上图中我们不难发现,对于超出数据类型大小的数据,MySQL不允许用户进行插入,对于满足数据范围的数据会进行插入,而不是想编程语言一样发生"数据截断"。这是因为,数据库需要保证插入的数据尽可能是正确的,但是发生截断的数据一定不符合该要求,所以这样的操作也是为了告诉程序员,插入数据有问题的一种方式。 其它的整数类型也与tinyint相似,这里就不过多赘述了。

2.位类型

图10 bit类型插入数据示例

说明:

在早期的MySQL版本中,bit类型是通过ASC||码进行显示的,但这样就面临一个问题,当ASC||码值前32位是控制字符,在计算机中是不可显示的。所以在早期的bit类型下,插入较小的数值后是不进行显示的,但是随着版本的更迭,在一些MySQL版本中我们已经可以显示看到bit类型的任何大小的值。(其实只要改变显示的方式,在早期版本中也可以显示bit类型数据的值)。
图11 ASC||对照表
图12 bit类型数据无法显示示例

3.小数类型

语法:

float(m,d) [unsigned(可选)]
decimal(m,d) [unsigned(可选)]

说明:

①m表示一共有多少位,d表示有几位小数。

②float精度大约只有7位

③decimal支持的m最大值65,d支持的最大值是30。decimal的m、d的默认值

④float在超出精度是,会对超出精度的部分采用"四舍五入"的方式保存数据

⑤对于无符号的小数类型的数据,他们的取值范围不像整数类型一样近似扩大2倍,无符号小数类型的数据是插入负数非法,正数范围与有符号时相同。

⑥同整数类型一样,小数类型不允许插入超过数据存储范围的值。
图13 使用默认值创建"小数列"

此时由于float没有进行设置并且没有默认值,所以是无法向f列中插入任何数据的。 所以需要修改一下表:
图14 表修改后的数据

这个时候我们想表中插入数据并查看插入结果:
图15 向修改后的表插入数据

我们不难发现float类型,只能保留大约7位的进度,对于超出精度的部分会令数据丢失。但是对于decimal类型保存数据的精度在相同情况下比float类型更好。

4.字符类型

语法:

char(M)                             //m最大值为255 存储单位:字符
varchar(M)                          //m最大值为65535 存储单位:字节
date                                //插入格式 yyyy-mm-dd
datetime                            //插入格式 yyyy-mm-dd hh:ii:ss
timestamp                           //随着插入更新,当插入是该列对应的时间变为插入时间 
enum('选项1','选项2','选项3',...);   //单选类型        
set('选项值1','选项值2', ...);       //多选类型

说明:

①char与varchar都是字符串类型,二者的区别在于当数据未能占满数据类型大小时处理的手段

定长字符串比较浪费空间资源,但是效率高;变长字符串更节省空间,其使用空间的规则是用多少开辟多少,这也就导致了它的效率更低。

②注意:由于变长字符串的"变长"特性,varchar中需要额外的1-3个字节用来存储已经使用的空间大小,所以实际上varchar的存储最大字节数应该是65532字节。

③注意:char与varchar的单位不一样,一个是字符一个是字节,在utf-8的编码逻辑下,一个字符占3个字节,所以在utf-8字符集逻辑下,char类型的最大存储字节数应该是255*3,

varchar可存储的最大字符数应该是65532/3。

//表创建语句
create table test_char  ( name varchar(20),ID char(10),day date,canlender datetime,holiday enum('星期天','星期六'),num set('1','2','3'));


//表插入语句
insert into test_char values("zhang","12345","1985-7-1","1986-7-1 15:21:12","星期天","1,2");

图16 字符类型数据插入示例

请注意:以上的插入只为了证明对应类型的性质,并没有实际意义,在具体应用中应该明确每一列的意义。不要模仿文中的行为。

相关推荐
huaqianzkh1 小时前
了解MySQL 高可用架构:主从备份
数据库·mysql·架构
向往风的男子2 小时前
【mysql】mysql之读写分离以及分库分表
数据库·mysql
阳光开朗_大男孩儿2 小时前
DBUS属性原理
linux·服务器·前端·数据库·qt
挠背小能手2 小时前
达梦数据库SCHEMA使用初探
数据库·oracle
楠神说软件测试3 小时前
接口自动化框架入门(requests+pytest)
运维·数据库·自动化
惟长堤一痕3 小时前
医学数据分析实训 项目一 医学数据采集
数据库
xuan哈哈哈3 小时前
web基础—dvwa靶场(八)SQL Injection(Blind)
数据库·web安全·网络安全
Lill_bin3 小时前
Lua编程语言简介与应用
开发语言·数据库·缓存·设计模式·性能优化·lua
听说唐僧不吃肉4 小时前
Shell篇之编写MySQL启动脚本
mysql
惜.己4 小时前
MyBatis中一对多关系的两种处理方法
java·开发语言·后端·sql·mysql·mybatis·idea