- MySQL 基础
- MySQL - 首页
- MySQL - 简介
- MySQL - 特性
- MySQL - 版本
- MySQL - 变量
- MySQL - 安装
- MySQL - 管理
- MySQL - PHP 语法
- MySQL - Node.js 语法
- MySQL - Java 语法
- MySQL - Python 语法
- MySQL - 连接
- MySQL - Workbench
- MySQL 数据库
- MySQL - 创建数据库
- MySQL - 删除数据库
- MySQL - 选择数据库
- MySQL - 显示数据库
- MySQL - 复制数据库
- MySQL - 数据库导出
- MySQL - 数据库导入
- MySQL - 数据库信息
- MySQL 用户
- MySQL - 创建用户
- MySQL - 删除用户
- MySQL - 显示用户
- MySQL - 修改密码
- MySQL - 授权
- MySQL - 显示权限
- MySQL - 收回权限
- MySQL - 锁定用户帐户
- MySQL - 解锁用户帐户
- MySQL 表
- MySQL - 创建表
- MySQL - 显示表
- MySQL - 修改表
- MySQL - 重命名表
- MySQL - 克隆表
- MySQL - 截断表
- MySQL - 临时表
- MySQL - 修复表
- MySQL - 描述表
- MySQL - 添加/删除列
- MySQL - 显示列
- MySQL - 重命名列
- MySQL - 表锁定
- MySQL - 删除表
- MySQL - 派生表
- MySQL 查询
- MySQL - 查询
- MySQL - 约束
- MySQL - INSERT 查询
- MySQL - SELECT 查询
- MySQL - UPDATE 查询
- MySQL - DELETE 查询
- MySQL - REPLACE 查询
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 运算符和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 运算符
- MySQL - OR 运算符
- MySQL - LIKE 运算符
- MySQL - IN 运算符
- MySQL - ANY 运算符
- MySQL - EXISTS 运算符
- MySQL - NOT 运算符
- MySQL - 不等于运算符 (!= 或 <>)
- MySQL - IS NULL 运算符
- MySQL - IS NOT NULL 运算符
- MySQL - BETWEEN 运算符
- MySQL - UNION 运算符
- MySQL - UNION 与 UNION ALL
- MySQL - MINUS 运算符
- MySQL - INTERSECT 运算符
- MySQL - INTERVAL 运算符
- MySQL 连接
- MySQL - 使用连接
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自连接
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION 与 JOIN
- MySQL 触发器
- MySQL - 触发器
- MySQL - 创建触发器
- MySQL - 显示触发器
- MySQL - 删除触发器
- MySQL - BEFORE INSERT 触发器
- MySQL - AFTER INSERT 触发器
- MySQL - BEFORE UPDATE 触发器
- MySQL - AFTER UPDATE 触发器
- MySQL - BEFORE DELETE 触发器
- MySQL - AFTER DELETE 触发器
- MySQL 数据类型
- MySQL - 数据类型
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正则表达式
- MySQL - 正则表达式
- MySQL - RLIKE 运算符
- MySQL - NOT LIKE 运算符
- MySQL - NOT REGEXP 运算符
- MySQL - regexp_instr() 函数
- MySQL - regexp_like() 函数
- MySQL - regexp_replace() 函数
- MySQL - regexp_substr() 函数
- MySQL 函数与运算符
- MySQL - 日期和时间函数
- MySQL - 算术运算符
- MySQL - 数值函数
- MySQL - 字符串函数
- MySQL - 聚合函数
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事务
- MySQL - 使用序列
- MySQL - 处理重复数据
- MySQL - SQL 注入
- MySQL - 子查询
- MySQL - 注释
- MySQL - 检查约束
- MySQL - 存储引擎
- MySQL - 将表导出到 CSV 文件
- MySQL - 将 CSV 文件导入数据库
- MySQL - UUID
- MySQL - 通用表表达式 (CTE)
- MySQL - ON DELETE CASCADE
- MySQL - Upsert (插入或更新)
- MySQL - 水平分区
- MySQL - 垂直分区
- MySQL - 游标
- MySQL - 存储函数
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字符集
- MySQL - 排序规则
- MySQL - 通配符
- MySQL - 别名
- MySQL - ROLLUP
- MySQL - 获取当前日期
- MySQL - 字面量
- MySQL - 存储过程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 标准差
- MySQL - 查找重复记录
- MySQL - 删除重复记录
- MySQL - 选择随机记录
- MySQL - SHOW PROCESSLIST
- MySQL - 修改列类型
- MySQL - 重置自动递增
- MySQL - COALESCE() 函数
- MySQL 有用资源
- MySQL - 有用函数
- MySQL - 语句参考
- MySQL - 快速指南
- MySQL - 有用资源
- MySQL - 讨论
MySQL - INSERT 语句
MySQL INSERT 语句
您可以使用 INSERT 语句向 MySQL 中的现有表添加新行。在此过程中,您需要指定表名、列名和值(列名的顺序相同)。
语法
以下是 MySQL INSERT 语句的语法。
INSERT INTO table_name (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);
其中,table_name 是您需要插入数据的表名,(column1, column2, column3,...columnN) 是列名,(value1, value2, value3,...valueN) 是记录中的值。
示例
假设我们使用 CREATE TABLE 语句在 MySQL 数据库中创建了一个名为 **Sales** 的表,如下所示
CREATE TABLE sales( ID INT, ProductName VARCHAR(255), CustomerName VARCHAR(255), DispatchDate date, DeliveryTime time, Price INT, Location VARCHAR(255) );
以下查询在上面创建的表中插入一行:
Insert into sales values (1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 'Hyderabad');
如果您按照表中的顺序将值传递给 INSERT 语句,则可以省略列名:
Insert into sales values(2, 'Earphones', 'Roja', DATE('2019-05-01'), TIME('11:00:00'), 2000, 'Vishakhapatnam');
现在,让我们在 **Sales** 表中再插入 3 条记录。
Insert into sales values (3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 3000, 'Vijayawada'), (4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 'Chennai'), (5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 6000, 'Goa');
验证
如果您使用 SELECT 语句验证 Sales 表的内容,您可以观察到已插入的记录,如下所示:
SELECT * FROM SALES;
输出
以上查询将产生以下输出:
ID | 产品名称 | 客户名称 | 发货日期 | 送达时间 | 价格 | 地点 |
---|---|---|---|---|---|---|
1 | 键盘 | Raja | 2019-09-01 | 11:00:00 | 7000 | 海德拉巴 |
2 | 耳机 | Roja | 2019-05-01 | 11:00:00 | 2000 | 维沙卡帕特南 |
3 | 鼠标 | Puja | 2019-03-01 | 10:59:59 | 3000 | 维杰亚瓦达 |
4 | 手机 | Vanaja | 2019-03-01 | 10:10:52 | 9000 | 金奈 |
5 | 耳机 | Jalaja | 2019-04-06 | 11:08:59 | 6000 | 果阿 |
INSERT ... SET
您可以使用 INSERT...SET 语句将值设置为选定的列来插入记录。以下是此语句的语法:
INSERT INTO table_name SET column_name1 = value1, column_name2=value2s...;
其中,table_name 是您需要向其中插入记录的表名,column_name1 = value1, column_name2 = value2 ...... 是选定的列名及其相应的值。
如果您使用此语句插入记录,则其他列的值将为 null。
示例
以下查询使用 INSERT...SET 语句将记录插入 SALES 表。在这里,我们只向 ProductName、CustomerName 和 Price 列传递值(其余值为 NULL):
INSERT INTO SALES SET ID = 6, ProductName = 'Speaker', CustomerName = 'Rahman', Price = 5500;
验证
如果您使用 SELECT 语句检索 SALES 表的内容,您可以观察到已插入的行,如下所示
SELECT * FROM SALES;
输出
以下是上述程序的输出:
ID | 产品名称 | 客户名称 | 发货日期 | 送达时间 | 价格 | 地点 |
---|---|---|---|---|---|---|
1 | 键盘 | Raja | 2019-09-01 | 11:00:00 | 7000 | 海德拉巴 |
2 | 耳机 | Roja | 2019-05-01 | 11:00:00 | 2000 | 维沙卡帕特南 |
3 | 鼠标 | Vanaja | 2019-03-01 | 10:59:59 | 3000 | 维杰亚瓦达 |
4 | 手机 | Vanaja | 2019-03-01 | 10:10:52 | 9000 | 金奈 |
5 | 耳机 | Jalaja | 2019-04-06 | 11:08:59 | 6000 | 果阿 |
6 | 扬声器 | Rahman | NULL | NULL | 5500 | NULL |
INSERT .... SELECT
您可以从一个表中选择所需的列值,并将它们作为记录插入另一个表中,使用 INSERT .... SELECT 语句,以下是执行此操作的语法:
INSERT INTO table_to (column1, column2,....) SELECT Column1, column2 ..... FROM Table_from WHERE condition
示例
假设我们创建了一个表,其中包含销售详情以及客户的联系详情,如下所示:
CREATE TABLE SALES_DETAILS ( ID INT, ProductName VARCHAR(255), CustomerName VARCHAR(255), DispatchDate date, DeliveryTime time, Price INT, Location VARCHAR(255), CustomerAge INT, CustomrtPhone BIGINT, DispatchAddress VARCHAR(255), Email VARCHAR(50) );
现在,让我们使用 INSERT 语句在上面创建的表中插入 2 条记录,如下所示:
Insert into SALES_DETAILS values (1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 'Hyderabad',25,'9000012345','Hyderabad - Madhapur','[email protected]'), (2, 'Mobile','Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 'Chennai',30,'90000123654','Chennai- TNagar','[email protected]');
如果我们想要另一个只包含客户联系详情的表,则创建一个表,如下所示:
CREATE TABLE CustContactDetails ( ID INT, Name VARCHAR(255), Age INT, Phone BIGINT, Address VARCHAR(255), Email VARCHAR(50) );
以下查询使用 INSERT INTO SELECT 语句将记录插入 CustContactDetails 表。在这里,我们尝试将 SALES_DETAILS 表中的记录插入 CustContactDetails 表:
INSERT INTO CustContactDetails (ID, Name, Age, Phone, Address, Email) SELECT ID, CustomerName, CustomerAge, CustomrtPhone, DispatchAddress, Email FROM SALES_DETAILS WHERE ID = 1 AND CustomerName = 'Raja'; INSERT INTO CustContactDetails (ID, Name, Age, Phone, Address, Email) SELECT ID, CustomerName, CustomerAge, CustomrtPhone, DispatchAddress, Email FROM SALES_DETAILS WHERE ID = 2 AND CustomerName = 'Vanaja';
验证
您可以验证 CustContactDetails 表的内容,如下所示:
SELECT * FROM CustContactDetails;
输出
上述 mysql 查询将生成以下输出:
ID | 姓名 | 年龄 | 电话 | 地址 | 邮箱 |
---|---|---|---|---|---|
1 | Raja | 25 | 9000012345 | 海德拉巴 - Madhapur | [email protected] |
2 | Vanaja | 30 | 90000123654 | 金奈 - TNagar | [email protected] |
INSERT ... TABLE
另一方面,您可以使用 INSERT...TABLE 语句将一个表的内容插入另一个表中,而不是选择特定列。以下是执行此操作的语法:
INSERT INTO table1 TABLE table2;
示例
假设我们使用以下 CREATE 语句创建了一个名为 student 的表:
Create table Student( Name Varchar(35), age INT, Score INT );
现在,让我们向 student 表中插入四条记录:
INSERT INTO student values ('Jeevan', 22, 8), ('Raghav', 26, -3), ('Khaleel', 21, -9), ('Deva', 30, 9);
假设我们还有另一个名为 columns and types 的表,创建如下:
Create table Data( Name Varchar(35), Age INT, Score INT );
以下查询将 Student 表的内容插入 Data 表:
INSERT INTO Data TABLE Student;
验证
如果您使用 SELECT 语句验证 Data 表的内容,您可以观察到已插入的数据,如下所示:
SELECT * FROM data;
输出
以上查询将产生以下输出:
姓名 | 年龄 | 分数 |
---|---|---|
Jeevan | 22 | 8 |
Raghav | 26 | -3 |
Khaleel | 21 | -9 |
Deva | 30 | 9 |
INSERT ... ON DUPLICATE KEY UPDATE 语句
如果表的列之一具有 UNIQUE 或 PRIMARY KEY 约束,并且如果您使用 **ON DUPLICATE KEY UPDATE** 子句以及 **INSERT** 语句将记录插入该特定表中,如果在具有任一约束的列下传递的值是重复的,则不会添加新记录,而是会更新旧记录。
语法
以下是 INSERT ... ON DUPLICATE KEY UPDATE 语句的语法:
INSERT INTO table_name (column1, column2,....) VALUES (value1, value2,....) ON DUPLICATE KEY UPDATE update_statement;
示例
假设我们创建了一个名为 empData 的表,并将 ID 列声明为 UNIQUE,如下所示:
CREATE TABLE empData ( ID INT UNIQUE, Name VARCHAR(15), email VARCHAR(15), salary INT );
以下查询使用 update 子句将记录插入上述表:
INSERT INTO empData VALUES (1, 'Raja', '[email protected]', 2215) ON DUPLICATE KEY UPDATE salary = salary+ salary;
插入操作之后,empData 表的内容将如下所示:
SELECT * FROM empData;
输出
以下是上述 MySQL 查询的结果:
ID | 姓名 | 邮箱 | 薪资 |
---|---|---|---|
1 | Raja | [email protected] | 2215 |
如果您再次执行上述语句,由于 ID 值为 1 的记录已存在,则不会插入新记录,而是在现有薪资的基础上添加语句中的薪资值。
INSERT INTO empData VALUES (1, 'Raja', '[email protected]', 2215) ON DUPLICATE KEY UPDATE salary = salary+ salary;
插入操作之后,empData 表的内容将如下所示:
SELECT * FROM empData;
输出
上述查询生成以下输出:
ID | 姓名 | 邮箱 | 薪资 |
---|---|---|---|
1 | Raja | [email protected] | 4430 |