前言
这篇文章是 SQL 语法速查篇,它记录了一些常用的语法,并非所有的语法。我将语法分为了一下三个章节:
目录
数据库操作篇(这里描述的是对数据库的操作)
数据表操作篇(这里描述的是对数据表的操作,而非数据的操作)
数据操作篇(这里是对表中数据的操作)
数据库操作篇
见名知意,这个对数据库的操作语法的概述,它包含了:如何创建/删除数据库,如何查看所有的数据库,如何选择数据库,如何备份数据库。
创建数据库
## 语法:
CREATE DATABASE `[数据库名]`;
## 例子:
CREATE DATABASE `School`;
删除数据库
## 语法:
DROP DATABASE `[数据库名]`;
## 例子:
DROP DATABASE `School`;
修改数据库
MySQL 是不支持修改数据库名称的,如果需要修改数据库名称,一般的做法是创建一个新数据库,然后将旧数据库中的所有表复制到新数据库,最后删除旧数据库。
选择数据库
## 语法:
USE `[数据库名]`;
## 例子:
USE `School`;
备份数据库
注意:备份数据库通常使用 mysqldump
工具:
语法:
mysqldump -u [username] -p[password] [数据库名] > [备份文件名].sql
例子:
mysqldump -u root -proot school > school_backup.sql
恢复数据库
注意:恢复数据库通常使用 mysql 工具:
## 语法:
mysql -u [username] -p[password] [数据库名] < [备份文件名].sql
## 例子:
mysql -u root -proot school < school_backup.sql
显示数据库的创建语句
## 语法:
SHOW CREATE DATABASE `[数据库名]`;
## 例子:
SHOW CREATE DATABASE `School`;
显示数据库状态
## 语法:
SHOW DATABASE STATUS LIKE '[数据库名]';
## 例子:
SHOW DATABASE STATUS LIKE 'School';
更改数据库的字符集和排序规则
语法:
ALTER DATABASE `[数据库名]` CHARACTER SET `[字符集名]` COLLATE `[排序规则]`;
例子:
ALTER DATABASE `School` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
数据表操作篇
创建数据库
语法:
CREATE TABLE `表名`(
`列名` 数据类型,
`列名` 数据类型,
...
);
例子:
CREATE TABLE `student`(
`id` INT,
`name` VARCHAR(20)
);
添加列
语法:
ALTER TABLE `表名` ADD `列名` 数据类型;
例子:
ALTER TABLE `student` ADD `age` INT;
扩展语法 - 添加多列:
ALTER TABLE `表名`
ADD `列名` 数据类型,
ADD `列名` 数据类型
修改列的数据类型
语法:
ALTER TABLE `表名` MODIFY COLUMN `列名` 数据类型;
例子:
ALTER TABLE `student` MODIFY COLUMN `name` varchar(150);
扩展语法 - 修改多列数据类型:
ALTER TABLE `表名`
MODIFY COLUMN `列名` 数据类型,
MODIFY COLUMN `列名` 数据类型
修改列名
## 注意:此语法也可以用作对表中字段数据类型的修改。
语法:
ALTER TABLE `表名` CHANGE COLUMN `列名` 数据类型;
例子:
ALTER TABLE `student` CHANGE COLUMN `name` varchar(150);
扩展语法 - 修改多列表名:
ALTER TABLE `表名`
CHANGE COLUMN `列名` 数据类型,
CHANGE COLUMN `列名` 数据类型
删除列
语法:
ALTER TABLE `表名` DROP COLUMN `列名`;
例子:
ALTER TABLE `student` DROP COLUMN `gender`;
扩展语法 - 删除多列:
ALTER TABLE `表名`
DROP COLUMN `列名` 数据类型,
DROP COLUMN `列名` 数据类型
查看数据表创建语句
语法:
SHOW CREATE TABLE `表名`;
例子:
SHOW CREATE TABLE `student`;
设置主键
语法:
ALTER TABLE `表名`
ADD CONSTRAINT `主键约束名` PRIMARY KEY (`主键`);
例子:
ALTER TABLE `student`
ADD CONSTRAINT `student_pk` PRIMARY KEY (`id`);
## 当然你也可以在创建表时就指定好主键,如下
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
删除主键
语法:
ALTER TABLE `表名` DROP PRIMARY KEY;
例子:
ALTER TABLE `student` DROP PRIMARY KEY;
设置外键
语法:
ALTER TABLE `表名`
ADD CONSTRAINT `外键约束名`
FOREIGN KEY (`本表的外键列名`) REFERENCES `引用表`(`引用表的主键列名`);
数据操作篇
添加数据
如果表中有自增(AUTO_INCREMENT)的主键列,通常情况下,不需要为该列指定值,数据库会自动分配唯一的主键值
语法:
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);
案例:
INSERT INTO employees (id, name, hire_date, salary)
VALUES (1, 'John', '2023-01-15', 50000);
## 扩展添加多条数据
INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES
(值1, 值2, 值3, ...),
(值1, 值2, 值3, ...)
...;
删除数据
语法:
DELETE FROM `表名` WHERE 条件;
例子:
DELETE FROM `stundet` WHERE age < 18;
## 扩展 - 删除所有数据 - 【谨慎使用】
DELETE FROM `表名`
修改数据
语法:
UPDATE `表名`
SET `列1` = `新值1`, `列2` = `新值2`, ...
WHERE 条件;
案例:
UPDATE `student`
SET `name` = `李白`, `age` = `22`
WHERE id = 01;
## 扩展 - 更改所有行 - 【谨慎使用】
UPDATE `表名`
SET `列1` = `新值1`, `列2` = `新值2`, ...
查询所有数据
语法:
SELECT * FROM `表名`
案例:
SELECT * FROM `studnet`
查询指定列
语法:
SELECT `列名1`, `列名2`, ... FROM `表名`
案例:
SELECT `name`,`gender` FROM `studnet`
按条件查询数据
语法:
SELECT * FROM `表名` WHERE 条件
案例:
SELECT * FROM `studnet` WGERE `age` > 18
查询并排序
## ASC(升序) DESC(降序)
语法:
SELECT * FROM `表名` WHERE 条件
ORDER BY `列名` ASC|DESC
案例:
SELECT `name`,`age` FROM `studnet` WGERE `age` > 18
ORDER BY `age` ASC
查询前几条
语法:
SELECT * FROM `表名` WHERE 条件
LIMIT 数量;
案例:
SELECT * FROM `studnet` WGERE `age` > 18
LIMIT 10;
多表查询
语法:
SELECT `列1`, `列2`, ...
FROM `表1`
JOIN `表2` ON `表1`.`关联列` = `表2`.`关联列`;
例子:
SELECT orders.order_id, orders.order_date, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
## 扩展 左连接 和 右连接
## 左连接:返回表1的所有列
SELECT `列1`, `列2`, ...
FROM `表1`
LEFT JOIN `表2` ON `表1`.`关联列` = `表2`.`关联列`;
## 右连接:返回表2的所有列
SELECT `列1`, `列2`, ...
FROM `表1`
RIGHT JOIN `表2` ON `表1`.`关联列` = `表2`.`关联列`;
子查询
语法:
SELECT 列1, 列2, ...
FROM 表名
WHERE 列1 = (SELECT 列名 FROM 子查询表 WHERE 条件);
例子:
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'IT');