3. MySQL - 数据类型 & 选项约束
发布人:shili8
发布时间:2024-11-14 15:11
阅读次数:0
**MySQL数据类型与选项约束**
在MySQL中,数据类型是指用于存储和表示数据的基本单位。每种数据类型都有其特定的长度、范围和精度等属性。选项约束则是指对数据类型进行限制或设置的一些额外规则。
**1. 数值类型**
数值类型包括整型、浮点型和定点型。
### (1) 整型整型用于存储整数值,支持的范围从-2^31到2^31-1。
sqlCREATE TABLE test ( id INT, age INT);
在上述示例中,`id`和`age`都是整型类型。
### (2) 浮点型浮点型用于存储小数值,支持的范围从-3.4E38到3.4E38。
sqlCREATE TABLE test ( price DECIMAL(10,2), score FLOAT);
在上述示例中,`price`是定点型类型,而`score`是浮点型类型。
### (3) 定点型定点型用于存储小数值,支持的范围从-1.0E+38到1.0E+38。
sqlCREATE TABLE test ( price DECIMAL(10,2), score DECIMAL(5,2) );
在上述示例中,`price`和`score`都是定点型类型。
**2. 字符串类型**
字符串类型用于存储文本数据,包括字符集、长度等属性。
### (1) CHARCHAR是固定长度的字符串类型,支持的长度从0到255。
sqlCREATE TABLE test ( name CHAR(10), address CHAR(50) );
在上述示例中,`name`和`address`都是CHAR类型。
### (2) VARCHARVARCHAR是可变长度的字符串类型,支持的长度从1到65535。
sqlCREATE TABLE test ( name VARCHAR(20), address VARCHAR(100) );
在上述示例中,`name`和`address`都是VARCHAR类型。
**3. 日期时间类型**
日期时间类型用于存储日期、时间或两者的组合。
### (1) DATEDATE是用于存储日期的类型,支持的范围从'1000-01-01'到'9999-12-31'。
sqlCREATE TABLE test ( birthday DATE, hire_date DATE);
在上述示例中,`birthday`和`hire_date`都是DATE类型。
### (2) TIMETIME是用于存储时间的类型,支持的范围从'-838:59:59'到'838:59:59'。
sqlCREATE TABLE test ( start_time TIME, end_time TIME);
在上述示例中,`start_time`和`end_time`都是TIME类型。
### (3) DATETIMEDATETIME是用于存储日期和时间的类型,支持的范围从'1000-01-0100:00:00'到'9999-12-3123:59:59'。
sqlCREATE TABLE test ( creation_time DATETIME, update_time DATETIME);
在上述示例中,`creation_time`和`update_time`都是DATETIME类型。
### (4) TIMESTAMPTIMESTAMP是用于存储日期和时间的类型,支持的范围从'1970-01-0100:00:00'到'2038-01-1903:14:07'。
sqlCREATE TABLE test ( creation_time TIMESTAMP, update_time TIMESTAMP);
在上述示例中,`creation_time`和`update_time`都是TIMESTAMP类型。
**4. 枚举类型**
枚举类型用于存储一个值从一组预定义的值中选择。
sqlCREATE TABLE test ( sex ENUM('male', 'female'), status ENUM('active', 'inactive') );
在上述示例中,`sex`和`status`都是枚举类型。
**5. 位图类型**
位图类型用于存储一个或多个整数值的集合。
sqlCREATE TABLE test ( flags INT(11) UNSIGNED, flag1 INT(11) UNSIGNED, flag2 INT(11) UNSIGNED);
在上述示例中,`flags`、`flag1`和`flag2`都是位图类型。
**选项约束**
选项约束用于对数据类型进行限制或设置的一些额外规则。
### (1) NOT NULLNOT NULL用于指定一个字段不能为NULL。
sqlCREATE TABLE test ( name VARCHAR(20) NOT NULL, address VARCHAR(100) );
在上述示例中,`name`不能为NULL,而`address`可以为NULL。
### (2) DEFAULTDEFAULT用于指定一个字段的默认值。
sqlCREATE TABLE test ( name VARCHAR(20), address VARCHAR(100) DEFAULT 'Unknown' );
在上述示例中,如果`address`没有被赋值,则会使用'Unknown'作为其值。
### (3) AUTO_INCREMENTAUTO_INCREMENT用于指定一个字段的值自动生成。
sqlCREATE TABLE test ( id INT AUTO_INCREMENT, name VARCHAR(20) );
在上述示例中,`id`将自动增长,并且可以用来生成唯一的ID。
### (4) PRIMARY KEYPRIMARY KEY用于指定一个字段作为表的主键。
sqlCREATE TABLE test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) );
在上述示例中,`id`被指定为表的主键,并且将自动增长。
### (5) UNIQUEUNIQUE用于指定一个字段不能有重复值。
sqlCREATE TABLE test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), email VARCHAR(100) UNIQUE);
在上述示例中,`email`不能有重复值。
### (6) CHECKCHECK用于指定一个字段的值必须满足某个条件。
sqlCREATE TABLE test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT CHECK(age >0) );
在上述示例中,`age`必须大于0。
### (7) FOREIGN KEYFOREIGN KEY用于指定一个字段与另一个表的某个字段有关联。
sqlCREATE TABLE test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), department_id INT, FOREIGN KEY (department_id) REFERENCES departments(id) );
在上述示例中,`department_id`与`departments.id`有关联。