一、数据类型
(一)定义
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
(二)类型
1.整形
数据类型 | 存储范围 | 字节 |
---|---|---|
TINYINT | 有符号值:-128 ~ 127(-27 ~ 27-1) 无符号值:0 ~ 255(0~28-1) |
1 |
SMALLINT | 有符号值:-32768 ~ 32767(-215 ~ 215-1) 无符号值:0 ~ 65535(0 ~ 216-1) |
2 |
MEDIUMINT | 有符号值:-8388608 ~ 8388607(-223 ~ 223-1) 无符号值:0 ~ 16777215(0 ~ 224-1) |
3 |
INT | 有符号值:-2147483648 ~ 2147483647(-231 ~ 231-1) 无符号值:0 ~ 4294967295(0 ~ 232-1) |
4 |
BIGINT | 有符号值:-9223372036854775808 ~ 9223372036854775807(-263 ~ 263-1) 无符号值:0 ~ 18446744073709551615(0 ~ 264-1) |
8 |
2.浮点型
数据类型 | 存储范围 |
---|---|
FLOAT[(M,D)] | -3.402823466E+38 ~ -1.175494351E-38、0和1.175494351E-38 ~ 3.402823466E+38。 M是数字总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。 |
DOUBLE[(M,D)] | -1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308~1.7976931348623157E+308。 |
3.日期时间型
列类型 | 存储需求 |
---|---|
YEAR | 1 |
TIME | 3 |
DATE | 3 |
DATETIME | 8 |
TIMESTAMP | 4 |
4.字符型
列类型 | 存储需求 |
---|---|
CHAR(M) | M个字节,0<=M<=255 |
VARCHAR(M) | L+1个字节,其中L<=M切0<=M<=65535 |
TINYTEXT | L+1个字节,其中L<28 |
TEXT | L+2个字节,其中L<216 |
MEDIUMTEXT | L+3个字节,其中L<224 |
LONGTEXT | L+3个字节,其中L<232 |
ENUM('value','value2',...) | 1或2个字节,取决于枚举的个数(最多65535个值) |
SET('value1','value2',...) | 1、2、3、4、或8个字节,取决于set成员的数目(最多64个成员) |
二、操作数据表
(一)概述
数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础。
(二)USE
- 打开数据库:
USE db_name;
- 显示当前数据库:
SELECT DATABASE();
(三)创建数据表
CREATE TABLE [IF NOT EXITS] table_name (
column_name data_type,
...
)
example:
CREATE TABLE tb1(
username VARCHAR(20),
age TINYINT UNSIGNED,
salary FLOAT(8, 2) UNSIGNED
);
(四)查看数据表
SHOW TABLES [FROM db_name]
[LIKE 'pattern' | WHERE expr]
example:
SHOW TABLES from mysql;
(五)查看数据表结构
SHOW COLUMNS FROM tbl_name
example:
SHOW COLUMNS FROM tb1;
(六)MySQL记录的插入与查找
插入
INSERT [INTO] tbl_name [(col_name, ...)] VALUES(val, ...)
example:
INSERT tb1 VALUES('Tom', 25, 7863.25);
INSERT tb1 (username, salary) VALUES('John', 4500.25);
记录查找
SELECT expr, ... from tbl_name;
example:
SELECT * FROM tb1;
(七)MySQL空值与非空
空值与非空
- NULL,字段值可以为空
- NOT NULL,字段值禁止为空
example:
CREATE TABLE tb2 (
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED NULL
);
INSERT tb2 VALUES('Tom', NULL);
INSERT tb2 VALUES(NULL, 26); --ERROR
(八)MySQL自动编号
AUTO_INCREMENT
- 自动编号,且必须与主键组合使用
- 默认情况下,起始为1,每次增量为1
example
CREATE TABLE tb3 (
id SMALLINT UNSIGNED AUTO_INCREMENT,
username VARCHAR(30) NOT NULL
);
--ERROR 使用自动编号需要是主键
(九)MySQL初涉主键约束
PRIMARY KEY
- 主键约束
- 每张数据表只能存在一个主键
- 主键保证记录的唯一性
- 主键自动为NOT NULL
example:
CREATE TABLE tb3 (
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL
);
INSERT tb3 (username) VALUES('Tom');
INSERT tb3 (username) VALUES('Rose');
INSERT tb3 (username) VALUES('Dim');
INSERT tb3 (username) VALUES('John');
SELECT * FROM tb3;
/*Result:
+----+----------+
| id | username |
+----+----------+
| 1 | Tom |
| 2 | Rose |
| 3 | Dim |
| 4 | John |
+----+----------+
*/
CREATE TABLE tb4 (
id SMALLINT UNSIGNED PRIMARY KEY,
username VARCHAR(20) NOT NULL
);
INSERT tb4 VALUES(4, 'Tom');
INSERT tb4 VALUES(22, 'John');
INSERT tb4 VALUES(22, 'Rose'); --ERROR
(十)MySQL初涉唯一约束
UNIQUE KEY
- 唯一约束
- 唯一约束可以保证记录的唯一性
- 唯一约束的字段可以为空值
- 每张数据表可以存在多个唯一约束
example
CREATE TABLE tb5 (
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
age TINYINT UNSIGNED
);
INSERT tb5(username, age) VALUES('Tom', 22);
INSERT tb5(username, age) VALUES('Tom', 22); --ERROR
(十一)MySQL初涉默认约束
DEFAULT
- 默认值
- 当插入记录时,如果没有明确为字段赋值,则自动赋值予默认值。
example:
CREATE TABLE tb6 (
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
sex ENUM('1', '2', '3') DEFAULT '3'
);
INSERT tb6(username) VALUES('Tom');
/*Result:
+----+----------+------+
| id | username | sex |
+----+----------+------+
| 1 | Tom | 3 |
+----+----------+------+
*/
(十二)总结
数据类型
- 字符型
- 整型
- 浮点型
- 日期时间型
数据表操作
- 插入记录
- 查找记录
记录操作
- 创建数据表
- 约束的使用