如何在数据库中插入一些可能与另一行相同的信息?

时间:2017-04-24 14:16:34

标签: php mysql database duplicates

就像,我有一行包含这个information。隐藏列确定它是否在研究(0)中可见(1)。

我想插入一行与hidden number =1行具有相似信息(特别是同名)的新行。但是现在,如果我插入具有hidden number = 1(如IT-Melanie)的计算机的相同信息,它将只“刷新”那里已有的行,而不是创建一个新行!它有可能创建一个具有相同名称的新行(如IT-Melanie),但可能有一些不同的其他信息要在没有此更新的情况下插入已存在的行吗?这就像我们在数据库中复制一行,但是具有相同的信息。

我在这里找到的唯一想法是在javascript中重复一行,这不是我想要的。我尝试插入多个时间信息,使两行相似但没有成功,只更新了数据库中已存在的行!

回顾:我想插入一台新计算机,该计算机的名称与数据库中已存在的计算机相同,但旧计算机将有一个hidden number = 1,而新计算机将= 0

问题:我们可以在不编辑旧行的情况下使用相同的computer_name放置两行吗?

示例:

旧行:Computer_name = It_melanie           product_number = xxxxx-xxxxxx-xxxxx-xxxxxx-xxxxx            [...]            hidden = 1

新行:Computer_name = It_melanie           product_number = xxxxx-xxxxxx-xxxxx-xxxxxx-xxxxx            [...]            hidden = 0

Unique Key

我的代码

    //Get informations in the form and insert it into db
    $location=$_GET['location'];
    $dept=$_GET['dept'];
    $jack=$_GET['jack'];
    $computername=$_GET['computername'];
    $productkey=$_GET['productkey'];
    $model=$_GET['model'];
    $vendor=$_GET['vendor'];
    $serialnumber=$_GET['serialnumber'];
    $macaddress=$_GET['macaddress'];
    $status=$_GET['status'];
    $starphone=$_GET['starphone'];
    $intid=$_GET['intid'];
    $did=$_GET['did'];
    $software=$_GET['software'];
    $query='insert into department(
    department,
    location_id)values(
    "'.$dept.'",
    "'.$location.'")';
    if(valid_query($query)){
    $message .= "Enregistrement a ete mis a jour<br>";
    }else{
            $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>";
    }
    $query='insert into computer(
    computer_name,
    product_key,
    model,
    serial_number,
    status_id,
    starphone,
    inst_id,
    did,
    macaddress,
    software_id,
    hidden
    )values(
    "'.$computername.'",
    "'.$productkey.'",
    "'.$model.'",
    "'.$serialnumber.'",
    "'.$status.'",
    "'.$starphone.'",
    "'.$intid.'",
    "'.$did.'",
    "'.$macaddress.'",
    "'.$software.'",
    0
    )';
    if(valid_query($query)){
    $message .= "Enregistrement a ete mis a jour<br>";
    }else{
            $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>";
    }
    $query="select dept_id from department where department='$dept' and location_id='$location'";
    $deptid=select_query($query);
    $query="select computer_id from computer where computer_name ='$computername'";
    $computerid=select_query($query);
    $query='insert into jack(
    jack_number,
    dept_id,
    location_id,
    computer_id
    )values(
    "'.$jack.'",
    "'.$deptid.'",
    "'.$location.'",
    "'.$computerid.'")';
    if(valid_query($query)){
    $message .= "Enregistrement a ete mis a jour<br>";
    }else{
            $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>";
    }

    $query='insert into computer_vendor(
    computer_id,
    vendor_id
    )values(
    "'.$computerid.'",
    "'.$vendor.'")';
    if(valid_query($query)){
    $message .= "Enregistrement a ete mis a jour<br>";
    }else{
            $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>";
    }
    $location="";
    $dept="";
    $jack="";
    $computername="";
    $productkey="";
    $model="";
    $vendor="";
    $serialnumber="";
    $macaddress="";
    $status="";
    $starphone="";
    $intid="";
    $did="";

1 个答案:

答案 0 :(得分:0)

首先,确保列computer_name未标记为 UNIQUE
- 要通过终端或cmd或任何shell连接到MySQL,请在表所在的数据库中登录。 (运行mysql -u <mysql_user> -p <db_name>)然后使用DESCRIBE <table_name>;并在值的列中检查 computer_name 的值是 UNI - 这意味着它被标记为 UNIQUE 。示例结果:img
其次,从列中删除 UNIQUE 约束。
- 要做到这一点(当你仍然通过shell连接MySQL并且你仍然在同一个数据库中时)使用ALTER TABLE <table_name> DROP INDEX computer_name;。 第三,检查你是否成功。
- 再次使用DESCRIBE <table_name>;如果 Key 列中仍有值 UNI ,请再次执行步骤2.
祝你好运。