【mysql基础】mysql 四种类型语句常见操作

文章目录

  • [一. 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';
相关推荐
LightOfNight34 分钟前
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
服务器·数据库·redis·分布式·后端·缓存·中间件
代码中の快捷键1 小时前
MySQL数据库存储引擎的数据结构
数据结构·数据库·mysql
Adolf_19931 小时前
Django 路由层
数据库
好记忆不如烂笔头abc1 小时前
logminer挖掘日志归档查找问题
数据库·sql·mysql
java_heartLake9 小时前
PostgreSQL数据库参数调优实践
数据库·postgresql·调优
xnuscd10 小时前
Milvus概念
数据库·学习·mysql
代码欢乐豆10 小时前
软件工程第13章小测
服务器·前端·数据库·软件工程
小gpt&11 小时前
实现qt拖拽显示或者播放
数据库·qt·音视频
云边的快乐猫12 小时前
navicat远程连接虚拟机centos系统的mysql
linux·mysql·centos·虚拟机·navicat
望获linux12 小时前
在 ARM 平台上如何实现Linux系统的1秒启动
linux·服务器·开发语言·数据库·操作系统·嵌入式操作系统·arm平台