MySQL,SQLServer的详细解读,Oracle主键自动增长
1。将主键定义为自动增长标识符类型MySQL
在MySQL数据库中,如果表的主键设置为auto_increment类型,数据库会自动分配一个值的主键。例如:
复制代码代码如下所示:
创建表的客户(ID int auto_increment主键,名称为varchar(15));
插入客户(名称)的价值观(名),(作者);
从客户中选择id;
上面的SQL语句首先创建Customer表,然后插入两个记录,并且只有插入插入时才设置name字段的值。最后,表中的id字段正在查询,查询结果为:
因此,一旦ID设置为auto_increment型、MySQL数据库自动分配主键以增量方式。
SQL Server
在MS SQL Server,如果表的主键设置为身份类型,数据库会自动分配一个值的主键。例如:
复制代码代码如下所示:
创建表客户(id int标识(1,1)主键不为空,name(15));
插入客户(名称)值('name1 '),('name2);
从客户中选择id;
注:在SQLServer,字符串是扩展的单引号,双引号可以使用MySQL。
查询结果与MySQL相同。
因此,一旦ID设置为认同型、MS SQLServer数据库自动分配主键以增量方式。身份包含两个参数,第一个参数表示起始值和第二参数表示增量。
PS:2013-6-4
这样的问题是经常遇到的,我们删除1个自我成长记录的时候,重新插入的记录是2。我们认为,自我插入记录的1的增长是不可能的。当我跟我的同事们的今天,我们发现,我们可以通过设置取消identity_insert自我成长,然后关闭后,我们插入数据。实验如下:
复制代码代码如下所示:
使用testdb2
-第一步:创建一个表
创建表客户(
身份标识主键不为空,
名称varchar(15)
);
——将执行插入操作
插入客户(ID、名称)值(1,'name1);
一个明确的价值在table'customers'can标识列只
STEP3:--对主键列的自我生长释放
集identity_insert客户;
STEP4:插入--两个记录,在1和3,主键分别插入成功。
插入客户(ID、名称)值(1,'name1);
插入客户(ID、名称)值(3,'name1);
STEP5:再次插入--在2主键的记录插入成功。
插入客户(ID、名称)值(2,'name1);
——步骤:插入重复的主键,
报告错误:主键constraint'pk__customer__3213e83f00551192违规。不能在对象中插入重复密钥
插入客户(ID、名称)值(3,'name1);
——STEP7:关闭identity_insert
集identity_insert客户关;
2。从序列中获取自动增长的标识符。
甲骨文公司
在Oracle中,您可以创建每个表的主键的一个单独的序列,然后得到一个自动添加这个序列标识符分配的关键。例如,一个表创建一个序列称为customer_id_seq,具有1和2的增量,起始值。
复制代码代码如下所示:
2从1开始创建序列customer_id_seq增量
一旦customer_id_seq序列定义序列的curval和nextval属性可以访问。
Curval:收益序列的当前值
Nextval:首先把序列的值,然后返回序列值
下面的SQL语句首先创建Customer表,然后插入两个记录。当插入,它集id和name字段的值,其中ID字段的值来自customer_id_seq序列。最后,在客户表的ID字段查询。
复制代码代码如下所示:
创建表的客户(ID为主键,名称为varchar(15));
插入客户价值(customer_id_seq。nextval,'name1);
插入客户价值(customer_id_seq。nextval,'name2);
从客户中选择id;
如果在Oracle中执行以上语句,则查询结果为:
通过触发器自动添加id字段
从上面的INSERT语句,我们可以发现,如果你插入customer_id_seq.nextval值一次,这将是非常繁琐和麻烦。因此我们可以考虑使用触发器来完成这一步。
创建一个触发器trg_customers
复制代码代码如下所示:
创建或替换
触发每行之前插入trg_customers客户
开始
选择customer_id_seq.nextval为:new.id双;
结束;
插入一条记录
复制代码代码如下所示:
插入客户(名称)值(测试);
这就是我们将发现这个记录被插入到数据库中的原因,ID还在增长中。