mysql创建,添加主键
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 TABLE test ADD CONSTRAINT PK_test PRIMARY KEY (a)
版权声明:本文为博主原创文章,未经博主允许不得转载。
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.
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改行记录,例如:
- insert into test(pk) values(999);
- delete from test where pk = 999;
更好的方法是使用alter的方法来直接修改,例如:
- alter table test AUTO_INCREMENT = 1000;
例子
1、不控制主键的起点
- create table emb_t_dictBusType
- (
- emb_c_busTypeID int not null auto_increment,
- emb_c_busTypeEnName varchar(255) not null,
- emb_c_busTypeZhName varchar(255) not null,
- primary key(emb_c_busTypeID)
- )engine=INNODB default charset=gbk;
- <span style="font-family: Simsun; background-color: rgb(255, 255, 255);">2、控制主键的起点</span>
- <span style="font-family: Simsun; background-color: rgb(255, 255, 255);"></span><pre name="code" class="sql">create table emb_t_dictBusType
- (
- emb_c_busTypeID int not null auto_increment,
- emb_c_busTypeEnName varchar(255) not null,
- emb_c_busTypeZhName varchar(255) not null,
- primary key(emb_c_busTypeID)
- )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
方法二不会清空已有数据,操作比较灵活,不仅可以将自增值归零,也适用于删除大量连续行后,重新设置自增值并插入新的数据;或从新的值开始,当然不能和已有的冲突。
- $sql="delete from $table_vote";
- mysql_query($sql, $link);
- $sql="alter table $table_vote auto_increment=1";
- 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以来,可以通过下面的方式执行。
- Statement stmt = null;
- ResultSet rs = null;
- try {
- stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, // 创建Statement
- java.sql.ResultSet.CONCUR_UPDATABLE);
- stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial");
- stmt.executeUpdate( // 创建demo表
- "CREATE TABLE autoIncTutorial ("
- + "priKey INT NOT NULL AUTO_INCREMENT, "
- + "dataField VARCHAR(64), PRIMARY KEY (priKey))");
- rs = stmt.executeQuery("SELECT priKey, dataField " // 检索数据
- + "FROM autoIncTutorial");
- rs.moveToInsertRow(); // 移动游标到待插入行(未创建的伪记录)
- rs.updateString("dataField", "AUTO INCREMENT here?"); // 修改内容
- rs.insertRow(); // 插入记录
- rs.last(); // 移动游标到最后一行
- int autoIncKeyFromRS = rs.getInt("priKey"); // 获取刚插入记录的主键preKey
- rs.close();
- rs = null;
- System.out.println("Key returned for inserted row: "
- + autoIncKeyFromRS);
- } finally {
- // rs,stmt的close()清理
- }
2. 通过JDBC3.0提供的getGeneratedKeys()方式
- Statement stmt = null;
- ResultSet rs = null;
- try {
- stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
- java.sql.ResultSet.CONCUR_UPDATABLE);
- // ...
- // 省略若干行(如上例般创建demo表)
- // ... www.111cn.net
- stmt.executeUpdate(
- "INSERT INTO autoIncTutorial (dataField) "
- + "values ('Can I Get the Auto Increment Field?')",
- Statement.RETURN_GENERATED_KEYS); // 向驱动指明需要自动获取generatedKeys!
- int autoIncKeyFromApi = -1;
- rs = stmt.getGeneratedKeys(); // 获取自增主键!
- if (rs.next()) {
- autoIncKeyFromApi = rs.getInt(1);
- } else {
- // throw an exception from here
- }
- rs.close();
- rs = null;
- System.out.println("Key returned from getGeneratedKeys():"
- + autoIncKeyFromApi);
- } finally { ... }
- <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创建,添加主键的更多相关文章
- Mysql 创建联合主键
Mysql 创建联合主键2008年01月11日 星期五 下午 5:21使用primary key (fieldlist) 比如: create table mytable ( ...
- MySQL创建双主键
如下: CREATE TABLE `loginlog` ( `id` ) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '主键编号', `IP` ...
- MySQL添加主键和外键
查看表的字段信息:desc 表名; 查看表的所有信息:show create table 表名; 添加主键约束:alter table 表名 add constraint 主键 (形如:PK_表名) ...
- SQL Server 创建表 添加主键 添加列常用SQL语句
--删除主键 alter table 表名 drop constraint 主键名 --添加主键 alter table 表名 add constraint 主键名 primary key(字段名1, ...
- 创建表 添加主键 添加列常用SQL语句
--删除主键 alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段 ...
- SQL Server 创建表 添加主键 添加列常用SQL语句【转】
--删除主键alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段名 ...
- 设置MySQL数据表主键
设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...
- mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...
- day03 MySQL数据库之主键与外键
day03 MySQL数据库之主键与外键 昨日内容回顾 针对库的基本SQL语句 # 增 create database meng; # 查 show databases; shwo create da ...
随机推荐
- 【SD系列】SAP SD模块-销售收入科目的配置
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SD系列]SAP SD模块-销售收入科目的配置 ...
- (转载)STL map与Boost unordered_map的比较
原链接:传送门 今天看到 boost::unordered_map,它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合 ...
- python中map函数和reduce函数的区别
①从参数方面来讲:map()函数: map()包含两个参数,第一个是参数是一个函数,第二个是序列(列表或元组).其中,函数(即map的第一个参数位置的函数)可以接收一个或多个参数.reduce()函数 ...
- Synchronized 详解
为了方便记忆,将锁做如下的分类 一.对象锁 包括方法锁(默认锁对象为this,当前实例对象)和同步代码块锁(自己指定锁对象) 1.代码块形式:手动指定锁定对象,也可是是this,也可以是自定义的锁 p ...
- JAVA线程同步通信
以下讲解Lock线程同步通信,也是比synchronized强大的一个功能点 先看一个常规的案例: 用户类 public class Person { public void eat(){ for(i ...
- css画百分比圆环
html: <div class="circle"> <div class="percent-circle percent-circle-left&qu ...
- TCL自动化之SSH交互式
目前ssh工具很多,但是能够轻松运用到自动化脚本中,可以轻松适配任何环境,满足ssh交互式登录的tcl工具包很少 下面是个人在tcl自动化过程中比较满意的一款自动化脚本 通过使用管道方式分装plink ...
- docker ssh连接不上
docker ssh连接报下面的错 Last login: Thu Apr 13 09:17:23 2017 from localhost Connection to 127.0.0.1 closed ...
- css盒子模型设置的缩略形式
css里面的盒子模型里面设置padding,margin的上下或者左右的大小有很多方式,下面说说两种不同的方式: original method: padding-top:0px padding-ri ...
- 02.Linux-CentOS系统NFS挂载时拒绝访问挂载问题
问题: 在挂载nfs时报拒绝访问挂载:mount -t nfs 192.163.1.10:/home/opneuser/upload /home/openuser/upload/ 报错信息:Mount ...