赞
踩
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将数字设置为正数,没有负数,浮点数不建议使用。
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的主要区别是什么?
下节更精彩哦!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。