MySQL手册说明:
如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值
如果您的表没有UNIQUE索引或PRIMARY KEY,但您不想复制列的条目(例如user_id),该怎么办?
有没有办法在MySQL中做到这一点?
package main
import (
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.New()
router.Use(gin.Logger())
router.Use(gin.Recovery())
db, err := sql.Open("mysql", "root:password@tcp(gpstest.cksiqniek8yk.ap-south-1.rds.amazonaws.com:3306)/tech")
if err != nil {
fmt.Print(err.Error())
}
err = db.Ping()
if err != nil {
fmt.Print(err.Error())
}
rows, err := db.Query("select sum(usercount) as usercount from ( select count(*) as usercount from category where name = 'construction' union all select count(*) as usercount from sub_category where name = 'construction' union all select count(*) as usercount from industry where name = …
Run Code Online (Sandbox Code Playgroud) 我如何更改我的MySQL语句,以便只有在table_b中属性的id不存在时才将一行插入table_b?
INSERT INTO table_b( property_id, siteaddress, area_name, result)
SELECT property_id, siteaddress, "Area A" AS area_name, IS_POINT_IN_POLYGON(
POINTFROMTEXT( CONCAT( 'POINT(', latitude, ' ', longitude, ')' ) ) , POLYFROMTEXT( 'POLYGON((44.933690000000006, -111.07178
44.96479, -104.1504
41.062780000000004, -104.04053
41.01306, -111.07178
44.887010000000004, -111.04981000000001
))' )
)AS result
FROM table_a
WHERE IS_POINT_IN_POLYGON(
POINTFROMTEXT( CONCAT( 'POINT(', latitude, ' ', longitude, ')' ) ) , POLYFROMTEXT( 'POLYGON((44.933690000000006, -111.07178
44.96479, -104.1504
41.062780000000004, -104.04053
41.01306, -111.07178
44.887010000000004, -111.04981000000001 ))' )
) = 1;
INSERT INTO table_b( property_id, siteaddress, area_name, result) …
Run Code Online (Sandbox Code Playgroud) 我习惯在sql server中这样做
IF (SELECT COUNT(*) FROM table WHERE column1=@value1) = 0
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)
Run Code Online (Sandbox Code Playgroud)
但我无法真正让它在MySql中工作.请帮忙 :)
----------------编辑------------------
我想,不应该有太多的大惊小怪或魔法.
If an e-mail does not exist in a table then insert several values into that table.
Run Code Online (Sandbox Code Playgroud)
而已.优选地是一个衬垫,嵌入编程代码中.
如果在这种情况下存在其他插入,则 UPDATE 的正确格式是什么 - 我已经设法分别进行更新和插入,但需要将它们一起使用?。
我想要的是 - 如果日期存在,那么它会更新为全天,如果它不存在,那么会插入一个包含新详细信息的新行。
$date = (isset($_POST['date']) ? $_POST['date'] : null);
$reservationType = (isset($_POST['reservation-type']) ? $_POST['reservation-type'] : null);
$connect = new mysqli($servername, $username, $password, $dbname);
// check connection
if ($connect->connect_error) {
die("connection failed: ". $connect->connect_error);
}
$sql = "SELECT * FROM reservations";
$result = $connect->query($sql);
if ($result -> num_rows > 0) {
while ($row = $result->fetch_assoc()) {
if ($date == $row['date_of_reservation']) {
"UPDATE reservations SET reservationType = 'FULLDAY' WHERE date_of_reservation='$date'";
}
else {
"INSERT INTO reservations …
Run Code Online (Sandbox Code Playgroud) 我每天从外部服务器收到一个MySQL转储文件.sql,我没有任何控制权.我创建了一个本地数据库来存储.sql文件中的所有数据.我希望我可以设置一个脚本来自动每天更新我的本地数据库.我每天收到的sql文件包含本地数据库中的旧数据.如何避免重复此类旧数据并仅插入本地MySQL服务器的新数据?非常感谢你!
所以,我正在编写一个SQL查询,就像你一样,我偶然发现了一个问题.我想要做的是每次唯一用户访问某个页面时在数据库中触发查询.唯一性是通过session_id()完成的,因为它通常非常可靠.
我想要的是一个SQL查询,它将一行数据插入两列,但只有这两列不具有相同的值.
如果用户x
访问了名为的页面page1
,那么在数据库中,它将记录如下所示:
+------------+---------+
| page_name | user_id |
+------------+---------+
| page1 | x |
+------------+---------+
Run Code Online (Sandbox Code Playgroud)
我将如何编写一个检查表的查询,以查看插入的数据是否重复?
我当前的查询如下(它只是一个标准的插入查询):
INSERT INTO `page_views` (`page_name`, `user_id`) VALUES ('.$pageName.', \''.session_id().'\')
Run Code Online (Sandbox Code Playgroud) 我从JSON对象获取一个字符串数组.我想将这些字符串保存在数据库中,但前提是它们尚未存在.比较DB中已有的内容与我即将输入的内容并排除匹配的最佳方法是什么?
我正在使用PHP和MySQL.
当有人访问我的网站时,我想记录用户ip,但是当你到达网站时,表可能不存在,所以UPDATE查询给我一个错误.我还需要检查现有的表格.我试过:阅读,但似乎没有人能够解决这个问题,如果表格不存在的话.这可能是一个错字.
$db->query("INSERT INTO track (tm, user_agent, host, ip, port, lang) VALUES ('$tm','$user_agent','$host','$ip','$port','$lang') WHERE NOT EXISTS (
SELECT ip FROM track WHERE ip='$ip'");
Run Code Online (Sandbox Code Playgroud) 如果product_id的ip_address不存在但我最好不要创建两个单独的查询,我想插入到同一个表中.我怎样才能实现它?
以下是样本表:
id | product_id | ip_address |
------------------------------
a 11112 8.8.8.8
b 11234 9.9.9.9
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的,但它不起作用.
INSERT INTO `'._DB_PREFIX_.'views`
(SELECT '.$id_product.',"'.$ip_addr.'"
FROM `'._DB_PREFIX_.'views`
WHERE NOT EXISTS (SELECT * FROM
`'._DB_PREFIX_.'views` v WHERE v.id_product ='.$id_product.' AND
t.ip_address ="'.$ip_addr.'"
))'
Run Code Online (Sandbox Code Playgroud) 我开始使用谷歌搜索,发现这篇文章讨论了互斥表.
我有一张约有1400万条记录的表格.如果我想以相同的格式添加更多数据,有没有办法确保我想要插入的记录不存在而不使用一对查询(即,一个查询要检查,一个要插入是结果集是空)?
对字段的唯一约束是否保证插入如果已经存在则会失败?
似乎只有一个约束,当我通过php发出插入时,脚本呱呱叫.
我要添加一个新区域,我想检查用户插入的名称是否已经存在于Areas表中。
我尝试使用select检查数据,但是当我将包含插入内容的if语句嵌套在while循环中时,没有任何反应,也没有错误,也没有输出。
$campus_area_name = mysqli_real_escape_string($conn, $_POST["campus_area_fk"]);
$area_name = mysqli_real_escape_string($conn, $_POST["area_name"]);
$query_names = "SELECT name FROM areas WHERE idCampus = '".$campus_area_name."'";
$name_result = mysqli_query($conn, $query_names);
while ($row = mysqli_fetch_array($name_result)) {
if($row["name"] == $area_name){
echo "Area Name Already Exists";
} else {
$query = "INSERT INTO areas(name, idCampus) VALUES ('".$area_name."', '".$campus_area_name."')";
if (mysqli_query($conn, $query)){
$last_id = $conn->insert_id;
$query_retrieve = "SELECT idareas, name FROM areas WHERE idareas = '".$last_id."'";
$my_result = mysqli_query($conn, $query_retrieve);
while ($rows = mysqli_fetch_array($my_result)) {
$output["area_name_retrieve"] = $rows["name"];
$output["area_id_retrieve"] = …
Run Code Online (Sandbox Code Playgroud) mysql ×11
php ×6
sql ×4
database ×2
mysqli ×2
duplicates ×1
go ×1
if-statement ×1
indexing ×1
insert ×1
json ×1
primary-key ×1
select ×1
subquery ×1
unique-key ×1