数据类型:
数值型:
(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;设置步长
可以通过 手动插入值,设置起始值