表的插入、更新、删除、合并操作_2_插入含自增列的记录
生活随笔
收集整理的這篇文章主要介紹了
表的插入、更新、删除、合并操作_2_插入含自增列的记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ?插入含自增列的記錄
需求描述
需求:向dept表中插入部門編號為50,部門名稱為Production,部門位置為Shanghai的數據.
解決方法:這里通過INSERT INTO TableName VALUES (…),這里表dept的deptno字段定義的是自增.
注: 數據庫數據集SQL腳本詳見如下鏈接地址
員工表結構和數據初始化SQL腳本
SQL代碼
-- MySql: INSERT INTO dept VALUES (50,'Production','Shanghai');/* Mysql雖然在字段定義時約束了自增,但是在插入自增數據時依然可以顯示的插入,只要自增字段的值不和已有的數據重復即可.如果插入的重復的自增字段數據,則會有類似如下的報錯:Duplicate entry '50' for key 'PRIMARY' */-- SQL Server: INSERT INTO dept VALUES (50,'Production','Shanghai');/* 消息 8101,級別 16,狀態 1,第 2 行僅當使用了列列表并且 IDENTITY_INSERT 為 ON 時,才能為表'dept'中的標識列指定顯式值。問題原因:dept表的deptno字段設置了自增模式,而默認默認情況下對自增字段的插入是數據庫自己維護的,所以當用戶手動指定時則會拋出該異常.*/ create table dept(deptno int IDENTITY(1,1) NOT NULL,dname varchar(15),loc varchar(50),primary key(deptno));/* 解決該問題有3種辦法:1 修改表結構的定義,去掉表的自增屬性。不建議。 2 只插入除自增外的其他字段,讓數據庫自行維護自增字段。建議。 3 通過打開表的IDENTITY_INSERT開關,顯示插入指定的自增字段。建議. 其中第三種方法的實現代碼見下: */SET IDENTITY_INSERT dept ON; GO INSERT INTO dept(deptno,dname,loc) VALUES (50,'Production','Shanghai'); SET IDENTITY_INSERT dept OFF; GO-- Oracle:/* Oracle里對于自增字段的維護麻煩點,因為它沒有對應的關鍵字.不過我們可以通過內置的數據庫對象sequence來實現.具體實現見下: */create sequence dept_autoincminvalue 50maxvalue 9999999999999999999999999999start with 50increment by 10nocache;INSERT INTO dept VALUES(dept_autoinc.nextval,'Production','Shanghai');執行結果
注:對應oracle里的執行結果。
延展閱讀
Oracle 12c中已經有IDENTITY關鍵字來維護自增字段
CREATE TABLE t1 (c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,c2 VARCHAR2(10));INSERT INTO t1(c2) VALUES(10);INSERT INTO t1(c2) VALUES(20);?
總結
以上是生活随笔為你收集整理的表的插入、更新、删除、合并操作_2_插入含自增列的记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 导弹东风41的威力到底有多大?
- 下一篇: 表的插入、更新、删除、合并操作_3_插入