Mysql教程:Mysql入门学习与Sql语法讲解

关注微信公众号(首席摸鱼师)免费查看全部文章

前言:

本次文章的目的,是为了将MySQL常用语法规范进行记载留存,以便后期方便使用、MySQL大家都知道,几乎每一个开发每天都在和他打交道,我们口中常说的CRUD其实就是对它而言的,增加(Create)、读取(Read)、更新(Update)和删除(Delete),每一个SpringBoot项目,Mybatis或JPA都在和它交互,以及业务上的一些设计,建表修改,索引查询,等等。
在这里插入图片描述

MySQL介绍:

MySQL是一个关系型数据库管理系统,它使用SQL语句开进行操作控制,SQL语句分为如下几种:

  • 数据定义语言 (DDL):用于定义或修改数据库架构的命令,例如创建、修改和删除数据库结构,如表、视图、索引等。DDL 命令不直接操作数据,而是操作数据库的结构本身。

     主要包括(CREATE、ALTER、DROP、TRUNCATE)
    
  • 数据操纵语言 (DML):用来操作数据库中的数据,例如新增,更新,删除,查询数据。

     主要包括(INSERT、UPDATE、DELETE、SELECT)
    
  • 数据查询语言 (DQL):用于从数据库中检索数据,例如查询不同条件下的数据或者连接多个表中查询数据。

     主要包括(SELECT)
    
  • 数据控制语言 (DCL):用于管理数据库访问权限。通过DCL语句,可以授予或撤销用户对数据库对象(如表、视图等)的操作权限。

     主要包括(GRANT、REVOKE)
    

使用讲解:

1、 数据定义语言 (DDL):

1.1、CREATE:
1.1.1、 创建数据库 (CREATE DATABASE)

语法:

CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET 字符集];

比如:

CREATE DATABASE testdb:
1.1.2、 创建表 (CREATE TABLE)

语法:

CREATE TABLE [IF NOT EXISTS] 表名 (
    列名1 数据类型 [约束条件],
    列名2 数据类型 [约束条件],
    ...
    [表级约束]
) [ENGINE=存储引擎] [CHARSET=字符集];

比如:

CREATE TABLE employees (
	id INT ( 5 ) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
	name VARCHAR ( 50 ) NOT NULL COMMENT '姓名 不能为空',
	age INT ( 3 ) NULL DEFAULT NULL COMMENT '年龄 可以为空',
	department VARCHAR ( 50 ) NULL DEFAULT NULL COMMENT '部门 可以为空',
	created_time datetime NULL DEFAULT NULL COMMENT '创建时间 可以为空' 
);
1.1.3、 创建索引 (CREATE INDEX)

普通索引语法:

CREATE INDEX idx_name ON 表名(列名);

比如:

CREATE INDEX idx_name ON employees(name);

唯一索引语法:

CREATE UNIQUE INDEX idx_name ON 表名(列名);

比如:

CREATE UNIQUE INDEX idx_department ON employees(department);

联合索引语法(适用唯一索引):

CREATE INDEX idx_name ON 表名(列名, 列名);

比如:

CREATE INDEX idx_name_age ON employees(name,age);
1.1.4、 复制表,仅保留结构 (CREATE TABLE)

语法:

CREATE TABLE 新表名 LIKE 旧表名;

比如:

CREATE TABLE new_employees LIKE employees;
1.1.5、 通过查询结果建表 (CREATE TABLE AS)

语法:

CREATE TABLE 新表名 AS 
SELECT * FROM 旧表名 [WHERE 条件]
[GROUP BY 分组列]
[HAVING 分组条件];

比如:

CREATE TABLE new_employees AS 
SELECT * FROM employees;
1.1.6、 创建视图 (CREATE VIEW)

语法:

CREATE VIEW 视图名称 [(列别名1, 列别名2, ...)]
AS
SELECT1,2, ...
FROM 表名
[WHERE 条件]
[GROUP BY 分组列]
[HAVING 分组条件];

比如:

CREATE VIEW employee_public AS
SELECT name, department FROM employees:
1.2. ALTER:
1.2.1、 添加列

语法:

ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束条件];

比如:

ALTER TABLE employees ADD COLUMN remark VARCHAR ( 50 ) NULL DEFAULT NULL COMMENT '备注 可以为空';
1.2.2、 删除列

语法:

ALTER TABLE 表名 DROP COLUMN 列名;

比如:

ALTER TABLE employees DROP COLUMN remark;
1.2.3、 修改列类型

语法:

ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型 [约束条件];

比如:

ALTER TABLE employees MODIFY COLUMN remark VARCHAR ( 100 ) NULL DEFAULT NULL COMMENT '备注 可以为空';
1.2.4、 重命名列

语法:

ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型 [约束条件];

比如:

ALTER TABLE employees CHANGE COLUMN remark new_remark VARCHAR ( 100 ) NULL DEFAULT NULL COMMENT '备注 可以为空';
1.2.5、 添加索引

普通索引语法:

ALTER TABLE 表名 ADD INDEX 索引名(列名);

比如:

ALTER TABLE employees ADD INDEX idx_age(age);

唯一索引语法:

ALTER TABLE 表名 ADD UNIQUE 索引名(列名);

比如:

ALTER TABLE employees ADD UNIQUE uk_department(department);

联合索引语法(唯一索引适用):

ALTER TABLE 表名 ADD INDEX 索引名(列名,列名);

比如:

ALTER TABLE employees ADD INDEX idx_age(age,name);
1.3、DROP
1.3.1、删除表

语法:

DROP TABLE [IF EXISTS] 表名;

比如:

DROP TABLE new_employees;
1.3.2、删除数据库

语法:

DROP DATABASE [IF EXISTS] 数据库名;

比如:

DROP DATABASE test;
1.3.3、删除索引

语法:

DROP INDEX [IF EXISTS] 索引名ON 表名;

比如:

DROP INDEX idx_age ON employees;
1.3.4、删除视图

语法:

DROP VIEW [IF EXISTS] 视图名;

比如;

DROP VIEW employee_public;
1.4、TRUNCATE

清空表中数据语法:

TRUNCATE [TABLE] 表名;

比如:

TRUNCATE TABLE employees;

2、 数据操纵语言 (DML)

2.1、INSERT
2.1.1、单行插入

语法:

INSERT INTO 表名 (字段1, 字段2) VALUES (1,2);

比如:

INSERT INTO employees (id, name) VALUES (2, 'test');
2.1.2、多行插入

语法:

INSERT INTO 表名 (字段1, 字段2) 
VALUES 
    (1,2),
    (3,4),
    (5,6);

比如:

INSERT INTO employees (age, name) 
VALUES 
    (11, 'test'),
    (12, 'test'),
    (13, 'test');
2.1.3、从查询结果插入

语法:

INSERT INTO 目标表 (字段1, 字段2)
SELECT 字段A, 字段B FROM 源表 [WHERE 条件];

比如:

INSERT INTO employees (age, name)
SELECT age, name FROM employees_copy;
2.2、UPDATE

字段值更新语法:

UPDATE 表名
SET 字段1=1, 字段2=2
[WHERE 条件] [ORDER BY 字段]
[LIMIT 行数];

比如:

UPDATE employees
SET age=28, name='test001'
WHERE id = 1;
2.3、DELETE

删除表数据语法:

DELETE FROM 表名
[WHERE 条件] [ORDER BY 字段]
[LIMIT 行数];

比如:

DELETE FROM employees
WHERE id = 1;
2.4、SELECT
2.4.1、单表查询

语法:

SELECT [DISTINCT] 列名1, 列名2 
FROM 表名
[WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件] 
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];

比如:

SELECT age,name 
FROM employees
WHERE name = 'test' LIMIT 10;
2.4.2、多表联查

内连接语法:

SELECT [DISTINCT] 别名1.列名1, 别名2.列名2 
FROM1 别名1 INNER JOIN2 别名2 ON 别名1.列名1=别名2.列名1 [WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件] 
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];

比如:

SELECT e.id,e.name,ec.id,ec.name
FROM employees e INNER JOIN employees_copy ec ON e.id=ec.id;

左连接语法:

SELECT [DISTINCT] 别名1.列名1, 别名2.列名2 
FROM1 别名1 LEFT JOIN2 别名2 ON 别名1.列名1=别名2.列名1 [WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件] 
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];

比如:

SELECT e.id,e.name,ec.id,ec.name
FROM employees e LEFT JOIN employees_copy ec ON e.id=ec.id;

右连接语法:

SELECT [DISTINCT] 别名1.列名1, 别名2.列名2 
FROM1 别名1 RIGHT JOIN2 别名2 ON 别名1.列名1=别名2.列名1 [WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件] 
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];

比如:

SELECT e.id,e.name,ec.id,ec.name
FROM employees e RIGHT JOIN employees_copy ec ON e.id=ec.id;

3、 数据控制语言 (DCL)

3.1、GRANT

授权语法:

GRANT 权限类型 ON 数据库对象 TO 用户标识
[IDENTIFIED BY '密码']
[WITH GRANT OPTION];

比如:

-- 授予test用户对mydb数据库的查询权限
GRANT SELECT ON mydb.* TO 'test'@'localhost'
3.2、REVOKE

撤销语法:

REVOKE 权限类型 ON 数据库对象 FROM 用户标识;

比如:

REVOKE SELECT ON testdb.employees FROM 'root'@'localhost';

到此,大部分的MySQL使用语法已经讲解完成,当然这些仅供参考使用,并非所有的MySQL功能,其中还有非常多的函数加以使用,感兴趣的同学们在工作中可以自行摸索,文中大部分只是举例了简单示例,以便后续使用研究!

本次教程到这里就结束了,希望大家多多关注支持(首席摸鱼师 微信同号),持续跟踪最新文章吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值