int类型修饰符

unsigned 无符号整数,修饰符: 规定字段只能保存正的数据。它可以增大这个字段的正数支持的范围。

zerofill 修饰符: 规定0(不是空格 ) 填补输出的值。 使用这个值可以防止 mysql存储负值。

注意:
int(M) 在 integer 数据类型中,M 表示最大显示宽度。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。其实,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。

如int的值为10
int(10)显示结果为0000000010
int(3)显示结果为010

浮点型数据类型
float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
MySQL浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)表示总长度是7位,小数点后面的长度是4,可显示为999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
float:单精度浮点型,占字节数为4,用32位二进制描述,有符号是7个有效位,无符号是8个有效位

double:双精度浮点型,占字节数为8,用64位二进制描述,有符号是15个有效位,无符号是16个有效位

decimal:数字型,用128位二进制描述,不存在精度损失,常用于银行帐目计算。(28个有效位)

解释:单精度和双精度
精度是指计算机表达小数近似值的一种方式,单精度32位二进制,4个字节;双精度64位二进制,8个字节。

float数值类型

例如:float(3,1) :表示此字段有效位数为3位,小数点后面1位数字。

小数点后超过1位,mysql自动给四舍五入。

mysql> select * from kdata6;

mySQL 小数怎么后面都是0 不显示 mysql 小数点补0_mySQL 小数怎么后面都是0 不显示

发现整数+小数一共只能有3位,整数2位,小数1位,小数点后超过1位自动四舍五入。

存储精确的小数: double和decimal数值类型
decimal、double要比float存储小数更精确。

单精度类型float和双精度类型double在计算机中存储的时候,由于计算机只能存储二进制,所以浮点型数据在存储的时候,必须转化成二进制。我们知道对于float类型的数据,只分配了32位的存储空间,对于double类型值分配了64位,但是并不是所有的小数都能转成32位或者64位的二进制形式,如果超过了,就会出现截断,这就是误差的来源。

针对float情况,至少我们可以得出结论:

  1. 如果一个float型数据转成二进制后的第32位之后都是0,那么数据是准的
  2. 如果一个float型数据转成二进制后的第32位之后不全为0,则数据就会存在误差

字符串类型
char 和 varchar
char
char :后面括号中必须有数值,来确认字符串的范围。 大小范围 :0-255.
char(10) ; 指定了一个长度为10的字符值。
旧版本小于长度,空格自动补齐,大于长度 ,自动截短。
新版本超过长度自动报错。
binary 修饰符: 区分字符大小写
varchar : 字符串可变长
在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字节。
char和varchar区别
CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。
VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间。
VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。
varchar存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。
从空间上考虑,用varchar合适;从效率上考虑,用char合适。

字符串使用总结
1、VARCHAR型字段比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要.
2、虽然VARCHAR使用起来较为灵活,但是从整个系统的性能角度来说,CHAR数据类型的处理速度更快,有时甚至可以超出VARCHAR处理速度的50%。
所以在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡。

日期和时间类型

date 日期

time时间

Year
year : 00-69自动转为: 2000-2069 , 70-99自动转为1970-1999

datatime 或 timestamp
datetime类型能保存的最大范围的值为1001年到9999年,精度为秒,它把日期和时间封装到格式为YYYY-MM-DD HH:MM:SS的整数中,与时区无关,使用8个字节的存储空间。
timestamp类型保存了从1970年1月1日(格林尼治时间)以来的秒数,它和linux的时间戳相同,只是用了4个字节的存储空间,因此它的范围比datetime的范围小了很多,只能表示从1970年到2038年,我们可以使用它提高空间利用率。
复合类型
它们字段的值,必须从预先定义好的字符串集合中选取。

ENUM(枚举):只能取一个,用于互斥。男人,女人。
set : 能取多个。
枚举
Set
注意:set 类型: 最大包含64类项。在set中,相同的元素不能同时存在。

Msyql语句进阶

Mysql基础命令语句

修改数据表

添加字段:

alter table 表名 add 字段名 列类型 [not null|null][primary key][unique][auto_increment][default value]

alter table 表名 add 字段定义 after ar_id;

解释:
not null | null:非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。Null表示该列可以为空,用户在插入数据时如果没有指定值,该列用NULL填充。

default默认值:mysql默认值约束用来指定某列的默认值。如果某列设置了default默认值约束,用户在插入数据时如果没有指定值,则用默认值填充。
unique:唯一性约束,如果某列设置了unique唯一性约束,则该列的值是不能重复的。

auto_increment:设置数值型的列自动增长。AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。所谓自动增长字段,是指它们的值是系统指定,不需要插入。值从1开始,每增加一条记录,这个值就加1。
primary key:主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。通过它可以强制表的实体完整性(即表中没有重复的行)。

主键应该遵守下面的规则:

1.每个表只能定义一个主键。

2.主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。

删除字段:
alter table 表名 drop 字段名

修改字段:
alter table 表名 modify 字段名 字段新类型

完整修改字段:
alter table 表名 change 旧字段名称 新字段定义

修改表名称
alter table 表名 rename 新名字

删除表
drop table [if (not) exists] 表名;

表中行的操作
insert
insert [into] 数据表名称 [(字段列表)] values|value (表达式|null|default,…),(表达式|null|default,…)
insert [into] 数据表名称 set 字段名称=值,…
insert与insert…set的区别是后者可以带有子查询。
update – 单表
update 表名 set 字段名称=值,… [where 条件]
如果省略WHERE条件将更新全部记录。
删除记录 – 单表
delete from 数据表名称 [where 条件]
如果省略where条件,将删除全部记录

常用SELECT命令

使用select命令查看mysql数据库系统信息:

– 打印当前的日期和时间
select now();

– 打印当前的日期
select curdate();

– 打印当前的时间
select curtime();

– 打印当前数据库
select database();

– 打印MySQL版本
select version();

– 打印当前用户
select user();