Showing posts with label Mysql. Show all posts
Showing posts with label Mysql. Show all posts

Sunday, August 6, 2017

Prevent Duplicate in Msql

taken from here How to prevent Duplicate records from my table Insert ignore does not work here


alter the table by adding UNIQUE constraint
ALTER TABLE employee ADD CONSTRAINT emp_unique UNIQUE (ename,dno,mgr,sal)
but you can do this if the table employee is empty.
or if records existed, try adding IGNORE
ALTER IGNORE TABLE employee ADD CONSTRAINT emp_unique UNIQUE (ename,dno,mgr,sal)
UPDATE 1
Something went wrong, I guess. You only need to add unique constraint on column ename since eno will always be unique due to AUTO_INCREMENT.
In order to add unique constraint, you need to do some cleanups on your table.
The queries below delete some duplicate records, and alters table by adding unique constraint on column ename.
DELETE a
FROM Employee a
     LEFT JOIN
     (
        SELECT ename, MIN(eno) minEno
        FROM Employee
        GROUP BY ename
     ) b ON a.eno = b.minEno
WHERE b.minEno IS NULL;

ALTER TABLE employee ADD CONSTRAINT emp_unique UNIQUE (ename);
Here's a full demonstration

Thursday, November 29, 2012

Menghindari Duplicate Entry dengan Distinct


MySQL – Menghindari Record Kembar dengan Distinct Posted by Aa on Nov 5, 2012 in MySQL | 0 comments Berhubung ini ada pertanyaan dari salah satu teman murid bimbingan, jadinya harus nulis disini deh biar semuanya bisa membaca dan belajar :) Ehm..bingung neh mau ngasih pendahuluannya seperti apa. Biar lebih jelasnya, yuk langsung praktek aja :) Misalnya kita buat Database dan Tabel baru. Berikut log-nya:
    mysql> create database guru; use guru;
    Query OK, 1 row affected (0.02 sec)

    Database changed
    mysql> create table profilguru(
    -> id int(2) auto_increment primary key,
    -> nama varchar(50) not null,
    -> matpel varchar(30) not null
    -> );
    Query OK, 0 rows affected (0.13 sec)

    mysql> desc profilguru;
    +——–+————-+——+—–+———+—————-+
    | Field | Type | Null | Key | Default | Extra |
    +——–+————-+——+—–+———+—————-+
    | id | int(2) | NO | PRI | NULL | auto_increment |
    | nama | varchar(50) | NO | | NULL | |
    | matpel | varchar(30) | NO | | NULL | |
    +——–+————-+——+—–+———+—————-+
    3 rows in set (0.01 sec)
Oke, jadi table diatas untuk menampung profil guru di sekolah, tapi dibuat lebih simpel saja. Hanya ada kolom id, nama dan mata pelajaran yang dibawanya. Lalu, masalahnya dimana? Oh nanti dulu dunk :p Yuk kita lanjut dengan menginput record-nya. Berikut log-nya:
    mysql> insert into profilguru values(”,’Aa Ezha’,’PHP’);
    Query OK, 1 row affected, 1 warning (0.07 sec)

    mysql> insert into profilguru values(”,’Aa Ezha’,’B.Arab’);
    Query OK, 1 row affected, 1 warning (0.02 sec)

    mysql> insert into profilguru values(”,’Ana Rita Yuli’,’Kebidanan’);
    Query OK, 1 row affected, 1 warning (0.04 sec)

    mysql> insert into profilguru values(”,’Uba Ler’,’Networking’);
    Query OK, 1 row affected, 1 warning (0.03 sec)

    mysql> insert into profilguru values(”,’Deni Mikrocpu’,’Networking’);
    Query OK, 1 row affected, 1 warning (0.04 sec)

    mysql> insert into profilguru values(”,’Deni Mikrocpu’,’Visual Basic’);
    Query OK, 1 row affected, 1 warning (0.04 sec)
Oke, disana terlihat ada beberapa “guru” yang mengajar lebih dari 1 mata pelajaran. Lalu masalahnya adalah, ketika kita ingin memunculkan daftar-daftar guru yang mengajar. Berikut contohnya:
    mysql> select nama from profilguru;
    +—————+
    | nama |
    +—————+
    | Aa Ezha |
    | Aa Ezha |
    | Ana Rita Yuli |
    | Uba Ler |
    | Deni Mikrocpu |
    | Deni Mikrocpu |
    +—————+
    6 rows in set (0.00 sec)
Nah, lihat kan disana jadi namanya dobel-dobel begitu :D Padahal kita kan pengennya..1 guru ya 1kali tampil. Terus, gimana dunk menanggulangi agar recordnya tidak dobel, mengulang atau kembar? Begini neh jadinya :)
    mysql> select distinct nama from profilguru;
    +—————+
    | nama |
    +—————+
    | Aa Ezha |
    | Ana Rita Yuli |
    | Uba Ler |
    | Deni Mikrocpu |
    +—————+
    4 rows in set (0.00 sec)
Yups, hanya ditambahkan query DISTINCT saja setelah SELECT. Jadi fungsi dari query DISTINCT adalah mencegah suatu record yang sama untuk muncul lebih dari 1 kali. Terlihat jelas bedanya ketika menjalankan query SELECT tanpa DISTINCT, bukan? Ehm..mungkin sekian dulu tutorial pendeknya :) Semoga bermanfaat untuk semuanya. di colong dari http://www.aaezha.com/2012/11/mysql-menghindari-record-kembar-dengan-distinct.html