MySQL_插入

SQL操作指南:INSERT INTO与REPLACE INTO的用法解析

一、 INSERT INTO

第一种方法:

INSERT INTO table_name  (field1, field2,...fieldN)  VALUES  (valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN),(valueC1,valueC2,...valueCN)......;

(1)列出列名 

insert into exam_record (uid,exam_id,start_time,submit_time,score)
values (1001,9001,'2021-09-01 22:11:12', '2021-09-01 22:11:12'+ INTERVAL 50 minute,90),
(1002,9002,'2021-09-04 07:01:02',null,null);

(2)按原表中的顺序插入值,空值填null 

INSERT INTO exam_record 
VALUES (null , 1001, 9001, '2021-09-01 22:11:12', '2021-09-01 22:11:12'+ INTERVAL 50 minute, 90),
(null , 1002, 9002, '2021-09-04 07:01:02', null, null);

备注:Mysql_interval函数与关键字_lcx1252267029的博客-优快云博客 

 第二种方法:

INSERT INTO table_name (field1, field2,...fieldN) SELECT  (field1, field2,...fieldN) FROM table_name  WHERE ……;

(1)列出列名  

INSERT INTO exam_record_before_2021 (uid, exam_id, start_time, submit_time, score)
SELECT uid, exam_id, start_time, submit_time, score
FROM exam_record 
WHERE submit_time < '2021-01-01';

(2)用null列名 代替 自增列

INSERT INTO exam_record_before_2021
SELECT null,uid,exam_id,start_time,submit_time,score 
FROM exam_record 
WHERE year(submit_time) < 2021

注:select null 返回的列名和值为NULL 

  第三种方法:

 INSERT INTO table_name SET field1=valueA1, field2=valueA2,field3=valueA3...

二、REPLACE INTO

replace into 也是有三种形式:

1. replace into tbl_name(col_name, ...) values(...)

2. replace into tbl_name(col_name, ...) select ...

3. replace into tbl_name set col_name=value, ...

第一种形式类似于insert into的用法, 但是replace into的特殊之处在于当使用replace into插入数据时,会先判断表中是否有重复元素 如果有重复元素,先将重复元素删除,然后插入新的元素 如果没有则直接插入 replace into语句所作用的表一定有主键

第二种replace select的用法也类似于insert select,这两种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;?这个例子使用replace into从?tb2中将所有数据导入tb1中。

第三种replace set用法类似于update set用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。

在C++中使用 MySQL 进行插入数据操作后,`mysql_store_result` 函数通常用于从服务器获取查询结果集。不过插入操作(如 `INSERT` 语句)一般不会返回结果集,因为它主要是对数据库进行数据添加,而非查询数据,所以在插入操作后调用 `mysql_store_result` 通常会返回 `NULL`。 以下是一个示例代码,展示了在 C++ 中使用 MySQL 进行插入操作以及 `mysql_store_result` 函数的使用: ```cpp #include <mysql/mysql.h> #include <iostream> int main() { MYSQL *con = mysql_init(NULL); if (con == NULL) { std::cerr << "mysql_init() failed" << std::endl; return 1; } if (mysql_real_connect(con, "localhost", "user", "password", "database", 3306, NULL, 0) == NULL) { std::cerr << "mysql_real_connect() failed: " << mysql_error(con) << std::endl; mysql_close(con); return 1; } // 设置字符集 mysql_options(con, MYSQL_SET_CHARSET_NAME, "utf8"); // 执行插入操作 if (mysql_query(con, "INSERT INTO student (name, age) VALUES ('John', 20)") != 0) { std::cerr << "mysql_query() failed: " << mysql_error(con) << std::endl; mysql_close(con); return 1; } // 尝试调用 mysql_store_result MYSQL_RES *result = mysql_store_result(con); if (result == NULL) { if (mysql_field_count(con) == 0) { std::cout << "No result set expected for INSERT operation." << std::endl; } else { std::cerr << "mysql_store_result() failed: " << mysql_error(con) << std::endl; } } else { // 这里通常不会执行,因为插入操作没有结果集 std::cout << "Unexpected result set for INSERT operation." << std::endl; mysql_free_result(result); } mysql_close(con); return 0; } ``` 在上述代码中,首先初始化 MySQL 连接,然后执行插入操作。接着调用 `mysql_store_result` 尝试获取结果集,如果返回 `NULL`,通过 `mysql_field_count` 判断是否是因为插入操作本身不需要结果集导致的。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值