欢迎来到魔幻小生的博客

MySQL学习笔记

数据类型

数据类型 大小(字节) 用途 格式
INT 4 整数
FLOAT 4 单精度浮点数
DOUBLE 8 双精度浮点数
ENUM -- 单选,如性别 ENUM('a','b','c')
SET -- 多选 SET('1','2','3')
DATE 3 日期 YYYY-MM-DD
TIME 3 时间点或持续时间 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0-255 定长字符串
VARCHAR 0-255 变长字符串
TEXT 0-65535 长文本数据

整数除了 INT 外,还有 TINYINT、SMALLINT、MEDIUMINT、BIGINT。

unsigned:将数据类型设置无符号化。例如INT的类型范围是 -2147483648 ~ 2147483647, INT UNSIGNED的范围类型就是 0 ~ 4294967295。

auto_increment:设置自增长,主键会自动以相同的步长进行增长

id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,

使用UNSIGNED可能会产生一些问题,请读者自行研究。

CHAR 和 VARCHAR 的区别

CHAR 的长度是固定的,而 VARCHAR 的长度是可以变化的,比如,存储字符串 “abc",对于 CHAR(10),表示存储的字符将占 10 个字节(包括 7 个空字符),而同样的 VARCHAR(12) 则只占用 4 个字节的长度(增加一个额外字节来存储字符串本身的长度),12 只是最大值,当你存储的字符小于 12 时,按实际长度存储。

ENUM 和 SET 的区别

ENUM 类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而 SET 类型的值则可以多选。

约束(CONSTRAINT)

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。比如,规定一个用户的用户名不能为空值且没有重复的记录,这就是一种约束规则。

约束类型 主键 默认值 唯一 外键 非空
关键字 PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL

主键(PRIMARY KEY)作为数据表中一行数据的唯一标识符,在一张表中通过主键就能准确定位到某一行数据,因此主键十分重要,它不能有重复记录且不能为空。创建主键方式如下:

CREATE TABLE user(
id INT PRIMARY KEY,
name VARCHAR(20)
);
CREATE TABLE user(
id INT,
name VARCHAR(20),
[CONSTRAINT id_pk] PRIMARY KEY(id)          -- id_pk为自定义的主键名称   约束名可以省略
);
CREATE TABLE user(
id INT,
name VARCHAR(20),
[CONSTRAINT test_pk] PRIMARY KEY(id, name)   --复合主键,可以由表中的两列或多列来共同标识       test_pk为自定义的主键名称   约束名可以省略
);

默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。

people_num INT DEFAULT 10,

唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。

people_num INT UNIQUE,

非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。

people_num INT NOT NULL,

外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。
一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
比如,现在有用户表和图书表,给图书表中添加一个指向用户 name 的外键,表示这本书所属的用户 name,外键将确保这个外键指向的记录是存在的,如果你尝试删除一个用户,而这个用户还有图书存在于数据库中,那么操作将无法完成并报错。因为你删除了该用户过后,图书没有所属用户了,而这样的情况是不被允许的。同理,你在创建一篇图书的时候也不能为它指定一个不存在的用户 name。

create database test;
use test;
CREATE TABLE user(
name VARCHAR(10) PRIMARY KEY NOT NULL,
age INT NOT NULL
);
CREATE TABLE book(
id INT unsigned PRIMARY KEY NOT NULL,
user VARCHAR(10) NOT NULL,
price INT NOT NULL,
[CONSTRAINT test_pk] FOREIGN KEY(user) REFERENCES user(name)           --注意外键必须指向user表中的主键    约束名可以省略
);
INSERT INTO user VALUES('Tom', 6);
INSERT INTO user VALUES('Jack', 8);

在创建了如上的表结构后,我们可以尝试向book表中添加数据,此时由于参考列中没有Mike,添加失败

INSERT INTO book VALUES(1, 'Mike', 20);

image

我们将Mike改为Tom再次尝试,可以添加成功

INSERT INTO book VALUES(1, 'Tom', 20);

image

目前由于已经有数据指向Tom,此时删除Tom的数据,会发现删除失败

DELETE FROM user WHERE name = 'Tom';

image

SQL内置函数

SQL 允许对表中的数据进行计算。SQL 有 5 个内置函数,这些函数都对 SELECT 的结果做操作:

函数名 COUNT SUM AVG MAX MIN
作用 计数 求和 求平均值 最大值 最小值

其中 COUNT 函数可用于任何数据类型(因为它只是计数),而 SUM 、AVG 函数都只能对数字类数据类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。

posted @ 2022-06-25 17:38  魔幻小生  阅读(39)  评论(0编辑  收藏  举报