创建表语法:
1)create table 表名(字段名 类型[(宽度)约束条件])
类型:使用限制字段必须以什么样的数据类型传值
约束条件:约束条件是在类型之外添加一些额外限制;
注意:
1.在同一张表中,字段名是不能相同
2.宽度和约束条件是可选,字段名和类型是必须的
3.最后一个字段后不加逗号
2)基本数据类型整型
1.作用:id号,各种号码,年龄,级别;
2.分类:tinyint,int,bigint;
3.测试:默认整型都是有符号的;
create table t1(x tinyint); -128,127 有符号
insert into t1 values(128),(-129);
create table t2(x tinyint unsigned); 0,255 无符号
insert into t2 values(-1),(256);
create table t3(x int unsigned);
insert into t3 values(4294967296);
create table t4(x int(12) unsigned);
insert into t4 values(4294967296123);
强调:
对于整型来说,数据类型后的宽度不是储存限制,而是显示宽度限制;所以在创建表中,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据;
显示时,不够8位用0填充,如果超出8位则正常显示;
create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);
insert into t5 values(1);
select * from t5;
3) 查看sql_mode
mysql> show variables like "%sql_mode%";
修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错;
set global sql_mode = "strict_trans_tables";
4)浮点型
1.作用:储存身高、体重、薪资
2.分类:float、double、decimal
3.测试:
相同点:
(1):对于三者来说,多能存放30位小数;
不同点:
(1):精度的排序从低到高:float,double,decimal
(2): float与double类型都存放的整数位比decimal更多
create table t6(x float(255,30));
create table t7(x double(255,30));
create table t8(x decimal(65,30));
insert into t6 values(1.111111111111111111111111111111);
insert into t7 values(1.111111111111111111111111111111);
insert into t8 values(1.111111111111111111111111111111);
mysql>select * from t6;
mysql>select * from t7;
mysql>select * from t8;
5)字符类型:
1.作用:姓名、地址、描述类的信息
2.分类: char 定长、varchar 变长
3.测试:字符的宽度限制单位是字符个数;
create table t9(x char(4));#超出4个字符会报错,不够4个字符则用空格补全;
create table t10(x varchar(4));#超过4个字符会报错,不够4个字符那么字符有几个就存几个;
insert into t9 values('hello');
insert into t10 values('hello');
insert into t9 values('a');
insert into t10 values('a');
set global sql_medo = "strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
select char_length(x) from t9;
select char_length(x) from t10;
注意:
针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中;
但会在读出结果时自动去掉末尾空格,因为末尾的空格在以下场景中是无用;
insert into t9 valuse('egon '),('alex'),('lxx');
mysql>select * from t9 where x='egon';
x字段明确地等于一个值,该值后填充空格是没有用的;
select * from t10 where x like 'lxx';
x字段模糊匹配一个值,该值后填充空格是有用的;
对比char 与 varchar
name char(5)
#缺点:浪费空间!
#优点:存取速度快!
egon alex lxx wxx yx ;
name varchar(5)
#缺点:存取速度都慢
#优点:节省空间
(1bytes+egon)(1bytes+alex)(1bytes+lxx)
注意:
如果在存取的值都一样的情况下char更省空间;
6)日期类型:
1.作用:时间关系
2.分类:date、time、datetime、year