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)

);

结果如下:

如果我们把id设为主键,仍然可以创建成功。


1

2

3

4

5

CREATE TABLE t2 (

    id INT PRIMARY KEY,

    col1 INT auto_increment NOT NULL,

    key(col1)

);

结果如下:

所以自增列必须是键,但不一定非是主键。但一张表能否有多个自增列?

答:一张表只能有一个自增列。


1

2

3

4

5

CREATE TABLE t3 (

    id INT PRIMARY KEY auto_increment,

    col1 INT auto_increment NOT NULL,

    key(col1)

);

结果如下:

得出的结论为:每张表只能设置一个字段为自增长字段,这个字段可以是主键,也可以不是主键,如果不是主键,则必须设置为一种“键(key)”

其实,主键(primary key)也是键(key)的一种,key还包括外键(foreign key)、唯一键(unique key)等,关于key的讨论可以查看帖子http://www.cnblogs.com/tanzq/p/9064511.html

原文地址:https://www.cnblogs.com/tanzq/p/9064456.html

时间: 2024-11-03 22:16:06

mysql非主键自增长的相关文章

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——非主键自增

今天遇到一个问题: 要创建一张表,其中我想将ip和date这两列作为一个复合主键,可以通过如下语句修改表结构: alter table tb_name add primary key (字段1,字段2,字段3); 但是这样做会报错,原因是我在最开始创建表的时候已经将id作为主键了,因此要先取消id的主键(取消之前要先将id的自增去掉,否则无法取消他的主键). 此时这张表已经将ip和date设置为复合主键,但我仍然想将ip设为主键,此时就会报错: emmm 大概意思就是只有key能设置自增,但是这

mysql 用非主键where语句报错Error Code: 1175.You are using safe update mode and you tried …

1)这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,执行命令SET SQL_SAFE_UPDATES = 0;修改数据库模式 执行完更新之后再将SET SQL_SAFE_UPDATES 恢复为 1; 2)或者还可以在条件后面加limit语句加以限制.

Mysql,SqlServer,Oracle主键自动增长的设置

1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如:   customers(id  auto_increment    , name (  customers(name)  id  customers; 以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值.最后查询表中id字段,查询结果为: 由此可见,一旦把id设为auto_increment类型,mys

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——主键自动增长&唯一索引

首先说一下主键和唯一索引的区别 主键:一个数据库的一张表有且仅有一个主键,而且主键不能重复 唯一索引:一个数据库的一张表上唯一索引可以有多个,只是所在唯一索引上的值不能重复,这一点和主键一样 下面我们创建一个有主键有唯一索引的,并且主键是自动增长 create table demo (id int primary key auto_increment, name char(10) unique key, age int); 接下来我们插入数据看看 mysql--主键自动增长&唯一索引 原文地址:

mysql 重置主键

开发时总是要向数据库写入测试数据,删掉以后id(自增主键)依然还是在增长,这个问题我遇到好多次,也都没有在意. 最近这个习惯被朋友嫌弃 = =||| 就在网上搜索了下mysql重置主键的办法: ALTER TABLE table_name AUTO_INCREMENT= 1; 就是重置主键从1开始(也可以从100,1000看你喜欢) 另一个办法就是重新建一张表(应该每人这样干把..) 留下记录以便下次查看~

表主键自增长Mybatis插入数据报错

在使用MyBatis进行开发的过程中,当你遇到向某张数据库表中插入一条记录时,出现数据插入不正确,如果自己确定是因为主键的原因,类似如下错误提示: 而你的本意是主键自动增长,那么,可参考如下方法尝试解决: 第一步:在配置中设置主键为自增长(数据库我使用的是MySql) 如果你是使用MyBatis自动生成的插入语句,除了设置上面给出的useGeneratedKeys="true"之外,还需要将如下图所示红色部分去掉,这是查询主键最大值的一段代码. 如果还未解决,这时你应该检查一下你的数据

mySQL 中主键值自动增加

转  http://stevenjohn.iteye.com/blog/976397 MySql 主键自动增长 博客分类: DataBase MySQLSQL 创建数据库,创建表. Sql代码   mysql> create database ssh2; Query OK, 1 row affected (0.04 sec) mysql> use ssh2; Database changed mysql> create table user( -> id integer prima