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

कॉलम में डिफ़ॉल्ट मान (अभिव्यक्ति) के साथ MYSQL तालिका निर्माण

जैसे स्कीमा के बारे में क्या है

CREATE TABLE employee
(
employeeid INT PRIMARY KEY AUTO_INCREMENT,
firstname varchar(255)
);

CREATE INDEX part_of_firstname ON employee (firstname(4));

इससे आप अपनी प्राकृतिक प्राथमिक कुंजी का उपयोग करके काफी तेज़ी से लुकअप कर पाएंगे, साथ ही आपको कृत्रिम प्राथमिक कुंजी भी देंगे और असामान्य करने के लिए बाध्य नहीं करेंगे।

EXPLAIN SELECT * FROM EMPLOYEE WHERE EMPLOYEEID = 1 AND FIRSTNAME LIKE 'john%';

+----+-------------+----------+-------+---------------------------+---------+---------+-------+------+-------+
| id | select_type | table    | type  | possible_keys             | key     | key_len | ref   | rows | Extra |
+----+-------------+----------+-------+---------------------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | employee | const | PRIMARY,part_of_firstname | PRIMARY | 4       | const |    1 |       |
+----+-------------+----------+-------+---------------------------+---------+---------+-------+------+-------+

बेशक चूंकि प्राथमिक कुंजी का 0001 भाग उपयोगकर्ता की पहचान करने के लिए पर्याप्त अद्वितीय है, इसलिए आपको नाम से बिल्कुल भी पूछताछ करने की आवश्यकता नहीं है।

यदि आप पूर्व-गणना करने पर जोर देते हैं तो यह काम करना चाहिए

CREATE TABLE employee
(
employeeid INT PRIMARY KEY AUTO_INCREMENT,
specialid VARCHAR(255),
firstname VARCHAR(255)
);

CREATE INDEX employee_specialid ON employee (firstname(4));

DELIMITER ;;
CREATE TRIGGER employeeid_trigger BEFORE insert ON employee
FOR EACH ROW
BEGIN
SET new.specialid = CONCAT(LPAD((SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'employee'), 4, '0'), SUBSTRING(new.firstname, 1, 4));
END
;;
DELIMITER ;

इसका परीक्षण करना:

mysql> insert into employee (firstname) values ('johnathan');
Query OK, 1 row affected (0.04 sec)

mysql> insert into employee (firstname) values ('johnathan');
Query OK, 1 row affected (0.02 sec)

mysql> insert into employee (firstname) values ('johnathan');
Query OK, 1 row affected (0.02 sec)

mysql> select * from employee;
+------------+-----------+-----------+
| employeeid | specialid | firstname |
+------------+-----------+-----------+
|          1 | 0001john  | johnathan |
|          2 | 0002john  | johnathan |
|          3 | 0003john  | johnathan |
+------------+-----------+-----------+
3 rows in set (0.00 sec)

यह एक तरह का हैक है, और कुछ ऐसे डीबी पर info_schema उपलब्ध नहीं होगा जहां अनुमतियां आपके नियंत्रण में नहीं हैं।



  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. ऑब्जेक्ट डालने का सबसे तेज़ तरीका अगर यह SQLAlchemy के साथ मौजूद नहीं है

  3. MySQL:दिनांक के साथ बाधा की जाँच करें

  4. MySQL में 2 तिथियों के बीच रिकॉर्ड कैसे प्राप्त करें

  5. एक विदेशी कुंजी विवश तालिका को कैसे छोटा करें?