【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';
相关推荐
engineer-gxd6 分钟前
MySQL 表的操作
mysql
cyt涛12 分钟前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油1 小时前
01_SQLite
数据库·sqlite
liuxin334455661 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。2 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec2 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa2 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke2 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D2 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录2 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份