当前位置:   article > 正文

MySQL基本语法二_unsigned zerofill 和 default '0

unsigned zerofill 和 default '0

1.默认值与注释

default:当字段设定了默认值,插入数据时该字段可以不给值,系统会自动添加默认值

comment:注释可以帮助开发人员准确掌握字段的含义

drop table if exists tb1;
create table tb1(
   id int,
     name varchar(20) default '无' comment '学生姓名',
     age tinyint unsigned default 0 comment '学生年龄'
);
insert into tb1(id,name) values(1,'羽毛');
insert into tb1(id,age) values(2,24);
select * from tb1;

2.查看注释:

 show create table tb1;

 3.unsigned无符号整数:

MySQL中的数字类型都是有符号的,可以表示正数,也可表示负数,可以通过unsigned将数字设置为正数,没有负数,浮点数不建议使用。

  create table  tb2 (
a int unsigned
) ;

 4.int(n)和zerofill设置数字显示格式用0填充

参数n只控制显示宽度,不限制整数的取值范围

create table tb2(
  a int(6)
);
insert into tb2 value(111111111);
select * from tb2;

zerofill自动用0填充不够位数

drop table if exists tb2;
create table tb2(
  a int(6) zerofill
);
insert into tb2 value(1);
insert into tb2 value(1111);
insert into tb2 value(111111);
insert into tb2 value(11111111);
select * from tb2;

5.double(m,n), m指的是整数位和小数位的总宽度,n指的是小数位的宽度。

drop table if exists tb2;
create table tb2(
  a double(5,2)
);
insert into tb2 value(333.22);
insert into tb2 value(111.33333);
insert into tb2 value(11.8888);
insert into tb2 value(11.22);
select * from tb2;

 

 insert into tb2 value(1111.22);

 由上边的测试可以看出,当整数位超出宽度会报错,小数部分超出宽度时会进行四舍五入。

此时的m,n只代表宽度,不代表double本来的存储字节量。

6.decimal(m,n):decimal是定点数,小数位的位数是通过n参数指定,位数是固定的长度,超出指定长度会四舍五入,不足的补0.

double运算时会产生不精确的结果,而decimal可以更精确。

二者运算结果比较:

drop table if exists tb2;
create table tb2(
  a double(26,16)
);
insert into tb2 value(116.32);
insert into tb2 value(0.11);

select sum(a) from tb2;

 

drop table if exists tb2;
create table tb2(
  a decimal(26,16)
);
insert into tb2 value(116.32);
insert into tb2 value(0.11);

select sum(a) from tb2;

由此可知,decimal得到了更加精确地结果。

 7.MySQL常用的三个字符串类型:

char(m),varchar(m),text

①char和varchar的区别:

char是定长字符串,最长不能超过255个字符,m表示字符串的长度。超过给定长度就会报错,也可能被截断,不足给定长度会在后边添加空格。

varchar是变长字符串,最多65535个字符,m代表字符串的最大长度。

当超过给定字符长度会报错或者被截断,当不足给定长度时,会按照字符串的长度来存储。

②严格模式与非严格模式通过sql_mode来设置:STRICT_TRANS_TABLES就是严格模式,去除就是非严格模式。

查看sql_mode参数:

show variables like '%sql_mode%';

 严格模式:

set session sql_mode ='STRICT_TRAND_TABLES,NO_ENGINE_SUBSTITUTION';
drop table if exists tb2;
create table tb2(
  a varchar(6)
);
insert into tb2 value('dddddd');

select * from tb2;

 非严格模式:

set session sql_mode ='NO_ENGINE_SUBSTITUTION';
drop table if exists tb2;
create table tb2(
  a varchar(6)
);
insert into tb2 value('dddddd');

select * from tb2;

 ③text和varchar的区别:

text用来存储长文本数据,最长可存储65535个字符,当存储的字节长度<768时,数据直接存储在表中,但当大于等于768时,小于的部分存在表中,溢出的部分会单独存储。

为啥是768呢?

utf8常用字符都在3个字节以内(一些特殊符号使用四个字节),768/2=256,如果使用utf8字符集,256个字符内存储在表中,大于等于256个字符溢出存储在表外。

text和varchar的主要区别是什么?

下节更精彩哦!!!

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/838125
推荐阅读
相关标签
  

闽ICP备14008679号