【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';
相关推荐
sunnyday042632 分钟前
MyBatis XML映射文件中的批量插入和更新
xml·java·mysql·mybatis
浪九天37 分钟前
Orcale、MySQL中参数类型的详解和运用场景(不带示例)
数据库·mysql·oracle
程序员阿鹏40 分钟前
jdbc批量插入数据到MySQL
java·开发语言·数据库·mysql·intellij-idea
计算机毕设指导63 小时前
基于SpringBoot的城乡商城协作系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
橘猫云计算机设计3 小时前
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·django
2501_903238653 小时前
Spring Boot日志配置与环境切换实战
数据库·spring boot·后端·个人开发
梓沂3 小时前
审计级别未启用扩展模式导致查询 DBA_AUDIT_TRAIL 时 SQL_TEXT 列为空
数据库·sql·dba
Smile丶凉轩3 小时前
数据库面试知识点总结
数据库·c++·mysql
RainbowSea4 小时前
9-1. MySQL 性能分析工具的使用——last\_query\_cost,慢查询日志
数据库·sql·mysql
Sui_Network5 小时前
Sui 如何支持各种类型的 Web3 游戏
大数据·数据库·人工智能·游戏·web3·区块链