数据类型:

数值型:

(1)整数

分类:
tinyint(1byte -128 127  有符号 255)、smallint(2byte -32768 32767 无符号 65535)、mediumint(3b)、int/integer(4b)、bigint(8b)
1	 2		3	4		8

特点:
① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号(unsigned),需要添加unsigned关键字
② 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
③ 如果不设置长度,会有默认的长度
长度代表了显示结果中的最大宽度,如果不够会用0在左边填充,
但必须搭配zerofill使用才会有效 搭配了zerofill就 默认就不支持负数!

(2)小数

        1、定点型

所占字节
float(M,D)     4
double(M,D)    8

2、浮点型

所占字节
dec(M,D)     m+2
decimal(M,D)  m+2

注意M,D的意思

字符型:

较短的文本:

(固定)char(M)  最长字符数 M 255
(可变)varchar(M) 最长字符数 M 65535

其他:

binary和varbinary用于保存较短的二进制
enum用于保存枚举  不区分大小写
set用于保存集合 不区分大小写


较长的文本:
text
blob(较大的二进制:例如图片)

varchar 与 char 的区别

写法			M的意思							特点			空间的耗费	效率
char	char(M)		最大的字符数,可以省略,默认为1		固定长度的字符 比较耗费  	高

varchar varchar(M)	最大的字符数,不可以省略		    可变长度的字符 比较节省	     低

日期型:

分类:
date只保存日期 4
time 只保存时间 3
year只保存年1

datetime保存日期+时间
timestamp保存日期+时间

特点 区别:

特点:

			字节		范围							时区等的影响
datetime	8		1000——9999	                  不受
timestamp	4	     1970-2038	                    受

*/

小cese:显示当前时区 与 设置时区

SHOW VARIABLES LIKE 'time_zone';

SET time_zone='+9:00';

约束

1、含义:限制表中的数据 为了保证表中的数据的准确型 和可靠性

2、分类

分类:六大约束
	1(非空约束)、NOT NULL:非空,用于保证该字段的值不能为空
	比如姓名、学号等
	2(默认约束)、DEFAULT:默认,用于保证该字段有默认值
	比如性别
	3(主键约束)、PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
	比如学号、员工编号等
	4(唯一约束)、UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
	比如座位号
	5、CHECK(检查约束 对于mysql数据库管理系统 不适用):检查约束【mysql中不支持】
	比如年龄、性别
	6、FOREIGN KEY(外键约束):外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
	在从表添加外键约束,用于引用主表中某列的值
	比如学生表的专业编号,员工表的部门编号,员工表的工种编号

添加约束的时机:1、创建表 2、修改表

约束的添加分类:

列级约束:创建表的时候 将约束写在字段后面
		六大约束语法上都支持,但外键约束没有效果
		x
	表级约束:自己单蹦的写 前面有个逗号
		除了非空、默认,其他的都支持

两种的比较:
位置			              支持的约束类型					是否可以起约束名
列级约束: 列的后面	    语法都支持 外键没效果			        不可以
表级约束: 所有列的后面		默认 非空不支持 其他支持		     可以(对主键来说 起了也没效果)

注意:主键与唯一的比较

主键和唯一的大对比:
	uq 能为null  但是插入数据时依次插入两个null么??duplicate 包重复错误 因此 不能

     保证唯一性    是否允许为空     一个表中可以有多少个  是否允许组合(两个列组成一个主键/唯一)
主键		√			×		    	至多有1个               √,但不推荐
唯一		√			√		    	可以有多个              √,但不推荐

注意:外键的特点

1、要求在从表设置外键关系
	2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
	3、主表的关联列必须是一个key(一般是主键(最常用)或唯一键)
	4、插入数据时,先插入主表,再插入从表
		删除数据时,先删除从表,再删除主表


外键 foreign key references	 引用表(引用字段)在列级约束来也不支持外键  表级约束 可以使用

添加表级约束
    语法:在各个字段的最下面
   【constraint 约束名】 约束类型(字段名)

标识列:又名自增长列 关键词 AUTO_INCREMENT

含义:可以不用手动的插入值 系统提供默认的序列值

特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key
2、一个表可以有几个标识列?至多一个!only one
3、标识列的类型只能是数值型 非法会报Incorrect错误 
4、标识列可以通过 SET auto_increment_increment=3;设置步长
可以通过 手动插入值,设置起始值