4.数据类型
设计一张表时,要为表中每一个字段指定类型以确保该字段可以保存正确类型的数据
4.1 数值类型
(1)整数类型
TINYINT类型:微小整型,占1个字节,-128~127
SMALLINT类型:小整型,占2个字节
INT类型:占用4个字节,保存范围±21亿
BIGINT类型:占用8个字节
(2)浮点数类型
DOUBLE(M,N):M表示数字的总位数;N表示小数位的位数
如,DOUBLE(7,2) 可以保存一个7位数,其中2为是小数,整数5位
如果小数位的精度超过了允许精度时,会进行四舍五入
INSERT INTO person1(salary) VALUES(1234.867);
实际插入表中后,该记录salary字段的值位1234.87
如果四舍五入后得到的值超过了该字段可以保存的最大值时会报错
4.2 字符类型
(1)定长字符串
CHAR类型是定长字符串
CHAR(m):m是一个数字,表示长度,单位是字符。m最大可取255
CHAR类型在磁盘中开辟的长度是固定的。
优点:在磁盘中保存每条记录的长度是固定的,因此读取速度快
缺点:在磁盘中占用空间固定,无论实际保存数据多少,都要占够空间,因此对磁盘空间有浪费
(2)变长字符串
VARCHAR类型
VARCHAR(m):m是一个数字,表示字符串的长度
实际占用磁盘空间按照实际保存的数据而定
优点:由于磁盘空间占用取决于实际保存的数据,因此不造成磁盘空间浪费
缺点:由于数据长度不一致,会导致读取效率低
TEXT(m):m是一个数字,m最大值为65535
4.3 日期类型
DATE 用于保存年月日
TIME 用于保存时分秒
DATETIME 用于保存年月日时分秒
TIMESTAMP (时间戳),保存UTC时间,记录自1970年元旦至表示的时间所经过的毫秒
5.约束条件
可以限制对表的操作必须符合我们施加的约束条件,否则数据库会拒绝该操作
5.1 ****主键约束(****PrimaryKey)
(1)主键约束
主键约束要求该字段的值必须非空且唯一
主键约束一般会为表中第一个字段添加,并且通常该字段取名为**"id"**
(2)自增长
创建表时为主键字段添加自增
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT(3)
)
当主键字段具有自增时,插入数据则可以忽略主键字段,也可以显式地插入null值,此时仍然使用自增。
5.2 非空约束**(NOT NULL)**
被非空约束施加的字段,该字段的值不能为NULL
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
age INT
)
5.3 唯一性约束**(UNIQUE)**
具有唯一性约束的字段值不允许重复,但是可以为NULL
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) UNIQUE,
age INT
)
5.4 检查约束**(CHECK)**
检查约束允许我们自定义约束条件,仅当满足我们指定的条件才可以进行操作
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT CHECK(age>18 AND age<60) # 要求age字段的值>18且<60
);
5.5 外键约束
外键
如果一个键在一个关系中是主键,那么这个键被称为另一个关系的外键。以另一个关系的外键作为主键的表被称为主表,具有此外键的表被称为主表的从表。
外键约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、关联性。
语法
CONSTRAINT (约束名) FOREIGN KEY(外键字段)
REFERENCES 主表 (主键)
级联动作
RESTRICT**(**默认)
ON DELETE RESTRICT ON UPDATE RESTRICT
当主表删除记录时,如果从表中有相关联记录则不允许主表删除当主表更改主键字段值时,如果从表有相关记录则不允许更改
CASCADE 数据级联更新
ON DELETE CASCADE ON UPDATE CASCADE
当主表删除记录或更改被参照字段的值时,从表会级联更新
SET NULL
ON DELETE SET NULL ON UPDATE SET NULL
当主表删除记录时,从表外键字段值变为null
当主表更改主键字段值时,从表外键字段值变为null