文章目录
- [一. DDL (Data Definition Language)](#一. DDL (Data Definition Language))
-
- [1. 创建数据库和表](#1. 创建数据库和表)
- [2. 修改列(ALTER TABLE)](#2. 修改列(ALTER TABLE))
- [3. 删除库表](#3. 删除库表)
- [二. DML (Data Manipulation Language)](#二. DML (Data Manipulation Language))
-
- [1. 修改插入数据](#1. 修改插入数据)
- [2. 删除数据](#2. 删除数据)
- [3. 批量导入数据](#3. 批量导入数据)
- [三. DQL (Data Query Language) 数据查询语言](#三. DQL (Data Query Language) 数据查询语言)
SQL语句常用的主要分为如下四种
DDL (Data Definition Language) 数据定义语言
用于定义或修改 数据库 中的对象,如:表、索引、视图、数据库、存储过程、触发器、自定义函数等。
DML (Data Manipulation Language) 数据操作语言
用于对数据库表中的数据进行操作,如插入,更新和删除。
DCL (Data Control Language) 数据控制语言
用来设置或更改数据库事务、保存点操作、授权操作(用户或角色授权,权限回收,创建角色,删除角色等)、锁表、锁实例等。
DQL (Data Query Language) 数据查询语言
用来查询数据库内的数据,如查询数据、合并多个select语句的结果集、子查询。
接下来依次看下常见操作
一. DDL (Data Definition Language)
1. 创建数据库和表
sql
创建库(CREATE DATABASE)
CREATE DATABASE database_name
## 进入库(USE)
USE database_name
## 查看表(SHOW)
SHOW TABLES;
SHOW TABLES FROM database_name;
## 创建表(CREATE TABLE)
`CREATE TABLE table_name (column1_name INT, column2_name VARCHAR(50), column3_name VARCHAR(50));`
2. 修改列(ALTER TABLE)
sql
### 修改列(CHANGE COLUMN)
ALTER TABLE table_name CHANGE COLUMN old_col_name new_col_name INT AUTO_INCREMENT PRIMARY KEY
mysql> ALTER TABLE students
-> CHANGE COLUMN id id INT AUTO_INCREMENT PRIMARY KEY;
### 增加列(ADD COLUMN)
ALTER TABLE table_name ADD COLUMN new_col1_name TEXT , ADD COLUMN new_col2_name VARCHAR(255);
### 删除列 DROP
ALTER TABLE table_name DROP COLUMN col1_name, DROP COLUMN col2_name
mysql> ALTER TABLE students
-> DROP COLUMN age;
3. 删除库表
sql
DROP TABLE table_name;
# 慎用
DROP DATABASE database_name;
二. DML (Data Manipulation Language)
1. 修改插入数据
sql
## 插入数据(INSERT INTO)
INSERT INTO table_name (col1_name, col2_name, col4_name) VALUES (col1_value, col2_value, col4_value);
mysql> INSERT INTO students
-> (name, birthday, address, class_id, student_id)
-> VALUES('xiaoming', '1996-07-01', '江苏省苏州市相城区', 3, 080301);
## 修改某些列(UPDATE SET)
UPDATE table_name SET col1_name = 'new_value' WHRE col2_name = 'xxx';
若需要修改多列,则用逗号分开列表即可。
mysql> UPDATE class SET grade_id = 1, class_teacher = '吴老师' WHERE class_id = 3;
Query OK, 1 row affected (0.00 sec)
2. 删除数据
要清空表中的数据,可以使用以下SQL语句:
sql
TRUNCATE TABLE table_name;
### 删除数据
DELETE FROM table where condition
mysql> DELETE FROM students
-> WHERE class_id =
-> (SELECT c.class_id FROM class c WHERE class_teacher = '徐老师');
注意:
TRUNCATE 语句会删除表中的所有数据行,但保留表的结构、索引和约束。对比DELETE语句逐行删除数据,使用TRUNCATE语句更为高效,因为它直接删除整个数据表中的所有行,而不是逐行删除。
此外,TRUNCATE还会重置自增列的值,因此表中的自增列将从起始值重新开始。
3. 批量导入数据
sql
LOAD DATA INFILE '/path/to/employees.csv'
INTO TABLE employees
(col2, col4, col5)
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
/path/to/employees.csv
是包含员工数据的CSV文件路径。employees
是要导入数据的表名。(col2, col4, col5)
:指定列导入FIELDS TERMINATED BY ','
指定每个字段之间使用逗号分隔。ENCLOSED BY '"'
表示字段以双引号括起来。LINES TERMINATED BY '\n'
表示行分隔符为换行符。IGNORE 1 ROWS
表示忽略文件中的第一行(通常是标题行)。
sql
mysql> LOAD DATA INFILE '/var/lib/mysql-files/sql_data.txt'
-> REPLACE INTO TABLE students
-> FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 1 LINES
-> (`name`, birthday, class_id, student_id, address);
三. DQL (Data Query Language) 数据查询语言
sql
## 表关联查询(JOIN USING)
`JOIN ... USING`,`USING`用于两个表相同列值相同查询。并使用`CONCAT(str1, str2, ...)`进行字符串拼接
mysql> SELECT name, birthday, address,
-> CONCAT(grade_id, '年级', class_name) AS class_info
-> FROM students
-> JOIN class USING(class_id)
-> WHERE class_teacher = '吴老师';
排序
###默认使用升序
mysql> SELECT * FROM students ORDER BY birthday;
### 降序
mysql> SELECT * FROM students ORDER BY birthday DESC;
## 限制(LIMIT)
mysql> SELECT * FROM students LIMIT 2;
### 跳过限制个数
LIMIT(m, n),跳过m个,展示后面n个。
mysql> SELECT * FROM students LIMIT 2, 1;
### 模糊查询
使用`LIKE`和`%`进行模糊匹配
mysql> SELECT `name`, birthday, address
-> FROM students
-> WHERE address LIKE '%江苏%';
### 交集并集查询
1. 使用`AND`进行交集查询
mysql> SELECT `name`, birthday, address
-> FROM students
-> WHERE address LIKE '%江苏%' AND class_id = 1;
2. 使用`OR`进行并集查询
mysql> SELECT `name`, birthday, address
-> FROM students
-> WHERE `name` LIKE '%xiao%' OR `name` LIKE '%小%';
### 日期处理
函数:月`MONTHNAME(col_name)`, 日`DAYOFMONTH(col_name)`,年`YEAR(col_name)`
mysql> SELECT CONCAT(MONTHNAME(birthday), ' ',
-> DAYOFMONTH(birthday), ',',
-> YEAR(birthday)) AS student_birthday
-> FROM students
-> WHERE `name` = 'xiaoming';
+------------------+
| student_birthday |
+------------------+
| July 1,1996 |
+------------------+
函数`DATE_FORMAT(col_name, "%M %d, %Y")`
mysql> SELECT DATE_FORMAT(birthday, "%M %d, %Y")
-> AS 'student_birth_date'
-> FROM students
-> WHERE `name` = 'xiaohong';