• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

Mysql(二)修改表结构、 复制表、 字段类型、 数据类型、 重命名表

Mr.Lee 由 Mr.Lee
2018年5月18日
在 Mysql
0
Mysql(五)事物、 外键、 存储函数、 存储过程、 流程控制、 视图、 触发器
0
分享
1
浏览

字段类型

扩充:

复制表就是在原有表基础上,把原有的表的东西拿过来创建一个新的数据表

  • 语法:create table 表名 select * from 表名;
  • 作用:复制表的结构和表内容信息

复制前:

复制

复制后

第二种复制表

语法:create table 表名 like 表名;

作用:只复制表结构,不复制表信息

复制前

复制

复制后

数值型

整数

思考?—一个字节占多少位?—8位—–整形存储占8位—2*2*2*2*2*2*2*2=256

Tinyint的范围就是256个这里 -128—-127 刚好256个数

整形存储的范围和,存储的空间有关系

数值范围

无符号

Unsigned 只能存储正数,不能存储负数

注意:无符号没有负数,正数方向范围加倍

显示宽度&零填充

插入数据:

显示效果

注意:

  • 显示长度和零填充一块使用才有效果;
  • 当插入数据的长度大于显示长度的话

小数

浮点型

Float

单精度浮点型

这个float一般在数据类型中不使用,因为有误差;

  • 误差问题测试案例

误差的原因—-MySQL内部存储计算使用的都是double类型

Double

  • 无符号问题测试案例

Unsigned 无符号,也就是不能插入负数

  • 设置显示宽度

create table 表名

(

num double(m,d)

— m是可以显示的总字符长度,d显示的是可以显示几个小数字符

)charset=utf8;

  • 如果插入的数据的小数长度唱过了设置的d小数的显示长度1位,那么把超出的部分直接去掉

  • 果插入的数据的小数长度唱过了设置的d小数的显示长度1位以上,会四舍五入

  • 如果整数的显示长度超过了m – d(减号),那么会直接报错,范围超出的错误

零填充

Zerofill—当显示的长度不够设置的长度的时候在左侧补0占位显示;

创建表

注意:这里如果有zerofill零填充会把小数点算一个长度

  • 默认精度就是默认的显示长度

Float和double是没有默认精度的


但是有一个类型是有默认精度的就是decimal小数类型

定点型

Decimal比较准确,一般在存储关于钱的数据的时候都使用decimal

Decimal的默认精度是(10,0);

案例:

表结构创建

数据测试

总结

Float和double的比较

精度方面:float有误差,double存储没有误差,因为数据库存储计算的时候使用的就是double类型

Decimal和float的标准

四舍五入方面

Float;如果小数长度超过了设置长度的1位—直接舍去,如果超过了一位以上四舍五入

Decimal: 如果小数长度超过了设置的长度直接四舍五入

通常如果这个小数类型是用来存储钱的时候就用decimal

字符串型

  • 在utf8编码中一个字符占用3个字节
  • 在gbk编码中一个字符占用2个字节

Char

Char是一个定长的最多能存储255个字符

  • 插入时,字符串长度问题

  • 自动填充空格的问题

插入数据

插入7个长度的字符串

插入10个长度的字符串

查看结果

Varchar

Varchar:可变字符类型,这里如果插入的字符不够设置的长度,会自动回收多于的空间

存储时以字节存储,会受到字符编码的影响 最多存储65535个字节

create table num12

(

name varchar() — 这里规定的可以显示的字符长度 一个字符占3个字节

— 计算这里括号里最多可以设置多长 65535字节/3=2万多个字符

)charset=utf8

Utf8中一个字符占3个字节

Gbk中一个字符占2个字节

案例:

Char和varchar的比较

  • Char是定长,之规定存储多少字符,也是按照字符的个数来存储的,如果存储的字符少于规定的长度,多于的空间不能自动回收
  • Varchar 是变长(不够设置的长度的话会自动的回收多于的空间),以字节来存的,但是varchar(20)规定的是最多存储20个字符

什么时候使用char ,什么时候使用varchar

问题:手机号存用什么存?

用char(定长)来存,手机号是固定的长度,都是11位

问题:新闻标题用什么存?

新闻标题字符数不确定,用varchar来存

Char 会浪费空间,执行效率高

Varchar 节省空间,执行效率低

Set

在MySQL中是一个多选类型,存储的是字符串,用途是供用户来选择,用户插入的值只能从set选项里边来插入

扩展:set 在MySQL底层计算的时候是以整数来计算的

sex set(‘男’,’女’,’保密’)

这里第一个值是 男—-1—2的0次方

这里第二个值是 女—-2—2的1次方

这里第三个值是 保密—4—2的2次方

所以在插入数据的时候我们还可以以整数的形式进行插入

表结构

插入数据

Enum

单选,单选的值是以字符串来保存的,内计算的时候是以整形来计算,所以单选的执行效率比较高

表结构

插入数据

扩展enum也可以用数字来插入

enum中有三个值

第一个是 男—-1

第二个是 女—-2

第三个是 保密—-3

第一个值就是1,第二个值就是2,第三个值就是3,第四个值就是4;

注意:单选每次只能插入一个值

比较set和enum的区别和相同点

不同的地方

    • Set每次可以插入多个选项的值 Enum每次只能插入一个选项的值
    • Set用整数插入的时候 第一个选项的值2的0次方 第二个值是2的1次方… Enum用整数插入的时候,第一个选项的是是1,第二个选项的值是2,第三个选项的设置是3
    • Set 可以用整数的和代表几个选项,比如 3=2的零次方+2的一次方 = 男,女

相同的地方

  • Set和enum底层计算都是用整数来计算,插入的时候都可以使用整数来插入

时间型

这个类型不常用,一般存储时间的我们用int

这里datetime和timestamp类型比较相似,最大的区别就是取值范围不一样

时间类型插入的时间格式(注意插入的时候时间用引号引起来)

案例使用

表结构

插入数据时间格式1

插入的时间格式2

插入的时间格式3

字段属性

Not null /null

含义:限制字段值是否是null

Not null—-限制字段值不能为null

Null——字段值允许为 null

这里 空字符串 等于null 吗? 0等于 null吗? 不全等

Comment

一个字段的说明

Auto_increment &&Primary key

Auto_increment:自动增长,用于整形,每次默认自动加1

Primary key : 就是能唯一确定一行(记录)的字段,说白了就是一个‘身份证号‘

总结:主键字段一般和auto_increment 连用,自动增长,

设置过主键和自动增长的字段表属性里会多增加一个属性AUTO_INCREMENT

用来表示下一次插入记录的时候,主键的值;如果主键的值是null那么就会使用表属性里边自动增长的值

  • 表属性自动增长的值是表最大的主键值加1

  • 主键能重复吗

Unique key

含义:字段的值不能重复

测试:

一般unique key会自动的加一个默认值是 null

这个null的含义就是’没有值’,多以唯一键一般都会加一个not null字段属性

Default(一般不单独使用)

含义:如果添加数据的时候没有给值,会自动用设置的默认值填充;一般和not null 连用

create table test20

(

id int primary key auto_increment,

name char(8) unique key not null default ‘a’

) charset = utf8;

一般数据库表设计的时候,都会加上一个not null,

  • 第一执行效率比较快
  • Null的特殊性

优化第一天案例英雄表

设计表:

  • 一般字段类型的选择够用就行,不能过大(浪费空间)
  • 一个表一般都有主键这个主键一般都设置成自动增长
  • 字符串类型,看情况选择定长char(执行效率高)或是varchar(节省空间)
  • 表字段除了主键一般都会使用字段属性 not null 如果不设置,后期的数据处理比较麻烦(唯一键的时候,可以有多个记录是null的情况出现)

修改表结构

增加字段

语法:alter table 表名 add 字段名 类型 [字段属性] [after 字段名]||[first ]

扩展

  • 在某个字段后增加字段

  • 增加的字段在表的字段顺序第一个

修改字段属性

语法:alter table 表名 modify 字段名 新的类型 新的字段属性

修改字段名&属性

语法:alter table表名 change 老字段名 新的字段名 新类型 新字段属性;

删除字段

语法:alter table 表名 drop 字段名;

修改数据表引擎

表属性的修改

语法:alter table 表名 表属性=新属性

扩展:修改字符集

重命名表

语法: alter table 表名 rename [to] 新表名

重命名表移动到别的数据库

语法 : alter table 表名 rename [to] 数据库名.表名;

注意:移动数据表的时候同时还可以给表重新命名

思考题

  • 手机号码一般使用什么数据类型存储? Char
  • QQ号 varchar
  • 性别一般使用什么数据类型存储? Set 或enum
  • 年龄信息一般使用什么数据类型存储? Int 或者 tinyint
  • 照片信息一般使用什么数据类型存储? varchar
  • 薪水一般使用什么数据类型存储? Num Decimal
  • 学员姓名允许为空吗? Not null
  • 家庭地址允许为空吗? Not Null
  • 电子邮件信息允许为空吗? Null
  • 考试成绩允许为空吗? Not null
  • 在主键列输入的数值,允许为空吗? Not null
  • 一个表可以有多个主键吗? 不可以
  • 在一个学校数据库中,如果一个学校内允许重名的学员,但是一个班级内不允许学员重名,可以组合班级和姓名两个字段一起来作为主键吗? 可以
  • 标识列允许为字符数据类型吗? 标识列主键,主键任意类型列都要每行值都唯种,要求自增标识列能用数值型
  • 表中没有合适的列作为主键怎么办? 想加主键alter table table_name add constaint pk_tablename primary key (表主键列)
  • 如果标识列A的初始值为1,增量为1,则输入三行数据以后,再删除两行,下次再输入数据行的时候,标识值从多少开始?4

注意注释的使用

标签: 修改表结构复制表字段类型数据类型重命名表
上一篇文章

Mysql(三)联合查询、 运算符、 高级修改、 高级删除、 高级新增、 高级查询

下一篇文章

Mysql(一)关系型、 层次型、 数据库、 数据库引擎、 数据表、 网状型、 表属性

下一篇文章
Mysql(五)事物、 外键、 存储函数、 存储过程、 流程控制、 视图、 触发器

Mysql(一)关系型、 层次型、 数据库、 数据库引擎、 数据表、 网状型、 表属性

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3