我们今天来进行建表的基本操作:

首先要建表就要了解列类型,因为建表就是声明列的过程,列声明完成了,表也就建好了。

mysql中列分为三大类:

一、数值型

数值型又分为整型和浮点型两种。

先来看整型:

tinyint:占据空间:1个字节;存储范围:带符号数:-2^7(-128)~2^7-1(127),无符号数:0~255

smallint:占据空间:2个字节;存储范围:带符号数:-2^15(-32768)~2^15-1(32767),无符号数:0~65535

mediumint:占据空间:3个字节;存储范围:带符号数:-2^23(-8388608)~2^23-1(8388607),无符号数:0~16777215

int:占据空间:4个字节;存储范围:带符号数:-2^31(-2147483648)~2^31-1(2147483647),无符号数:0~4294967295

bigint:占据空间8个字节;存储范围:带符号数:-2^63(-9,223,372,036,854,775,808)~2^63-1(9,223,372,036,854,775,807),无符号数:0~18446744073709551615

int 系列声明时的参数:

unsigned:无符号,在MySQL中声明int类参数为无符号数,如果不声明unsigned,则默认为带符号数。

(M)zerofill M只有和zerofill配合在一起使用才有效果,即指定数据的长度,不够的话用0填充

例如 我们声明一个 id int(5)zerofill 一个id2 int(5):

我们给里面插入同样的数据:

我们可以看到,同样是500,id就在前面补两个0,因为我们指定了它的数据长度是5。

那如果我们插入的数据长度超过了5怎么办?

我们可以看到如果我们插入的数据长度超过了我们设定的M值,那么就按实际长度来插入。

然后我们来看浮点型:

M叫做精度,代表这个小数的总位数,D叫做标度,代表小数点后面的位数。

float(M,D)单精度浮点型,占据空间:4个字节。

double float(M,D) 双精度浮点型,占据空间:8个字节。

浮点型在存储的时候存的是近似值,还有一种小数类型是定点型,它是把整数部分和小数部分分开存储的 。

定点型:

decimal(M,D)

我们来看具体的区别:我们声明一个num float(9,2)和一个num2 decimal(9,2):

然后给num插入1234567.23,给num2插入1234567.25,然后我们来看一下结果:

我们发现,num栏下面的数字变成了1234567.25。原因就是上面说的float类型存储时是存的近似值。

所以如果涉及到金融,账户等等对数字变化比较敏感的时候需要存小数我们就用decimal。

二、字符串型

Char(M) 是定长类型个字符,内容不够6个字符的在尾部用空格补齐,取出时再把右侧所有的空格删除。

Varchar(M) 是变长类型 例如varchar(20),可存储0~20个字符长度,但是列内容前有1~2个字节来标志该列内容长度。

我们声明两个变量,分别是name name2,一个用char,一个用varchar

插入数据,张三后面有个空格,李四后面也有个空格

直接查看的话看不出来大的差别,我们把它和另一个字符连接起来:

我们可以看到张三后面的空格被删除了。

Text 文本类型,一般用来储存文章内容,新闻内容等。声明text列类型时不用给默认值。

Blob 二进制类型,一般用来存储图像音频等二进制信息。Blob在于防止字符集的问题导致信息丢失。比如:一张图片中有0xff字节,这个在ASCII字符集中认为非法,在入库的时候被过滤。使用blob就可以防止信息丢失。

三、日期时间型

Date 日期 存储年-月-日 存储范围是1000-01-01~9999-12-31

Time 时间 存储时:分:秒 存储范围是-838:59:59~838:59:59

Datetime 日期时间类型年-月-日 时:分:秒 范围是1000-01-01 00:00:00~9999-12-31 23:59:59

Year 年类型 YYYY和YY(不推荐)范围是1901~2155 还能存一个特殊的0000年

建表的语法不重要,重要的是要学会合理的选择列类型并为其声明参数。

建表的语法:

Create table 表名 (

列1 列类型 列参数,

列2 列类型 列参数,

......

列n 列类型 列参数

)engine myisam charset utf8;

最后一句是声明引擎和字符集的,那个我们会在后面讲到。

如果一张表建好了,我们需要增加列怎么办?

alter table 表名 add 列名 列类型 列参数

我们就给上面的test2表增加一列:

由于之前没有salary列,因此增加后原来的行在salary列的值为空。

这是默认增加在最后一列的,我们想在birth后面增加一列怎么办?

alter table 表名 add 列名 列类型 列参数 after birth;

我们想在把列增加最前面,该怎么办?

alter table 表名 add 列名 列类型 列参数 first;

删除列:

alter table 表名 drop 列名;

修改列类型:

alter table 表名 modify 列名 新列类型 列参数;

我们看到这张表的结构:star是varchar(20)。

我们给它改成varchar(30):

修改列名:

alter table 表名 change 旧列名 新列名 列类型 列参数;

mysql学习之基础篇03的更多相关文章

  1. mysql学习之基础篇01

    大概在一周前看了燕十八老师讲解的mysql数据库视频,也跟着学了一周,我就想把我这一周所学的知识跟大家分享一下:因为是第一次写博客,所以可能会写的很烂,请大家多多包涵.文章中有不对的地方还请大家指出来 ...

  2. mysql学习之基础篇08 UTF8编码

    这次我们来说一下在Mysql中的编码问题: 我们知道应用于计算机的最早的字符集是ASCII,它所组成的编码是ASCII编码:由于对于其他国家来说它所容纳的字符个数比较少,后来就出现了ANSI字符集,它 ...

  3. mysql学习之基础篇05

    mysql中的统计函数: 1. 查询商品价格中最高的价格: select max(shop_price) from goods; 2. 查询商品价格中最低的价格: select min(shop_pr ...

  4. mysql学习之基础篇04

    五种基本子句查询 查询是mysql中最重要的一环,我们今天就来说一下select的五种子句中的where条件查询: 首先我们先建立一张商品表:goods 由于商品数目太多,我就不一一列举了. 在这里我 ...

  5. MySQL学习之基础篇09-事务

    我们在建表的时候通常会在最后声明引擎类型,这次我们就来看看存储引擎都有哪些: 举个例子: --------------------------- 银行转账: 张三想给李四转500元钱: 张三-500 ...

  6. mysql学习之基础篇07

    视图:view 在查询的时候我们经常把查询到的结果当成一张临时表来看,其实view就可以看成一张虚拟表,是表通过某种运算得到的投影 那么如何创建视图?创建视图需要指定视图的列名和列类型吗? 答:不用, ...

  7. mysql学习之基础篇06

    子查询:又分为where型子查询,from型子查询,exists型子查询这三类. where型子查询:指把内层查询的结果作为外层查询的比较条件: 举个例子: 我们想查出goods_id最大的商品,要求 ...

  8. mysql学习之基础篇02

    我们来说一下表的增删改查的基本语法: 首先建立一个简单的薪资表: create table salary(id int primary key auto_increment,sname varchar ...

  9. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

随机推荐

  1. mysql Last_SQL_Errno: 1197 Coordinator stopped because there were error(s) in the worker(s)问题处理

    Last_SQL_Errno: 1197 Coordinator stopped because there were error(s) in the worker(s). The most rece ...

  2. 企业微信域名IP列表

    https://res.mail.qq.com/zh_CN/wework_ip/latest.html?st=C98F886B96A94AD2207D9F0B2970B93DFD5A76DF94CED ...

  3. 通过SOCKS代理渗透整个内网

    https://blog.csdn.net/SouthWind0/article/details/83111044 通过SOCKS代理渗透整个内网 1.背景 经过前期的渗透工作,我们现在已经成功找到了 ...

  4. windows下用navicat远程链接虚拟机Linux下MySQL数据库(转)

    原文地址:https://www.cnblogs.com/blogforly/p/5997553.html 今天想用navicat远程连接虚拟机中的MySQL数据库,一直连不上,在网上搜索了一下,发现 ...

  5. 二进制和ASCII文件的区别

    二进制和ASCII文件的区别 觉得有用的话,欢迎一起讨论相互学习~Follow Me 版权声明:本文为CSDN博主「迂者-贺利坚」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出 ...

  6. [LeetCode] 369. Plus One Linked List 链表加一运算

    Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...

  7. 【Linux】多线程入门详解

    背景知识: 1.每次进程切换,都存在资源的保持和恢复动作,即上下文切换 2.进程的引入虽然可以解决多用户的问题,但是进程频繁切换的开销会严重影响系统性能 3.同一个进程内部有多个线程,这些线程共享的是 ...

  8. DS 壹之型 头指针与头结点

    之前结合网上博客整理的笔记,希望能帮你解除疑惑!    

  9. Mysql中HAVING的相关使用方法

    having字句可以让我们筛选分组之后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前. 而having子句在聚合后对组记录进行筛选.我的理解就是真实表 ...

  10. 使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)

    原文:使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死) 在微软的官方文档中,说 SetParent 可以在进程内设置,也可以跨进程设置.当使用跨进程设置窗口的父子关系时,你需要注意 ...