一文速通MySQL

MySQL 是一种广泛使用的开源关系型数据库管理系统,它通过 SQL(结构化查询语言)来管理和操作数据库。SQL语句主要分为三类:DDL(数据定义语言)、DML(数据操纵语言)和DCL(数据控制语言)。

DDL(数据定义语言):

功能:用于定义和修改数据库的结构

常见语句:

查看数据库 show databases;

新建数据库 create database 数据库名;

删除数据库 drop database 数据库名;

查看当前数据库select database();

进入数据库 use 数据库名字

创建表 create table 表名(列1 类型 约束,列2 类型 约束,...);

查看所有表 show tables;

查看表中数据 select * from 表名;

查看表结构 desc 表名

删除表 drop table 表名;

修改表中列 alter table 表名 change 列名 新列名 类型 约束;

添加列 alter table 表名 add 列名 类型 约束;

删除列 alter table 表名 drop column 列名;

DML(数据操纵语言):

功能:用于操作数据库中的数据

常见语句:

向表中添加数据

①insert into 表名 values (...),(),(); 要与表结构一一对应

②insert into 表名 (选择必填项)values (填写内容),(),();

③insert into 表名 set 列1=值 列2=值 ...;

修改表中数据 update 表名 set 列=值 where 条件;

删除表中数据 delete from 表名 where 条件;

查看表中数据 select * from 表名

DCL(数据控制语言):

功能:用于控制用户对数据库的访问权限

常见语句:

查看用户 select user,host from mysql.user;

查看当前用户 select user();

创建用户 create user '用户名'@'%' identified by '密码';

删除用户 drop user '用户名'@'%';

查看权限 show grants for '用户名'@'%';

增加权限 grant select,update(列名) on 数据库名.表名 to '用户名'@'%';

删除权限 revoke select,update,delete,insert on 数据库名.表名 from '用户名'@'%';

全局权限 grant all on *.* to '用户名'@'%';

补充 常见约束:

①非空约束 not null

②唯一约束 unique

③自增长约束 auto_increment

④默认值约束 default 默认值

⑤主键约束 primary key(列名)

⑥外键约束 foreign key(列名) references 目标表(目标列)

[创建表时设置外键

constraint 外键名 foreign key(列名) references 目标表(目标列)

on update cascade on delete cascade

创建表后设置外键

alter table 表名 add constraint 外键名 foreign key(列) references 目标表(目标列)

on update cascade on delete cascade

删除外键

alter table 表名 drop foreign key 外键名;]

查询语句:

在 MySQL 中,查询语句是通过 SELECT 语句实现的,它是 SQL 中最常用的操作之一,用于从一个或多个表中检索数据。

1. 查询所有数据:

   SELECT * FROM 表名;

2. 查询指定列的数据:

   SELECT 列名 FROM 表名;

3. 条件查询:

   SELECT * FROM 表名 WHERE 条件;

4.运算符:

    比较运算符:`>`、`<`、`=`、`!=`、`<>`;逻辑运算符:`AND`、`OR`、`NOT`;范围运算符:`IN`、`NOT IN`。

5. 匹配一组值:

   SELECT * FROM student WHERE age IN (20, 30, 40);

6. 匹配某个范围内的值(包括边界值):

   SELECT * FROM student WHERE id BETWEEN 1003 AND 1009;

7. 模糊查询运算符 `LIKE`:

   `%` 匹配任意数量(包括 0)的字符:

     SELECT * FROM student WHERE name LIKE '张%';

   `_` 匹配单个字符:

     SELECT * FROM student WHERE name LIKE '张_';

8. 匹配空值:

    `IS NULL`;排除空值:`IS NOT NULL`。

9. 排序查询:

    使用 `ORDER BY` 子句按升序(ASC)或降序(DESC)排序:

   SELECT * FROM 表名 ORDER BY 列名 ASC;

10. 限制查询结果数量:

    SELECT * FROM 表名 LIMIT 起始位置, 返回行数;

    起始位置可以省略,表示从第一行开始。

11. 分组查询:

    SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名;

12. 过滤分组之后的数据:

    SELECT age, COUNT(*) FROM student GROUP BY age HAVING age > 20;

13. 联合查询:

     `UNION` 默认去重,如果不想去重,可以使用 `UNION ALL`:

      SELECT age FROM student UNION SELECT name FROM teacher;

14. 子查询:

    SELECT * FROM teacher WHERE id IN (SELECT teacher_id FROM student WHERE age > 20);

15. 连接查询:

      内连接(INNER JOIN):

      只返回两个表中有匹配的记录:

      SELECT * FROM student INNER JOIN teacher ON student.teacher_id = teacher.id;

      左连接(LEFT JOIN):

      返回左表中的所有记录,即使右表中没有匹配的记录。如果右表中没有匹配的记录,结果中右表的列会返回 NULL:

      SELECT * FROM student LEFT JOIN teacher ON student.teacher_id = teacher.id;

      右连接(RIGHT JOIN):

       返回右表中的所有记录。如果左表中没有匹配的记录,结果中左表的列会返回 NULL:

      SELECT * FROM student RIGHT JOIN teacher ON student.teacher_id = teacher.id;

      全连接(FULL JOIN):

      返回两个表中所有的记录,如果某表没有匹配记录,则另一个表的列会显示 NULL(通过 LEFT JOIN 和 RIGHT JOIN 结合的方式来实现):

      SELECT 列1, 列2, ... FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名UNION SELECT 列1, 列2, ... FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;

数据类型:

常见的 SQL 数据类型

INT 和INTEGER:用于存储整数

范围:通常是 -2,147,483,648 到 2,147,483,647

TINYINT:存储较小的整数,通常是 1 字节

范围:-128 到 127。

SMALLINT:存储较小的整数,通常是 2 字节

范围:-32,768 到 32,767

BIGINT:存储大整数,通常是 8 字节

范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

FLOAT 或 REAL:用于存储浮动小数点数,通常用于表示近似值

范围和精度因数据库而异

CHAR(n):定长字符数据,n 是字符的长度。例如,CHAR(10) 会存储长度为 10 的固定字符串,不足部分用空格填充。

VARCHAR(n):变长字符数据,n 是最大字符数。可以存储任何长度小于或等于 n 的字符串,不会浪费空间。

TEXT:用于存储长文本数据,长度通常没有严格限制

DATE:只存储日期(年、月、日),例如 2025-02-25

TIME:只存储时间(小时、分钟、秒),例如 14:30:00

DATETIME 或 TIMESTAMP:存储日期和时间,通常包含秒数精度,例如 2025-02-25 14:30:00

YEAR:只存储年份,通常以四位数表示,例如 2025

枚举类型 :用于存储一组预定义的值

ENUM('值1', '值2', ...):定义一个包含预设值的列,只有这些值中的一个可以存储在该列中

你可能感兴趣的:(mysql,数据库)