MySQL 数据类型以及约束条件

一,创建表的完整语法:

1#语法: 2create table 表名( 3字段名1 类型[(宽度) 约束条件], 4字段名2 类型[(宽度) 约束条件], 5字段名3 类型[(宽度) 约束条件] 6); 7 8#注意: 91. 在同一张表中,字段名不能相同 102. 宽度和约束条件可选,字段名和类型是必须的 113. 最后一个字段后不能加逗号! 12 13# 补充: 14# 1.宽度指的是对存储数据的限制 15create table userinfo(name char); 16insert into userinfo values('jason'); 17""" 181.没有安全模式的数据库版本,能够存放数据但是只会存进去一个j 192.最新数据库版本直接报错提示无法存储:Data too long for column 'name' at row 1 20""" 21 22# 2.约束条件初识>>> null 与 nut null 23create table t1(id int,name char not null); 24insert into t1 values(1,'j'); # 正常存储 25insert into t1 values(2,null); # 报错 26 27# 总结 类型与约束条件区别 28# 类型:限制字段必须以什么样的数据类型存储 29# 约束条件:约束条件是在类型之外添加一种额外的限制

二,基本数据类型

1,整型

1create table t1(x tinyint); 2insert into t1 values(128),(-129); #在严格模式下会报错。因为超过范围 3 4create table t2(x tinyint unsigned); #unsigned 取消符号 5insert into t2 values(-1),(256); #在严格模式下会报错,超过范围 6 7create table t3(x int unsigned); #在严格模式下会报错,超过范围 8insert into t3 values(4294967296);

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

严格模式介绍以及设置:

1show variables like "%mode%"; # 查看数据库配置中变量名包含mode的配置参数 2# 修改安全模式 3set session # 只在当前操作界面有效 4set global # 全局有效 5 6set global sql_mode ='STRICT_TRANS_TABLES' 7# 修改完之后退出当前客户端重新登陆即可

2,浮点型

1# 存储限制 2float(255,30) # 精确度最小 3double(255,30) #精确度中 4decimal(255,30) #精确度最大 5 6# 精确度验证 7create table t9(x float(255,30)); 8create table t10(x double(255,30)); 9create table t11(x decimal(65,30)); 10 11insert into t9 values(1.111111111111111111111111111111); 12insert into t10 values(1.111111111111111111111111111111); 13insert into t11 values(1.111111111111111111111111111111);

3,字符类型

char , varchar

1create table t10(name char(4)) # 超出四个字符报错,不够四个字符空格补全 2create table t11(name varchar(4)) # 超出四个字符报错,不够四个有几个就存几个 3 4# 验证存储限制 5insert into t12 values('hello'); 6insert into t13 values('hello'); 7# 验证存储长度 8insert into t12 values('a'); #'a ' 9insert into t13 values('a'); #'a' 10select * from t12 11select * from t13 # 无法查看真正的结果 12 13select char_length(name) from t12 14select char_length(name) from t13 # 仍然无法查看到真正的结果 15 16"""首先应该肯定的是在硬盘上存的绝对是真正的数据,但显示的时候mysql会自动将末尾的空格取掉""" 17# 如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式 18set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH"; 19# 退出客户端重新登陆 20select char_length(x) from t12; #4 21select char_length(y) from t13; #1 22 23# 针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中。但是会在读出结果的时候自动取掉末尾的空格 24 25 26""" 27char与varchar的使用区别 28""" 29name char(5) 30# 缺点:浪费空间 31# 优点:存取速度都快 32egon alex lxx jxx txx 33 34name varchar(5) 35# 缺点:存取速度慢 36# 优点:节省空间 371bytes+egon 1bytes+alex 1bytes+lxx 1bytes+jxx 1bytes+txx

4,时间类型

date , time ,datetime ,year

1create table student( 2 id int, 3 name char(16), 4 born_year year, 5 birth date, 6 study_time time, 7 reg_time datetime 8); 9insert into student values(1,'egon','2019','2019-05-09','11:11:00','2019-11-11 11:11:11');

5,枚举与集合类型

enum,set

1create table user( 2 id int, 3 name char(16), 4 gender enum('male','female','others') 5); 6insert into user values(1,'jason','xxx') # 报错 7insert into user values(2,'egon','female') # 正确! 8 9 10create table teacher( 11 id int, 12 name char(16), 13 gender enum('male','female','others'), 14 hobby set('read','sleep','sanna','dbj') 15); 16insert into teacher values(1,'egon','male','read,sleep,dbj') # 集合也可以只存一个

三,约束条件

1""" 2PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 3FOREIGN KEY (FK) 标识该字段为该表的外键 4NOT NULL 标识该字段不能为空 5UNIQUE KEY (UK) 标识该字段的值是唯一的 6AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) 7DEFAULT 为该字段设置默认值 8 9UNSIGNED 无符号 10ZEROFILL 使用0填充 11"""

补充:

1delete from tb1; 2强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为03所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录 4delete from tb1 where id > 10; 5 6如果要清空表,使用truncate tb1; 7作用:将整张表重置,id重新从0开始记录
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

sql注入

反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o

Oracle中如何查询一个表的所有字段名和数据类型

Oracle中如何查询一个表的所有字段名和数据类型查询语法selectA.COLUMN_NAME,A.DATA_TYPEfromuser_tab_columnsAwhereTABLE_NAME'表名'查询例子selectA.COLUMN_NAME,A.DATA_TYPEfromuser_tab_