DDL-常见的数据类型

分为三大类
数值型:
  整形
  小数:
    定点数
    浮点数(浮点型)
字符型:
    较短的文本:char varchar
    较长的文本:text blob(较长的二进制数据:图片)
日期型:

1.整形

特点:

①列名后的类型默认是有符号的,无符号需要追加 unsigned(安set)
②插入的数值超出 报异常 1264 - Out of range value for column
③不设置长度会有默认的长度
  长度是显示结果中的最大宽度,不够宽度在左边用0填充,
  但是,没有关键字 zerofill 就不会显示出0,默认宽度无效显示不出来0。
  如果,有关键字 zerofill 类型默认的就会变成无符号,不支持负数 unsigned 就没有意义了。

④长度规定不了范围,范围是由类型决定的。长度决定的是显示结果的样子

#1.设置有符号、无符号
CREATE TABLE tab_int(
t1 INT ZEROFILL,
t2 INT ZEROFILL
);

#查看表的结构
DESC tab_int;

#插入数据
#添加值的时候可以省略字段名,值的顺序和列的顺序一一对应
INSERT INTO tab_int
VALUES(-132);
INSERT INTO tab_int
VALUES(-13256,-123);
INSERT INTO tab_int
VALUES(123,123);

#删除表
DROP TABLE IF EXISTS tab_int;

SELECT *
FROM tab_int

2.小数

浮点型  字节
float(M,D)  4
double(M,D)  8

       
   
 
精度高无限接近真实的值

定点型 字节 范围
dec(M,D) M+2  最大取值和double相同,精度比double要精确

          
      

  decimal可以简写为dec

特点:

  ①M和D。M小数位数+整数位数的=总位数,D是小数的位数

  ②M和D可以省略

    decimal  M默认值:10  D的默认值:0。超过了就会报错

    float和double,会根据插入的数值的精度来决定精度

  ③定点型的精度较高,如果要求插入的精度较高(货币运算...)优先考虑
  ④其他的用float和double,为了节省空间float够用就用float

原则:

所选的类型越简单越好,能保存数值的类型越小越好

#创建表
CREATE TABLE tab_float(
f1 FLOAT(5,2),
f2 DOUBLE(5,2),
f3 DECIMAL(5,2)
);

#测试表
INSERT INTO tab_float
VALUES(123.4523,123.4523,123.4523);

#查询
SELECT * FROM tab_float
#每列下面各一个123.45
DESC tab_float;

#测试表
INSERT INTO tab_float
VALUES(123.456,123.456,123.456);

#查询
SELECT * FROM tab_float
#每列下面各一个123.46,结果四舍五入
#> Affected rows: 1出现一个警告

#测试表
INSERT INTO tab_float
VALUES(1523.4,1523.4,1523.4);
#报错> 1264 - Out of range value 超出数值范围

#删除表
DROP TABLE tab_float;

#创建表
CREATE TABLE tab_float(
f1 FLOAT,
f2 DOUBLE,
f3 DECIMAL
);
#测试表
INSERT INTO tab_float
VALUES(123.4523,123.4523,123.4523);
#> Affected rows: 1一列出错

#查询
SELECT * FROM tab_float
#查看表的结构
DESC tab_float;

3.字符型(串数据:文本型、二进制)

 

较短的文本  最多字符数 特点 空间耗费  效率
char(M)  固定长度的字符 比较耗费
varchar(M)  可变长度的字符 比较节省

          

              


              


①字符数:一个a也是一个字符,一个汉字也是一个字符

②char的M可以省略,默认:1。固定长度的字符:类型后的固定长度,用不用都开那么多空间
varchar的M不能省略。可变长度的字符:按数据长度,开空间

③固定长度例如:
男,女存储用char
存储姓名用varchar

较长的文本
text

较短的二进制数

binary
varbinary

较长的二进制
blob

放入一个有值的列表,插入的数据只能为其中一个

enum用于保存枚举(一次只能选一个成员)

 set用于保存集合(一次能选多个成员)

#enum枚举(男女,季节)
CREATE TABLE tab_char(
c1 ENUM('a','b','c')
)

#插入数据
INSERT INTO tab_char 
VALUES('a');
INSERT INTO tab_char 
VALUES('b');
INSERT INTO tab_char 
VALUES('c');
INSERT INTO tab_char 
VALUES('M');
INSERT INTO tab_char 
VALUES('A');

#清空表中的数据
TRUNCATE TABLE tab_char

#
SELECT *
FROM tab_char

#set集合()
CREATE TABLE tab_set(
s1 SET('a','b','c','d')
)

#插入数据
INSERT INTO tab_set 
VALUES('a');
INSERT INTO tab_set 
VALUES('a,b');
INSERT INTO tab_set 
VALUES('a,c,d');
#MySQL不区分大小写

4.日期型

要求:字符和日期型要加单引号,数值型不用加

单一存储 最小值 最大值 字节
date只能保存:年-月-日 1000-01-01 9999-12-31 4
time只能保存:时间 -838:59:59 838:59:59 3
year只能保存:年份 1901 2155 1

 

既有日期又有时间 最小值 最大值 字节
datetime:年-月-日 时间 1000-01-01 00:00:00 9999-12-31 23:59:59 8
timestamp:年月日时间 19700101080001 2038年的某个时刻 4

timestamp时间戳

特点
①datetime:不受时区影响,如果直插入年,默认提供时间
只能反映出插入时,当时的时区

②timestamp:受时区影响
更加接近当前时区的时间
受到当地的:实际时区、MySQL版本、SQLMode(语法模式)的影响

#创建表
CREATE TABLE tab_date(
t1 datetime,
t2 TIMESTAMP
)
#插入数据
INSERT INTO tab_date
VALUES(now(),now());
#查看
SELECT *
FROM tab_date

#查看时区
SHOW VARIABLES LIKE 'time_zone';

#设置时区
SET time_zone='+8:00';

  

原文地址:https://www.cnblogs.com/rijiyuelei/p/12380547.html