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

क्या MySQL में किसी तालिका के लिए प्राथमिक रूप से प्राथमिक कुंजी बनाने का कोई तरीका है?

नहीं, प्राथमिक कुंजी को टेबल पर परिभाषित करने की आवश्यकता है।

आप इस के बारे में सोच रहे होंगे। , जो InnoDB इंजन पर लागू होता है:

नीचे एक उदाहरण दिया गया है जो बिना प्राथमिक कुंजी और बिना UNIQUE स्तंभ वाली तालिका के लिए इस अनुक्रमणिका के निर्माण को दिखाता है।

# Create the table
create table test.check_table (id int, description varchar(10)) ENGINE = INNODB;

# Verify that there is no primary or unique column
desc test.check_table;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | int(11)     | YES  |     | NULL    |       |
| description | varchar(10) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+


# Insert some values
insert into test.check_table values(1, 'value-1');
insert into test.check_table values(2, 'value-2');
insert into test.check_table values(null, 'value-3');
insert into test.check_table values(4, null);
insert into test.check_table values(1, 'value-1');


# Verify table
select * from test.check_table;
+------+-------------+
| id   | description |
+------+-------------+
|    1 | value-1     |
|    2 | value-2     |
| NULL | value-3     |
|    4 | NULL        |
|    1 | value-1     |
+------+-------------+


# Verify that the GEN_CLUST_INDEX index is auto-created.
select * from INFORMATION_SCHEMA.INNODB_INDEX_STATS where TABLE_SCHEMA='test' and TABLE_NAME = 'check_table';
+--------------+-------------+-----------------+--------+--------------+-------------------+------------------+
| table_schema | table_name  | index_name      | fields | rows_per_key | index_total_pages | index_leaf_pages |
+--------------+-------------+-----------------+--------+--------------+-------------------+------------------+
| test         | check_table | GEN_CLUST_INDEX |      1 | 5            |                 1 |                1 |
+--------------+-------------+-----------------+--------+--------------+-------------------+------------------+

# Duplicate rows are still allowed (Primary Key constraints not enforced)

insert into test.check_table values(1, 'value-1');

select * from test.check_table;
+------+-------------+
| id   | description |
+------+-------------+
|    1 | value-1     |
|    2 | value-2     |
| NULL | value-3     |
|    4 | NULL        |
|    1 | value-1     |
|    5 | value-5     |
|    1 | value-1     |
+------+-------------+

इसके विपरीत, निर्दिष्ट प्राथमिक कुंजी वाली तालिका प्राथमिक नाम के साथ एक अनुक्रमणिका बनाती है।

# Create another table
create table test.check_table_2 (id int, description varchar(10), PRIMARY KEY(id)) ENGINE = INNODB;

# Verify primary key column
desc check_table_2;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | int(11)     | NO   | PRI | 0       |       |
| description | varchar(10) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+

# Verify index
select * from INFORMATION_SCHEMA.INNODB_INDEX_STATS where TABLE_SCHEMA='test' and TABLE_NAME = 'check_table_2';
+--------------+---------------+------------+--------+--------------+-------------------+------------------+
| table_schema | table_name    | index_name | fields | rows_per_key | index_total_pages | index_leaf_pages |
+--------------+---------------+------------+--------+--------------+-------------------+------------------+
| test         | check_table_2 | PRIMARY    |      1 | 0            |                 1 |                1 |
+--------------+---------------+------------+--------+--------------+-------------------+------------------+

# Primary key is enforced
insert into check_table_2 values(1,'value-1');
OK

insert into check_table_2 values(1,'value-1');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में MySQL TIMESTAMP कॉलम के साथ कार्य करना

  2. गलत स्ट्रिंग मान:'\xEF\xBF\xBD' कॉलम के लिए

  3. MySQL - मैक - त्रुटि 2002 - स्थानीय से कनेक्ट नहीं हो सकता ... सॉकेट के माध्यम से

  4. mysql2 मणि ​​गलत mysql क्लाइंट लाइब्रेरी के लिए संकलित है

  5. खराब MySQL डंप आयात करते समय पंक्ति को कैसे छोड़ें