SQL数据类型
MySQL中有很多种数据类型,它们各自有不同的用途和特性。以下是一些主要的MySQL数据类型及其区别:
-
数值型:
*INT, INT UNSIGNED, BIGINT: 这些数据类型可以存储整数。
INT
可以存储从-2147483648到2147483647的整数,INT UNSIGNED
可以存储从0到4294967295的整数,BIGINT
可以存储从-9223372036854775808到9223372036854775807的整数。- DECIMAL(p,s): 用于存储精确的小数。p是总的位数,s是小数点后的位数。
- FLOAT: 用于存储浮点数(单精度)。
- DOUBLE: 用于存储双精度浮点数。
-
字符型:
- CHAR(n): 用于存储固定长度的字符串。如果实际字符串长度小于n,MySQL会用空格填充到n的长度。
- VARCHAR(n): 用于存储可变长度的字符串。实际存储的长度是字符串的实际长度,不会用空格填充。
- TEXT: 用于存储大文本。
- BLOB: 用于存储二进制大对象。
-
日期和时间型:
- DATE: 用于存储日期。格式为 ‘YYYY-MM-DD’。
- TIME: 用于存储时间。格式为 ‘HH:MM:SS’。
- DATETIME: 用于存储日期和时间。格式为 ‘YYYY-MM-DD HH:MM:SS’。
- TIMESTAMP: 用于存储时间戳。格式与DATETIME相同,但范围从1000到9999。默认值为’0000-00-00 00:00:00’。
- YEAR(4): 用于存储四位年份,范围为1000到9999。
-
枚举型(ENUM):ENUM是一个预定义的主数据类型,它允许你在列中指定一组特定的值,然后为该列限制只能使用这些值中的一个。语法为
enum('value1', 'value2', ...)
。 -
集合型(SET):SET是一个预定义的主数据类型,它允许你在列中指定一组值,但与ENUM不同,你可以使用任意数量的值(包括零个或多个)。语法为
set('value1', 'value2', ...)
。 -
二进制型:
- BINARY(n) 和 CHAR(n) BINARY: 用于存储二进制字符串。这些数据类型的排序和比较是二进制级的,而不是字符级的。
-
逻辑型(BOOL):在MySQL中,BOOL类型用以下三种方式表示:如果字段的值被设置为NULL,则为UNKNOWN;如果字段的值为数字0(不管在何处、如何存储或解释),则为FALSE;否则为TRUE。注意,MySQL没有严格意义上的布尔类型,而是通过数值类型(如整数)来表示布尔值。
-
其他特殊类型:如主键(PRIMARY KEY)、唯一键(UNIQUE KEY)、外键(FOREIGN KEY)等,这些不是基本的数据类型,但它们在数据库设计中扮演着重要的角色。
SQL 语句
## 建库
CREATE DATABASE study;
## 建表
CREATE TABLE `mzt`(
id INT COMMENT '编号',
mname VARCHAR(20) COMMENT '姓名',
hiredate DATE COMMENT '入职时间',
sal FLOAT COMMENT '工资',
bonus DOUBLE COMMENT '奖金'
);
## 修改列类型
ALTER TABLE mzt MODIFY sal DOUBLE;
ALTER TABLE mzt MODIFY bonus FLOAT;
SHOW CREATE TABLE mzt;
## 展示表结构
DESC mzt;
## 修改表名
ALTER TABLE mzt RENAME mx;
## 修改列名
ALTER TABLE mzt CHANGE mname tname
##修改名和类型
ALTER TABLE table_name CHANGE COLUMN old_name new_name 列的新类型;
ALTER TABLE mx CHANGE bonus prize DOUBLE;
VARCHAR(15);
## 展示表结构
DESC mzt;
## 修改用户密码
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
如图:
FLOAT和DOUBLE的区别
相同点:用于存储浮点数的数据类型
-
存储空间:
FLOAT
占用4个字节,而DOUBLE
占用8个字节。因此,DOUBLE
可以存储更大范围和更精确的浮点数值。 -
精度:由于存储空间的不同,
FLOAT
和DOUBLE
在精度方面也存在差异。FLOAT
支持7位有效数字,而DOUBLE
支持16位有效数字。这意味着DOUBLE
可以提供更高的精度和更小的误差。 -
范围:
FLOAT
的范围是-3.4E+38到3.4E+38,而DOUBLE
的范围是-1.7E+308到1.7E+308。这意味着DOUBLE
可以表示更大范围的浮点数值。
varchar和char的区别
- 存储方式:varchar是变长类型,而char是定长类型。这意味着varchar类型的字段可以根据实际存储的数据长度来分配空间,而char类型的字段无论存储的数据长度如何,都会占用固定长度的空间。
- 存储容量:varchar类型的字段最大长度为65535个字符,而char类型的字段最大长度为255个字符。因此,varchar可以存储更大的数据,而char只能存储较小的数据。