it-swarm.dev

كيف تجعل جدول MySQL الأساسي زيادة تلقائية مع بعض البادئة

لدي جدول مثل هذا

table
id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30) NOT NULL,

أريد زيادة حقل معرف الهوية الخاص بي مثل 'LHPL001','LHPL002','LHPL003'... إلخ. ماذا علي أن أفعل لذلك؟ واسمحوا لي أن أعرف أي وسيلة ممكنة.

63
Vijay

إذا كنت تحتاج حقًا إلى هذا ، يمكنك تحقيق هدفك بمساعدة جدول منفصل للتسلسل (إذا كنت لا تمانع) ومشغل.

الجداول

CREATE TABLE table1_seq
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE table1
(
  id VARCHAR(7) NOT NULL PRIMARY KEY DEFAULT '0', name VARCHAR(30)
);

الآن الزناد

DELIMITER $$
CREATE TRIGGER tg_table1_insert
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
  INSERT INTO table1_seq VALUES (NULL);
  SET NEW.id = CONCAT('LHPL', LPAD(LAST_INSERT_ID(), 3, '0'));
END$$
DELIMITER ;

ثم يمكنك فقط إدراج صفوف إلى table1

INSERT INTO Table1 (name) 
VALUES ('Jhon'), ('Mark');

وسيكون لديك

 | معرف | NAME | 
 ------------------ 
 | LHPL001 | جون | 
 | LHPL002 | مارك | 

هنا هوSQLFiddledemo

107
peterm

قم بإنشاء جدول بمعرف داخلي تلقائي تلقائي ، ولكن قم بتعريفه بـ ZEROFILL ، أو استخدم LPAD لإضافة أصفار عند التحديد. ثم CONCAT القيم للحصول على سلوكك المقصود. مثال 1:

create table so (
 id int(3) unsigned zerofill not null auto_increment primary key,
 name varchar(30) not null
);

insert into so set name = 'John';
insert into so set name = 'Mark';

select concat('LHPL', id) as id, name from so;
+---------+------+
| id      | name |
+---------+------+
| LHPL001 | John |
| LHPL002 | Mark |
+---------+------+

مثال رقم 2:

create table so (
 id int unsigned not null auto_increment primary key,
 name varchar(30) not null
);

insert into so set name = 'John';
insert into so set name = 'Mark';

select concat('LHPL', LPAD(id, 3, 0)) as id, name from so;
+---------+------+
| id      | name |
+---------+------+
| LHPL001 | John |
| LHPL002 | Mark |
+---------+------+
15
Fluffy

أعلم أن الوقت قد تأخر ولكنني أريد فقط مشاركة ما قمت به من أجل هذا. لا يُسمح لي بإضافة جدول أو مشغل آخر ، لذا أحتاج إلى إنشاءه في استعلام واحد عند الإدراج. لحالتك ، يمكنك تجربة هذا الاستعلام.

CREATE TABLE YOURTABLE(
IDNUMBER VARCHAR(7) NOT NULL PRIMARY KEY,
ENAME VARCHAR(30) not null
);

قم بإجراء تحديد واستخدم استعلام تحديد هذا وحفظه إلى المعلمةIDNUMBER

(SELECT IFNULL
     (CONCAT('LHPL',LPAD(
       (SUBSTRING_INDEX
        (MAX(`IDNUMBER`), 'LHPL',-1) + 1), 5, '0')), 'LHPL001')
    AS 'IDNUMBER' FROM YOURTABLE ORDER BY `IDNUMBER` ASC)

وبعد ذلك سيكون الاستعلام إدراج:

INSERT INTO YOURTABLE(IDNUMBER, ENAME) VALUES 
(@IDNUMBER, 'EMPLOYEE NAME');

ستكون النتيجة هي نفس الإجابة الأخرى ، لكن الفرق هو أنك لن تحتاج إلى إنشاء جدول أو مشغل آخر. آمل أن أتمكن من مساعدة شخص ما لديه نفس حالتي.

3
yhAm