10.4 创建表的完整语法

create table表名(

字段名1 类型[(宽度) 约束条件],

字段名2 类型[(宽度) 约束条件],

字段名3 类型[(宽度) 约束条件]);

#类型:使用限制字段必须以什么样的数据类型传值

#约束条件:约束条件是在类型之外添加一种额外的限制

注意:

1、在同一张表中,字段名不能重复 2、宽度和约束条件可选,字段名和类型是必须的 3、最后一个字段后不加逗号

10.5 基本数据类型

10.51 整型类型

1、作用:id号,各种号码,年龄,等级2、分类:tinyintint bigint

3、默认整型都是有符号的

#tinyint:小整数值(1字节) 范围(有符号):(-128,127) 范围(无符号):(0,255)create table t1(id tinyint);insert into t1 values(-10),(128),(-129); # id -10 127 -128​create table t2(id tinyintunsigned); # 无符号的insert into t2 values(-1),(256); # id 0 255​

#int:大整数值(4字节) 范围(有符号):(-2147483648,2147483647) 范围(无符号):(0,4294967295)create table t3(x intunsigned);insert into t3 values(4294967296); # x 4294967295​create table t4(x int(12) unsigned); #显示宽度12 #显示宽度,并非存储宽度insert into t4 values(4294967296123); # x 4294967295

4、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据

显示时,不够8位用0填充,如果超出8位则正常显示

create table t5(x int(8) unsigned zerofill);insert into t5 values(4294967296123); # x 4294967295

insert into t5 values(1); # x 00000001

10.52 修改sql_mode

# 查看sql_mode

mysql> show variables like "%sql_mode%";+----------------------------+---------------------+

| Variable_name | Value |

+----------------------------+---------------------+

| sql_mode NO_ENGINE_SUBSTITUTION |

+----------------------------+---------------------+

#修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错

mysql> set global sql_mode="strict_trans_tables";

10.53 浮点型

作用:存储身高、体重、薪资分类:float double decimal 相同点:对于三者来说,都能存放30位小数,不同点:1、精度的排序从低到高:float, double, decimal2、float与double类型能存放的整数位比decimal更多

create table t9(x float(255,30)); #255最大总数位 30最大小数位create table t10(x double(255,30));create table t11(x decimal(65,30)); #65最大总数位 30最大小数位

​insert into t9 values(1.111111111111111111111111111111);insert into t10 values(1.111111111111111111111111111111);insert into t11 values(1.111111111111111111111111111111);

mysql> select * fromt9;+----------------------------------+

| x |

+----------------------------------+

| 1.111111164093017600000000000000 |

+----------------------------------+

mysql> select * fromt10;+----------------------------------+

| x |

+----------------------------------+

| 1.111111111111111200000000000000 |

+----------------------------------+

mysql> select * fromt11;+----------------------------------+

| x |

+----------------------------------+

| 1.111111111111111111111111111111 |

+----------------------------------+

10.54 字符类型

作用:姓名,地址,描述类的信息

分类:char 定长varchar 变长

强调:字符的宽度限制单位是字符个数

create table t12(x char(4)); # 超出4个字符则报错,不够4个字符则用空格补全成4个字符create table t13(y varchar(4)); # 超出4个字符则报错,不够4个字符那么字符有几个就存几个

​insert into t12 values('hello'); #报错insert into t13 values('hello'); #报错

​insert into t12 values('a'); #'a'看不到空格,需要设置sql_modeinsert into t13 values('a'); #'a'​set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";# char_length(x)显示字段x对应的长度select char_length(x) from t12; #4

select char_length(y) from t13; #1

注意:

针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中,但会在读出结果时自动去掉末尾的空格,但两种情况不同:

mysql> select * from t14 where name="lxx"; # name字段明确地等于一个值,该值后填充空格是没有用

mysql> select * from t14 where name like "lxx__"; # name字段模糊匹配一个值,该值后填充空格是有用的

对比char与varchar:

name char(5)缺点:浪费空间优点:存取速度都快egon_ alex_ lxx__ wxx__ yx___

ame varchar(5)缺点: 存取速度都慢 优点: 节省空间 (1bytes+egon)(1bytes+alex)(1bytes+lxx)(1bytes+wxx)(1bytes+yx)

10.55 日期类型

作用:时间相关

分类:date:1999-01-27time: 11:11:11datetime:1999-01-27 11:11:11year:1999

create tablestudent(

idint,

namechar(16),

born_yearyear,

birth date,

class_time time,

reg_timedatetime);insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');

mysql> select * fromstudent;+------+------+-----------+------------+------------+---------------------+

| id | name | born_year | birth | class_time | reg_time |

+------+------+-----------+------------+------------+---------------------+

| 1 | egon | 2000 | 2000-01-27 | 08:30:00 | 2013-11-11 11:11:11 |

+------+------+-----------+------------+------------+---------------------+

10.56 枚举与集合类型

作用与分类:枚举enum:多选一个集合set:多选多(也可多选一)

create tableteacher(

idint,

namechar(16),

sex enum('male','female','others'),

hobbiesset('play','read','music','piao')

);insert into teacher values(1,'egon','male','play,piao');select * fromteacher;+------+------+------+-----------+

| id | name | sex | hobbies |

+------+------+------+-----------+

| 1 | egon | male | play,piao |

+------+------+------+-----------+

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐