MySQL基础知识

通用语法

  • Sql语句可以单行或者多行书写,但是必须以分号结束。只有以分号结束才是一个完整的Sql语句。
  • Mysql数据库的语句不区分大小写,关键字建议大写,便于区分。
  • 注释:
    • 单行注释:- - 或者#
    • 多行注释:/* 被注释内容*/

DDL

DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等

DDL简单理解就是用来操作数据库,表等

1 操作数据库

1.1 查询所有的数据库

1
SHOW DATABASES;

1.2 创建数据库

1
CREATE DATABASE 数据库名称;

1.3 删除数据库

  • 知道存在,直接删除

    1
    DROP DATABASE 数据库名称;
  • 不知道是否存在,添加判断语句。若存在,则删除

    1
    DROP DATABASE IF EXISTS 数据库名称;

1.4 使用数据库

1
USE 数据库名称;

1.5 查看当前数据库

1
SELECT DATABASE();

2 操作表

2.1 查询当前数据库下所有的表

1
SHOW TABLES;

2.2 查询表结构

1
DESC 表名称;

2.3 创建表

1
2
3
4
5
6
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名1 数据类型1,
...
字段名n 数据类型n
);

2.4 删除表:

  • 知道存在,直接删除

    1
    DROP TABLE 表名;
  • 不知道是否存在,添加判断语句。若存在,则删除

    1
    DROP TABLE IF EXISTS 表名;

2.5 修改表:

2.5.1 修改表名

1
ALTER TABLE 表名 RENAME TO 新表名;

2.5.2 添加列:

1
ALTER TABLE 表名 ADD 添加的列名 添加的列的数据类型;

2.5.3 修改列的数据类型

1
ALTER TABLE 表名 MODIFY 列名 新的数据类型;

2.5.4 同时修改列名和数据类型

1
ALTER TABLE 表名 列名 新的数据类型;

2.5.5 删除列

1
ALTER TABLE 表名 DROP 列名;

DML

DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改

DML简单理解就对表中数据进行增删改

1 添加数据

1.1 给指定列添加数据

1
INSERT INTO 表名(列名1,列名2...) VALUES(值1,值2...);

1.2 给全部列添加数据

1
INSERT INTO 表名 VALUES(值1,值2...);

1.3 批量添加数据

1
2
3
4
5
6
7
INSERT INTO 表名(列名1,列名2...) 
VALUES
(值1,值2...),
(值1,值2...),
(值1,值2...),
...
(值1,值2...);

2 修改数据

1
UPDATE 表名 SET 列名1=1, 列名2=2, ... [WHERE 条件]

3 删除数据:

1
DELETE FROM 表名 [WHERE 条件]

DQL

DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)

DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。

1 基础查询

1
2
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; --查询所有数据(*为所有字段)

2 条件查询

1
SELECT 字段列表 FROM 表名 WHERE 条件列表;
  • 下面为条件查询能够使用的运算符。

    符号 功能
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    = 等于
    <>或者!= 不等于
    BETWEEN…AND… 在某个范围之间(前后都包含)
    IN(…) 多选一 满足其中一个即可
    LIKE占位符 模糊查询 _单个任意字符 %多个任意字符
    IS NULL 是NULL
    IS NOT NULL 不是NULL
    AND或&& 并且
    OR或|| 或者
    NOT或! 非,不是
  • 模糊查询:就是查询只知道部分信息来查数据

3 排序查询

1
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式],排序字段名2 [排序方式]...;

排序方式有两种:

  • ASC:升序排列 (默认值)
  • DESC:降序排列

注意:如果有多个排序条件,当前面的条件值一样时,才会根据第二条件进行排序。

4 聚合函数

1
SELECT 聚合函数名(列名) FROM 表;

函数分类:

函数名 功能
count(列名) 统计数量(一般选用不为null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值

注意:NULL值不参与所有聚合函数运算!!!

5 分组查询

1
SELECT 字段列表 FROM 表名 [WHERE 分组前的限定条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件]

WHERE和HAVING的区别:

  • 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
  • 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。

注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

6 分页查询

1
SELECT 字段列表 FROM 表名 LIMIT 其实索引, 查询台条目数;

索引计算公式:

1
起始索引 = (当前页码 - 1) * 每页显示的条数

约束

1 非外键约束

约束名称 描述 关键字
主键约束 主键是一行数据的唯一标识,要求非空且唯一 PRIMARY KEY
唯一约束 保证列中的所有数据各不相同 UNIQUE
非空约束 保证列中所有数据不能有NULL值 NOT NULL
默认约束 保存数据时,未指定值则采用默认值 DEFAULT

2 外键约束

  • 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

    外键约束 外键是用来让两个表之间建立连接,保证数据的一致性和完整性 FOREIGN KEY
  • 添加约束

    1
    2
    3
    4
    5
    6
    -- 创建表时添加外键约束
    CREATE TABLE 表名(
    列名 数据类型,
    ...
    [CONSTRAINT] [外键名] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
    );
    1
    2
    --- 创建表后添加外键约束
    ALTER TABLE 表名 DROP FOREIGN(外键列名) REFERENCES 主表(主表名称);
  • 删除约束

    1
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

数据库设计

1 一对一

  • 一对一关系多用于表拆分,将一个实体中经常出现的字段放一张表,不经常出现的字段放一张表。用于调高查询性能。

  • 实现方法:在任意一方加入外键,关联另一方主键,并且设置外键为唯一约束(UNIQUE)。

  • 例子:下图就是一对一的例子,我在tb_user_desc表中添加了一个外键。

    tb_user用户表 (1)
    id name age sex
    1 张三 33
    2 李四 56
    3 王五 34
    tb_user_desc (1)
    id adder status user_id(添加的外键)
    1 四川 单身 1
    2 上海 离婚 2
    3 广东 已婚 3

2 多对一

  • 一个表的某一行数据对应这另一张表的多行数据。

  • 实现方法:在多的一方建立外键,指向一的一方。

  • 例子:一个部门对应多个员工,一个员工对应一个部门。我在tb_emp表中建立外键,指向tb_dept表。

    tb_emp (m)
    id name age dept_id(添加的外键)
    1 张三 23 1
    2 李四 54 1
    3 王五 34 2
    tb_dept (1)
    dept_id dept_name adder
    1 研发部 北京
    2 销售部 成都

3 多对多

  • 两张表互相有多行数据有关联。

  • 实现方法:建立第三只张中间表,中间至少包含两个外键,分别是关联的是两张表的主键

  • 例子:书包和书的种类便是多对多,一个书包可以装不同种类的书。一种书可以装进不同的书包。我创建了第三张表,包含两个外键,分别指向tb_bag和tb_book的主键。

    tb_bag (m)
    id name
    1
    2
    tb_book (n)
    id name
    1 语文
    2 数学
    3 英语
    tb_book_bag (创建的第三张中间表)
    id tb_bag tb_book
    1 1 1
    2 1 2
    3 2 3

多表查询

1 连接查询

1.1 内连接

查两张表的交集部分。

1
2
3
4
-- 隐式内连接
SELECT 字段列表 FROM 表名1,表名2,... WHERE 条件;
-- 显示类链接
SELECT 字段列表 FROM 表名1 FROM [INNER] JOIN 表名2 ON 条件;

1.2 外连接

1
2
3
4
-- 左外连接
SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件;
-- 右外连接
SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件;
  • 左外连接:相当于查询表1所有数据和交集部分数据。
  • 右外连接:相当于查询表2所有数据和交集部分数据。

2 子查询

子查询就是查询中嵌套查询。

2.1 单行单列

  • 作为条件值,使用 = , != , > , <等进行判断。
1
SELECT 字段列表 FROM 表名 WHERE 字段名 = (子查询);

2.2 多行单列

  • 作为条件值,使用in等关键字进行条件判断。
1
SELECT 字段列表 FROM 表名 WHERE 字段名 IN (子查询);

2.3 多行多列

  • 作为虚拟表。
1
SELECT 字段列表 FROM (子查询) WHERE 条件;

事务

1 四大特性

  • 原子性:事务是不可分割的最小操作单元,要么同时成功,要么同时失败。
  • 一致性:事务完成时,必须使所以的数据都保持一致状态。
  • 隔离性:多个事务之间,操作的可见性。
  • 持久行:事务一旦提交或回滚,它对数据的改变是永久的。

2 使用(常用)

2.1 开启事务

1
START TRANSACTION; 或 BEGIN;

2.2 提交事务

1
COMMIT

COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的.

2.3 回滚事务

1
ROLLBACK;

回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。


如果有什么,可以通过下面的邮箱和我联系!!!

img