Mysql的联合主键

mysql的联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。

在mysql当中我们经常认为主键只能设置一个,那如果我们想设置两个呢?如下图:

CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` varchar(25) DEFAULT NULL,
`sess_id` varchar(255) DEFAULT NULL,
`keyword` varchar(25) NOT NULL,
`url_n` varchar(3) DEFAULT NULL,
`s_n` varchar(3) DEFAULT NULL,
`select_url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`,`keyword`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

那这样的话我们就创建了这个联合主键id和keyword  。但是需要注意的是引擎必须是Myisam。这个是联合主键的创建,那删除呢?

删除也是非常简单只要:

ALTER TABLE test DROP PRIMARY KEY ,ADD PRIMARY KEY (`id`);

如果你仅仅是删除联合主键会报错:


ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
时间: 2024-11-01 07:05:33

Mysql的联合主键的相关文章

mysql auto_increment 与 联合主键冲突问题

mysql 5.5之前,auto_increment字段必须为主键,有的时候,这种自增字段,并没有多大的实际意义,而我们需要多个字段组成主键. 例如: 用户只能对购买的商品,进行一次评价,评价的自增ID,没什么用处,用户的ID和商品ID组成的联合主键,意义就大的多了.如果想保留auto_increment字段,就要使用高版本的mysql了. mysql> ALTER TABLE `order` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `user_id` , `or

Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/Annotation) 联合主键 一对一单向外键联合主键(Xml/Annotation) 一对一组件关联(XML/Annotation) 理解组件 领域驱动设计--自动生成数据库脚本 一对一关系的小结 一些出错问题的总结   自动生成数据库脚本 一般在项目开发过程中,我们的习惯是先建好数据库和表,然后

【HIBERNATE框架开发之四】HIBERNATE-ANNOTATION常用的注解归总&&ID的生成策略&&联合主键

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/811.html 这篇主要讲解Hibernate中Annotation的常用注解和ID的生成策略以及联合主键三块:     首先介绍些常用的Annotation注解: 1.  当表名与类名不一致: @Table(name="数据库表名")        (javax.persistence)      如果类名与

duplicate-mysql存储过程报错,报的联合主键约束错误

问题描述 mysql存储过程报错,报的联合主键约束错误 Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '5RgwDTn5zeAoPM1yXxeRkm-YUseiccsUNQxcQeBPK3Td3' for key 'PRIMARY' ### The error may involve defaul

(论坛答疑点滴)联合主键的情况怎么在DataGrid中利用DataKeys定位记录?

datagrid   比如表中三个字段 key1 int,key2 int,item varchar(50) 前面2个字段联合主键 前台代码: <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" DataKeyField="DoubleKey">                 <Columns>        

MySQL添加删除主键的方法

  mysql添加删除主键操作是非常基本的操作,下面就将教您mysql添加删除主键的方法,如果您是刚刚接触mysql数据库的新人,不妨一看. 修改mysql的字符集: 在安装mysql5.0时可以设置好mysql的字符集,一般使用utf8的字符集 1.查看建立表"tablename"的sql语句 Show create table tablename;//查看建立表"tablename"的sql语句 | maos_mail_batch | CREATE TABLE

Hibernate为什么不推荐使用联合主键

问题描述 Hibernate为什么不推荐使用联合主键 Hibernate为什么不推荐使用联合主键,能说明一下原因吗?谢谢! 解决方案 读取的性能比较差,O/R Mapping都是以主键的方式来识别纪录的,单一主键已经能够满足应用,而且速度快,所以会值得推荐 解决方案二: 如果当你使用无意义的逻辑主键的时候,主键的维护完全是由Hibernate自动进行的,你无须关注主键的维护,自然就避免了很多问题的产生:而如果你选择自己手工维护主键(联合主键就必须手工维护),所有的这些维护主键的重任都必须由你来负

mybatis+mysql 一表主键自增, 插入数据,怎么返回主键

问题描述 mybatis+mysql 一表主键自增, 插入数据,怎么返回主键 mybatis+mysql 一表主键自增, 插入数据,怎么返回主键.很多人说的都是返回了插入的行数 解决方案 <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id"> insert into person(name,pswd)

mybatis数据表(mysql)的主键非自增长,如何插入数据(需插入主键)实现主键自增长?

问题描述 mybatis数据表(mysql)的主键非自增长,如何插入数据(需插入主键)实现主键自增长? 举例来说就是有表person,person有id(mysql数据库,主键,非自增),和name,pswd三个字段.如果是自增的情况,我们通常是这样处理 insert into person(name,pswd) values(#{name},#{pswd}) 这种情况不许要插入主键,因为person表主键是自增长的.但如果主键不是增长的情况呢?如何处理.主键不是自增长就应该必须插入主键. 在步