user表,身份证号码要唯一,手机号码,邮箱要唯一
表结构不用动。一个主键Id 加索引实现
如图类型设置索引类型为Unique 唯一 选择栏位,命个名就行。索引方式btree 就好。ok啦~
补充:mysql实现多表主键不重复
同一个数据库中有两张表,里面字段都是一样,只是因为存的数据要区分开。但是主键不能重复。具体实现如下:
CREATE TABLE `user` ( `user_id` INT(11) NOT NULL, `user_name` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, `phone` VARCHAR(255) NOT NULL, PRIMARY KEY (`user_id`) ) COMMENT='用户表' COLLATE='utf8_general_ci' ENGINE=InnoDB;
CREATE TABLE `admin` ( `user_id` INT(11) NOT NULL, `user_name` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, `phone` VARCHAR(255) NOT NULL, PRIMARY KEY (`user_id`) ) COMMENT='管理员表' COLLATE='utf8_general_ci' ENGINE=InnoDB;
新建序列表:
CREATE TABLE `sequence` ( `seq_name` VARCHAR(50) NOT NULL, `current_val` INT(11) NOT NULL, `increment_val` INT(11) NOT NULL DEFAULT '1', PRIMARY KEY (`seq_name`) ) COMMENT='序列表' COLLATE='utf8_general_ci' ENGINE=InnoDB;
新增一个序列:
INSERT INTO sequence VALUES ('seq_test', '0', '1');
创建currval函数,用于获取序列当前值:
delimiter # create function currval(v_seq_name VARCHAR(50)) returns integer(11) begin declare value integer; set value = 0; select current_val into value from sequence where seq_name = v_seq_name; return value; end;
查询当前值:
select currval('seq_test');
创建nextval函数,用于获取序列下一个值:
delimiter # create function nextval (v_seq_name VARCHAR(50)) returns integer(11) begin update sequence set current_val = current_val + increment_val where seq_name = v_seq_name; return currval(v_seq_name); end;
查询下一个值
select nextval('seq_test');
<insert id="addUser" parameterType="User"> <selectKey keyProperty="userId" resultType="int" order="BEFORE"> select nextval('seq_test'); </selectKey> insert into user(user_id,user_name,password,phone) values (#{userId},#{userName, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR}, #{phone, jdbcType=VARCHAR}) </insert>
<insert id="addAdmin" parameterType="Admin"> <selectKey keyProperty="userId" resultType="int" order="BEFORE"> select nextval('seq_test'); </selectKey> insert into admin(user_id,user_name,password,phone) values (#{userId},#{userName, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR}, #{phone, jdbcType=VARCHAR}) </insert>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持小牛知识库。如有错误或未考虑完全的地方,望不吝赐教。
我正在使用实体框架管理我的sql server ce数据库。我希望我的表的主键由其他表的几个外键组成。我希望这样的事情能奏效: 但它会导致以下数据库迁移错误: 票据打印机。Bill::EntityType“Bill”没有定义键。定义此EntityType的键。Bills:EntityType:EntitySet“Bills”基于未定义键的类型“Bill”。 如何使表具有由这三个外键组成的主键?
问题内容: 我正在尝试学习如何使用键并打破习惯,即我所有表中的所有行都必须具有类型ID。同时,我也在进行多对多关系,因此在需要协调关系的表的任一列上要求唯一值会妨碍这一点。 我如何在表上定义主键,以便任何给定的值都可以在任何列中重复,只要永不完全重复所有列中的值组合即可? 问题答案: 从CREATE TABLE语法页面引用: 主键可以是多列索引。但是,您不能使用列规范中的PRIMARY KEY键属
本文向大家介绍配置Mysql主从服务实现实例,包括了配置Mysql主从服务实现实例的使用技巧和注意事项,需要的朋友参考一下 配置Mysql主从服务实现实例 ### 配置主数据库 my.cnf ### 在主数据库上创建同步账号 ### 配置从数据库 my.cnf ### 重启mysql服务 ### 连接Master服务 ### 启动slave服务 ### 查看Master服务状态 ### 查看S
主要内容:在创建表时设置主键约束,在修改表时添加主键约束,删除主键约束主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。 主键分为单字段主键和多字段联合主键,本节将分别讲解这两种主键约束的创建、修改和删除。 使用主键应注意以下几点: 每个表只能定义一个主键。 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行
问题内容: 我正在尝试使用具有删除/更新约束的多个外键创建数据库,但是使用以下SQL脚本得到了错误代码1005: 错误代码表示无法创建Vineyard表,我只想知道使用Delete / Update控件创建多个外键的正确格式。 问题答案: 您的外键规则为,但列定义为。 更改列定义并删除零件或过分考虑外键规则。那个有效: SQLFiddle演示
我有一个关于将弱实体从e-r模型转移到sql表的问题。具体地说,我使用的是MySQL。 假设我有表hotels,其中每个酒店都有主键id,名为id。
我有一个表,它有一个复合主键,由一个非auto_increment列和一个auto_increment列组成。auto_increment列需要为每个非auto_increment列值单独递增(稍后将详细介绍)。存储引擎是InnoDB。由于性能问题,我不希望锁定表。插入值后,检索最后一个auto_increment值的方法必须可用。 下面的脚本开始工作,但是最后一个INSERT会产生id,chec
本文向大家介绍Redis使用Eval多个键值自增的操作实例,包括了Redis使用Eval多个键值自增的操作实例的使用技巧和注意事项,需要的朋友参考一下 在PHP上使用Redis 给多个键值进行自增,示例如下: 如果这样写可能需要请求五次,可以通过 Eval 方法来一次完成,大大提高效率 Redis 用的 Lua 语法,我也不熟悉,这个字符串拼接方式也很特别的是两个点号 “..” 以上这篇Redis