Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मौजूदा विदेशी कुंजी में अद्वितीय जोड़ना

मैं जाते ही इसमें सुधार करूंगा। MySQL आपकी इच्छाओं का सम्मान करेगा, यहां तक ​​कि आपको जाते ही अपने आप को पैर में गोली मारने की अनुमति देगा:

create table t9
(
    id int auto_increment primary key,
    thing varchar(20) not null,
    key(thing),
    unique key (thing),
    unique key `yet_another` (thing)
);
-- warning 1831 dupe index
show create table t9;
CREATE TABLE `t9` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `thing` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `thing_2` (`thing`),
   UNIQUE KEY `yet_another` (`thing`),
   KEY `thing` (`thing`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

तो उन सभी सामानों को देखें जिन्हें आपको अपने अप्सर्ट्स के साथ ले जाना है (पढ़ें:अतिरिक्त अनावश्यक इंडेक्स धीमा करें)।

इसलिए यदि आप इसे जितना संभव हो उतना दुबला चाहते हैं, जैसा कि मैंने टिप्पणियों में उल्लेख किया है, तो पहले एफके को चाइल्ड टेबल, संदर्भ में छोड़कर चीजों को खोल दें। पहला। देखें यह उत्तर

फिर वर्तमान गैर-अद्वितीय मूल कुंजी छोड़ें:

DROP INDEX index_name ON tbl_name;

फिर माता-पिता में अद्वितीय कुंजी जोड़ें। यह नया संदर्भित है :

CREATE UNIQUE INDEX idxName ON tbl_name (colName);

फिर बच्चों में FK जोड़ें (संदर्भ )

CREATE INDEX idxName ON child_tbl_name (colName);

आप show create table theTableName . द्वारा प्रमुख नाम प्राप्त कर सकते हैं या SHOW INDEX द्वारा . नए नामों के लिए नए नामों का प्रयोग करें, इससे कोई फर्क नहीं पड़ता।

जैसे:

mysql> show index from t9;
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t9    |          0 | PRIMARY     |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| t9    |          0 | thing_2     |            1 | thing       | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| t9    |          0 | yet_another |            1 | thing       | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| t9    |          1 | thing       |            1 | thing       | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql, कॉलम नामों के माध्यम से पुनरावृति

  2. SSH रिमोट टनलिंग में MYSQL ERROR 2003 (HY000) (113), लेकिन SSH टनल से टेलनेट काम करता है

  3. MySQL html डेटा या PHP से प्लेनटेक्स्ट निकालें?

  4. आईएन क्लॉज के साथ सिम्फनी 2.3 कच्ची एसक्यूएल क्वेरी

  5. MySql ने GROUP_CONCAT का उपयोग करके शामिल होने में मानों को डुप्लिकेट किया