November 22, 2024

MySQL 学习笔记基础篇

数据库基础学习

一、MySQL 数据库的数据模型

用户登录访问 数据库数据库下存放若干中存储信息

二、SQL 语法——通用

  1. 单行或多行书写,分号结尾;
  2. 可空格、缩进;
  3. 语句不区分大小写,关键字建议大写;
  4. 单行注释用 -- something# something
  5. 多行注释用 /* something */

三、SQL 语法——DDL

全称 ,数据定义语言,用来定义数据库对象(数据库、表、字段)。

补充 的数据类型

  1. 数值类型
分类 类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围
数值类型 TINYINT 1 byte [-128,127] [0,255]
SMALLINT 2 byte [-32768,32767] [0,65535]
MEDIUMINT 3 byte [-8388608,8388607] [0,16777215]
INT/INTEGER 4 byte [-2147483648,2147483647] [0,4294967295]
BIGINT 8 byte [-263,263-1] [0,2^64-1]
FLOAT 4 byte / /
DOUBLE 8 byte / /
DECIMAL / /

关于 类型定义时传入两个参数 表示精度,有效位数, 表示标度,小数位数。

  1. 字符串类型
分类 类型 大小 描述
字符串类型 CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65535 bytes 二进制形式的长文本数据
TEXT 0-65535 bytes 长文本数据
MEDIUMBLOB 0-16777215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16777215 bytes 中等长度文本数据
LONGBLOB 0-4294967295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4294967295 bytes 极大文本数据

后面传参是字符串长度

  1. 日期类型
分类 类型 大小 范围 格式 描述
日期类型 DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 时间值或持续时间
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳

四、SQL 语法——DML

全称 ,数据操作语言,用来对数据库表中的数据进行增删改。

五、SQL 语法——DQL

全称 ,数据查询语言,用来查询数据库中表的记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT [DISTINCT]
字段1 [AS 别名1], 字段2 [AS 别名2], 字段3 [AS 别名3], ...
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
字段1 ASC/DESC, 字段2 ASC/DESC;
LIMIT
起始索引, 查询记录数;

补充:聚合函数

统计数量 count

最大值 max

最小值 min

平均值 avg

求和 sum

六、SQL 语法——DCL

全称 ,数据控制语言,用来创建数据库用户、控制数据库的访问权限。

七、函数

  1. 字符串函数

    字符串拼接:CONCAT(S1,S2,...,Sn)

    字符串转为小写:LOWER(str)

    字符串转为大写:UPPER(str)

    左填充:LPAD(str,n,pad)

    右填充:RPAD(str,n,pad)

    去字符串头尾空格:TRIM(str)

    取子字符串:SUBSTRING(str,start,len)

  2. 数值函数

    向上取整:CEIL(x)

    向下取整:FLOOR(x)

    取模:MOD(x)

    0~1随机数:RAND()

    四舍五入,保留小数:ROUND(x,y)

  3. 日期函数

    当前日期:CURDATE()

    当前时间:CURTIME()

    当前日期和时间:NOW()

    获取年份:YEAR(date)

    获取月份:MONTH(date)

    获取日期:DAY(date)

    一个日期加上一个时间间隔:DATE_ADD(date,INTERVAL expr type)

    两个时间之间的天数:DATEDIFF(date1,date2)

  4. 流程函数

    IF(value,t,f) ,返回 ,否则返回

    IFNULL(value1,value2) 不为空输出 ,否则

    CASE WHEN [val1] THEN [res1] ... ELSE [dafault] END 如果 ,返回 ,……,否则返回 默认值

    CASE [expr] WHEN [val1] THEN [res1] ... ELSE [default] END 如果 的值等于 ,返回 ,……,否则返回 默认值

八、约束

约束是作用于表中字段上的规则,用于限制存储在表中的数据。

外键约束语法:

1
2
3
4
5
CREATE TABLE 表名(
字段名 数据类型,
......
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表字段名)
);
1
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表字段名);

外键删除/更新行为:

1
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表字段名) ON UPDATE 关键字 ON DELETE 关键字;

九、多表查询

使用 SELECT * from A,B 查询出来的是 表和 表的笛卡尔积,需要 关键字提取需要的项,去除不需要的项

1. 内连接

内连接查询的是两张表交集的部分

2. 外连接

左外连接包括左表所有数据,右外连接包括右表所有数据

3. 自连接

可外可内

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件…;

4. 联合查询

把查询结果合并起来

1
2
3
SELECT 字段列表 FROM 表A …
UNION [ALL]
SELECT 字段列表 FROM 表B …;

UNION 去重

UNION ALL 不去重

5. 子查询

十、事务

关于本文

由 wsy_jim 撰写, 采用 CC BY-NC 4.0 许可协议.

#Databases#MySQL