Mysql复合主键中自增长字段

Google Analytics的ID一般形如:UA-18xxxxx-1,UA-18xxxxx-4, 我们可以将它分成两段来看:字段1:UA-18XXXXX是指帐户的ID;字段2:字段1后附加的1、4,刚分别是指该帐户名下的两个网站。有一段时间很 纠结这样的ID怎么去维护,直到最近查阅到Mysql手册才发现,原来Mysql原生就很好的支持了这种含自动增长字段的复合主键,所以字段2是存储引擎 自动计算出来的。计算方式:MAX(auto_increment_column) + 1 WHERE prefix=given-prefix [1]

不多说,直接看SQL:

mysql> CREATE TABLE `_test` (
    -> `c1` varchar(20) NOT NULL DEFAULT ‘‘, -- 主键一:varchar
    -> `c2` int(11) NOT NULL AUTO_INCREMENT, -- 主键二:自增序列
    -> `c3` varchar(255) ,
    -> PRIMARY KEY (`c1`,`c2`) -- 注意这里的先后顺序
    -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.04 sec)

mysql>
mysql> INSERT INTO `_test` (`c1`,`c3`) VALUES (‘AAA‘,‘Robin Home‘),
    -> (‘AAA‘,‘Robin Blog‘),
    -> (‘AAA‘,‘Robin Resume‘),
    -> (‘BBB‘,‘Lily Home‘),
    -> (‘BBB‘,‘Lily Blog‘);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql>
mysql> SELECT * FROM `_test`;
+-----+----+--------------+
| c1  | c2 | c3           |
+-----+----+--------------+
| AAA |  1 | Robin Home   |
| AAA |  2 | Robin Blog   |
| AAA |  3 | Robin Resume |
| BBB |  1 | Lily Home    |
| BBB |  2 | Lily Blog    |
+-----+----+--------------+
5 rows in set (0.00 sec)

mysql>

值得注意的是,MySQL的这种特性只适用于MyISAM和BDB引擎。

时间: 2024-10-12 20:45:12

Mysql复合主键中自增长字段的相关文章

解决MySQL复合主键下ON DUPLICATE KEY UPDATE语句失效问题

先描述一下这个问题的起因,假设有一张表,里面保存了交易订单,每张订单有唯一的ID,有最后更新时间,还有数据,详情如下: +-------+----------+------+-----+---------------------+-------+ | Field | Type     | Null | Key | Default             | Extra | +-------+----------+------+-----+---------------------+-------

MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结

1,为当前已有的表添加新的字段 alter table student add studentName varchar(20) not null; 2,为当前已有的表中的字段设置为主键自增 alter table student add constraint PK_studentId primaryKey(studentId); 3,为当前已有的表中的字段设置为外键 alter table student add constraint FK_teacherId_studentInfo forei

mysql数据库基础(2)索引、主键、复合主键、外键

增.删.改.查 加""表示为普通字符 mysql> insert into  t9 values("NULL",21,"game,flim"); +++++++++++++++++++++++++++++++ 添加新字段 mysql> alter table  t4 add age int(2) default 19;        //默认在最后面 mysql> alter table  t4 add mail char(50

MySQL数据库8(九)列属性之主键、自增长

主键 顾名思义,主要的键,primary key,在一张表中,有且只有一个字段,里面的值具有唯一性 创建主键 随表创建 系统提供了两种增加主键的方式: 1.直接在需要当做主键的字段之后,增加primary key属性来确定主键 2.在所有字段之后增加primary key选项:primary key(字段信息) 表后增加 基本语法:alter table 表名 add primary key(字段); 查看主键 方案1: 查看表结构 方案2:查看表的创建语句 删除主键 基本语法:alter ta

mysql把主键定义为自动增长标识符类型

分享下mysql中如何把主键定义为自动增长标识符类型. 1.把主键定义为自动增长标识符类型在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id int auto_increment primary key notnull, name varchar(15)); insert into customers(name) values("name1"),("name2");

mysql设置主键自动增长

创建数据库,创建表. Sql代码   mysql> create database ssh2; Query OK, 1 row affected (0.04 sec) mysql> use ssh2; Database changed mysql> create table user( -> id integer primary key, -> firstname varchar(200) not null, -> lastname varchar(200) not n

mysql非主键自增长

mysql并非只有主键才能自增长,而是设为键的列就可以设置自增长. 如下: 1 2 3 4 CREATE TABLE t1 (     id INT,     col1 INT auto_increment NOT NULL ); 结果如下: 如果把col1列设为键,就可以创建自增. 1 2 3 4 5 CREATE TABLE t1 (     id INT,     col1 INT auto_increment NOT NULL,     key(col1) ); 结果如下: 如果我们把i

Laravel中定义复合主键

laravel默认主键是id,但有的时候我们建表时可能会需要用到复合主键,那么laravel中使用Eloquent Medel如何定义复合主键呢?直接上代码. 首先在app目录先创建文件 Traits/HasCompositePrimaryKey 内容如下: // Adjust this to match your model namespace! namespace App\Traits; use Illuminate\Database\Eloquent\Builder; trait HasC

mysql数据库单表只有一个主键自增id字段,ibatis实现id自增

mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid">        insert into user_id values(null)        <selectKey resultClass="int">SELECT @@IDENTITY As id</selectKey>    </insert>