primary key 

1、最简单的:

CREATE TABLE t1(
id int not null,
name char(20)
); 2、带主键的: a:
CREATE TABLE t1(
id int not null primary key,
name char(20)
); b:复合主键
CREATE TABLE t1(
id int not null,
name char(20),
primary key (id,name)
); 3、带默认值的: CREATE TABLE t1(
id int not null default 0 primary key,
name char(20) default '1'
);
 
追问
我只想给之前的 一个尚未成为主键的 字段 成为  主键  ,  比如我有一个表 test, 里边有二个  字段  a   和  b  ,  我现在想让 a 成为 主键 ,代码是什么吗?    直接给我写可以吗?  谢谢谢谢!!!!!
 
追答
ALTER TALBE tb_name ADD PRIMARY KEY (列名);
alter table 表名 change name name 数据类型 primary key auto_increment;
ALTER TABLE test  ADD CONSTRAINT PK_test PRIMARY KEY (a)
2016-05-04 22:11 2898人阅读 评论(0) 收藏 举报
 分类:
数据库mysql

版权声明:本文为博主原创文章,未经博主允许不得转载。

Database changed
mysql> desc orders;
+-------------+-------------+------+-----+---------+-------+
| Field                    | Type                | Null           | Key   | Default     | Extra |
+-------------+-------------+------+-----+---------+-------+
| Company           | varchar(20)    | YES          |            | NULL      |            |
| OrderNumber    | int(5)               | YES          |            | NULL      |            |
| Id_O                    | int(4)               |          NO   |            | 1              |             |

+-------------+-------------+------+-----+---------+-------+

建立的orders如上,现在想设置Id_O为primary key

应该先将其删除

MySQL > alter table orders drop Id_O;

在填曾:

mysql> alter table Orders add Id_O int not null primary key Auto_increment; ;

需要设置其为自增型,否则,因为空缺等问题而不能设置Id_O为主键;

mysql> select * from orders;
+----------       +-------------       +----+
| Company    | OrderNumber | Id |
+----------       +-----------       --+----+
| IBM               |        3532 |  1   |
| W3School   |        2356 |  2   |
| Apple           |        4698 |  3   |
| W3School   |        6953 |  4   |
+----------       +-------------        +----+

改变primary key为自增型:

alter table tb_name modify id int auto_increment.


2014-10-05 18:02 849人阅读 评论(0) 收藏 举报
 分类:
web-php(5)  web-javascript(4) 

alter table table_name auto_increment=n;
注意n只能大于已有的auto_increment的整数值,小于的值无效.
show table status like 'table_name' 可以看到auto_increment这一列是表现有的值.
步进值没法改变.只能通过下面提到last_inset_id()函数变通使用

MySQL可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1,如果想把它的初始值设置为1000,比较笨的办法是先插入一条记录并指定主键的值为999,然后delete改行记录,例如:

  1. insert into test(pk) values(999);
  2. delete from test where pk = 999;

更好的方法是使用alter的方法来直接修改,例如:

  1. alter table test AUTO_INCREMENT = 1000;

例子

1、不控制主键的起点

  1. create table emb_t_dictBusType
  2. (
  3. emb_c_busTypeID      int not null auto_increment,
  4. emb_c_busTypeEnName  varchar(255) not null,
  5. emb_c_busTypeZhName  varchar(255) not null,
  6. primary key(emb_c_busTypeID)
  7. )engine=INNODB  default charset=gbk;
  1. <span style="font-family: Simsun; background-color: rgb(255, 255, 255);">2、控制主键的起点</span>
  1. <span style="font-family: Simsun; background-color: rgb(255, 255, 255);"></span><pre name="code" class="sql">create table emb_t_dictBusType
  2. (
  3. emb_c_busTypeID      int not null auto_increment,
  4. emb_c_busTypeEnName  varchar(255) not null,
  5. emb_c_busTypeZhName  varchar(255) not null,
  6. primary key(emb_c_busTypeID)
  7. )engine=INNODB auto_increment=1001 default charset=gbk;

自增主键归零


方法一:

如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数 
truncate table 表名

方法二:

dbcc checkident (’table_name’, reseed, new_reseed_value) 当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息。 www.111cn.net
方法二不会清空已有数据,操作比较灵活,不仅可以将自增值归零,也适用于删除大量连续行后,重新设置自增值并插入新的数据;或从新的值开始,当然不能和已有的冲突。

  1. $sql="delete from $table_vote";
  2. mysql_query($sql, $link);
  3. $sql="alter table $table_vote auto_increment=1";
  4. mysql_query($sql, $link);

通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键。本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值:
获取自增主键【4种方法】

通过JDBC2.0提供的insertRow()方式
通过JDBC3.0提供的getGeneratedKeys()方式
通过SQL select LAST_INSERT_ID()函数
通过SQL @@IDENTITY 变量

1. 通过JDBC2.0提供的insertRow()方式
自jdbc2.0以来,可以通过下面的方式执行。

  1. Statement stmt = null;
  2. ResultSet rs = null;
  3. try {
  4. stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,  // 创建Statement
  5. java.sql.ResultSet.CONCUR_UPDATABLE);
  6. stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial");
  7. stmt.executeUpdate(                                                // 创建demo表
  8. "CREATE TABLE autoIncTutorial ("
  9. + "priKey INT NOT NULL AUTO_INCREMENT, "
  10. + "dataField VARCHAR(64), PRIMARY KEY (priKey))");
  11. rs = stmt.executeQuery("SELECT priKey, dataField "                 // 检索数据
  12. + "FROM autoIncTutorial");
  13. rs.moveToInsertRow();                                              // 移动游标到待插入行(未创建的伪记录)
  14. rs.updateString("dataField", "AUTO INCREMENT here?");              // 修改内容
  15. rs.insertRow();                                                    // 插入记录
  16. rs.last();                                                         // 移动游标到最后一行
  17. int autoIncKeyFromRS = rs.getInt("priKey");                        // 获取刚插入记录的主键preKey
  18. rs.close();
  19. rs = null;
  20. System.out.println("Key returned for inserted row: "
  21. + autoIncKeyFromRS);
  22. }  finally {
  23. // rs,stmt的close()清理
  24. }

2. 通过JDBC3.0提供的getGeneratedKeys()方式

  1. Statement stmt = null;
  2. ResultSet rs = null;
  3. try {
  4. stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
  5. java.sql.ResultSet.CONCUR_UPDATABLE);
  6. // ...
  7. // 省略若干行(如上例般创建demo表)
  8. // ... www.111cn.net
  9. stmt.executeUpdate(
  10. "INSERT INTO autoIncTutorial (dataField) "
  11. + "values ('Can I Get the Auto Increment Field?')",
  12. Statement.RETURN_GENERATED_KEYS);                      // 向驱动指明需要自动获取generatedKeys!
  13. int autoIncKeyFromApi = -1;
  14. rs = stmt.getGeneratedKeys();                                  // 获取自增主键!
  15. if (rs.next()) {
  16. autoIncKeyFromApi = rs.getInt(1);
  17. }  else {
  18. // throw an exception from here
  19. }
  20. rs.close();
  21. rs = null;
  22. System.out.println("Key returned from getGeneratedKeys():"
  23. + autoIncKeyFromApi);
  24. }  finally { ... }
  1. <span style="font-weight: bold; font-family: Simsun; background-color: rgb(255, 255, 255);">使用AUTO_INCREMENT时,应注意以下几点:</span>

AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

AUTO_INCREMENT数据列必须具备NOT NULL属性。

AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

mysql创建,添加主键的更多相关文章

  1. Mysql 创建联合主键

    Mysql 创建联合主键2008年01月11日 星期五 下午 5:21使用primary key (fieldlist)      比如:   create table mytable (       ...

  2. MySQL创建双主键

    如下: CREATE TABLE `loginlog` ( `id` ) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '主键编号', `IP` ...

  3. MySQL添加主键和外键

    查看表的字段信息:desc 表名; 查看表的所有信息:show create table 表名; 添加主键约束:alter table 表名 add constraint 主键 (形如:PK_表名) ...

  4. SQL Server 创建表 添加主键 添加列常用SQL语句

    --删除主键 alter table 表名 drop constraint 主键名 --添加主键 alter table 表名 add constraint 主键名 primary key(字段名1, ...

  5. 创建表 添加主键 添加列常用SQL语句

    --删除主键 alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段 ...

  6. SQL Server 创建表 添加主键 添加列常用SQL语句【转】

    --删除主键alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段名 ...

  7. 设置MySQL数据表主键

    设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...

  8. mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置

    n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...

  9. day03 MySQL数据库之主键与外键

    day03 MySQL数据库之主键与外键 昨日内容回顾 针对库的基本SQL语句 # 增 create database meng; # 查 show databases; shwo create da ...

随机推荐

  1. Linux 内核剖析

    https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先 ...

  2. vsphere虚拟化之 DNS服务的创建(二)

    1.创建域控的DNS服务器,打开"服务器管理器",由此可以看到AD域安装成功后,DNS服务也附带安装成功. 2.点击“工具”--“DNS” 3.点击“正向查询区域”--“best. ...

  3. 洛谷 P3368 【模板】树状数组 2(区间加,单点查询)

    题目链接 https://www.luogu.org/problemnew/show/P3368 树状数组 最基础的用法:https://www.cnblogs.com/yinyuqin/p/1096 ...

  4. [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)

    [Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...

  5. Xshell实现Windows和使用跳板机跳转的远程Linux互传文件

    适用于Linux CentOS版本,本地电脑是Win10版本 查询Linux版本: $lsb_release -a $cat /etc/issue 1.使用Xshell 连接上服务器 2.安装文件传输 ...

  6. 联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/details/72571674

    联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/ ...

  7. 【LeetCode】一种博弈思路 minimax(共5题)

    [292] Nim Game (2019年3月12日,E) 有一堆石头,游戏规则是每次可以从里面拿1-3颗石头,拿到最后的石头的人赢.你和你的对手都 optimal 的玩这个游戏,问先手(也就是你)能 ...

  8. 对OpenStack运维架构的总结(转)

    这里,仅从技术角度出发,谈谈OpenStack云平台在部署.架构和运维实施等方面的感想. 缘起,在2014年大二首次接触到OpenStack,当时国内外资料远没有当前这么丰富,为安装一个OpenSta ...

  9. 【python实例】判断是否是回文数

    """ 输入一个数,判断一个这个数是否是回文数.例如:121,这个数反过来还是121,所以这个是回文数: 再如:134,这个数反过来是431,所以这不是一个回文数: 12 ...

  10. springBoot+mysql+mybatis demo [基本配置] [遇到的问题]

    springBoot+mysql+mybatis的基本配置: 多环境 application.properties spring.profiles.active=dev spring.applicat ...