使用autoincrement(string,int)在Mysql数据库中设置PK

时间:2014-03-04 07:47:00

标签: mysql

我想要一个带有(string,int)格式的复合主键,其中字符串是默认值,int设置为autoincrement。是否有可能实现这一目标。我需要以下格式

   TC_01
   TC_02
   TC_03
   .
   .
   .

等等

3 个答案:

答案 0 :(得分:1)

由于在插入表格之前标识了自动递增的值,您最好依赖于表格上的插入触发器

要设置TC_002等格式的连接字符串,您需要在触发器主体中执行以下步骤。

如果您的str_field定义为default 'TC',那么请说明

FOR EACH ROW BEGIN
  SET NEW.str_field = concat( NEW.str_field, '_', NEW.auto_int_field );
END;

注意

  • 如果您输入了特定值,则用于 串联。
  • 如果str_field允许null并且您尚未定义默认值 值,你没有为插入输入相同的值, concat( NEW.str_field, ...会产生NULL

您可以在unique keystr_field主键字段上定义复合auto_int_field

Constraint UK_CMP unique key ( str_field, auto_int_field )

编辑

  

当我使用此触发器时,在所有行中将str_field作为TC_0。但我应该得到TC_1,TC_2等。

你需要一个这样的例子:

mysql> drop table if exists cmp_pk;
Query OK, 0 rows affected (0.22 sec)

mysql> create table cmp_pk(
    ->   str varchar(10) not null unique default 'TC_',
    ->   id int not null auto_increment primary key,
    ->   constraint uk_cmp unique key( str, id )
    -> );
Query OK, 0 rows affected (0.65 sec)

mysql>
mysql> drop trigger if exists bi_cmp_pk;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> delimiter //
mysql> create trigger bi_cmp_pk before insert on cmp_pk
    -> for each row begin
    ->   SET @NEW_ID := ( SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES
    ->            WHERE TABLE_NAME='cmp_pk' AND TABLE_SCHEMA=DATABASE() );
    ->   SET NEW.str = concat( NEW.str, @NEW_ID );
    -> end;
    -> //
Query OK, 0 rows affected (0.07 sec)

mysql> delimiter ;
mysql>
mysql> insert into cmp_pk values();
Query OK, 1 row affected (0.06 sec)

mysql> select * from cmp_pk;
+------+----+
| str  | id |
+------+----+
| TC_1 |  1 |
+------+----+
1 row in set (0.00 sec)

mysql>
mysql> insert into cmp_pk values();
Query OK, 1 row affected (0.06 sec)

mysql> select * from cmp_pk;
+------+----+
| str  | id |
+------+----+
| TC_1 |  1 |
| TC_2 |  2 |
+------+----+

答案 1 :(得分:1)

DELIMITER $$
CREATE TRIGGER  bi_cmp_pk
BEFORE INSERT ON cmp_pk
FOR EACH ROW BEGIN
SET @NEW_ID := ( SELECT last_insert_id()+1 from cmp_pk limit 1 );
SET NEW.str = concat( NEW.str, @NEW_ID );
end;
$$ DELIMITER ;

此触发器应解决您的问题

答案 2 :(得分:0)

实际上我不知道你究竟想要什么,但是这段代码可以帮助你

CREATE TABLE tbl_name (
col1 varchar(255) DEFAULT 'TC_',
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (col1,id));