這篇文章我總結下在使用sql查詢或修改資料庫的時候經常會碰到的兩個問題,以及對這兩個問題解決方法。
開頭先宣告下我使用的開發環境是sql server 2008。
一、對主鍵的修改
主鍵值都會帶有主鍵約束,當執行update操作或是其他操作的時候就會受到限制無法修改,解決的方法是:取消主鍵約束->刪掉主鍵列->插入修改後的主鍵值。
(1)取消主鍵約束
取消主鍵約束的sql語句如下:
alter table [表名] drop constraint [主鍵名]
輸入表名和主鍵名時不要帶中括號(下同),這裡值得說明的是[主鍵名]並不是主鍵所在的欄位名。主鍵名如果沒有指定系統會自動分配乙個,這時就需要查詢主鍵名,查詢主鍵名的方法如下:
--使用sql儲存方式進行主鍵的查詢
exec sp_pkeys @table_name='[表名]'
--查詢表的詳細資訊,在其中找到主鍵名
sp_help [表名]
在這裡順便介紹下如何查詢主鍵的列名,雖然這可能用的不多,但以下這個方法還是比較直觀的:
select table_name,column_name from information_schema.key_column_usage
where table_name='[表名]'
(2)刪掉主鍵列
alter table [表名] drop column [欄位名]
(3)插入修改後的主鍵名
alter table [表名] add constraint [主鍵名] primary key(欄位名)
值得說明的是,這裡的主鍵名是自定義的主鍵名,指定之後如果以後還需取消主鍵約束就可以用這個主鍵名,而不再是系統自動分配的欄位名了。
二、自增長識別符號的修改
這個問題主要遇到的情形是,在刪除了一段連續的帶有自增長欄位的一部分資料項之後,自增長序列不會自動補全,而是按照原先的計數繼續增長。舉個例一段連續的自增長字段(1,2,3,…,8,9),我們將其中的(7,8,9)delete掉後再向其中插入新的資料,此時新序列標號不是7而是10。
解決的方法有兩種:設定序列自增長開關和重置序列自增長起始數。
(1)設定序列自增長開關
取消序列的自增長的sql語句:
set identity_insert [表名] on
這條語句執行完後,再進行插入時需要指定插入項的序列值,而不會引起序列的自增長。當修改完成後,如果還想讓序列具有自增長性需要進行恢復操作:
set identity_insert [表名] off
(2)重置序列自增長起始數
dbcc checkident([表名],reseed,[數字])
該語句可用來重置自增長序列的起始值,[數字]處設定起始值。
dbcc checkident([表名],noreseed)
該語句可用來查詢目前自增序列的當前值。 mysql標識列 自增長列
直接po 和案例 標識列 又稱為自增長列 含義 可以不用手動的插入值,系統提供預設的序列值 特點 1 標識列必須和主鍵搭配嗎?不一定,但要求是乙個key 2 乙個表可以有幾個標識列?至多乙個!3 標識列的型別只能是數值型 4 標識列可以通過 set auto increment increment ...
mysql 標識列 自增長列
1.含義 可以不用手動插入值,系統提供預設的序列值 2.特點 1 標識列不一定必須和主鍵搭配,但要求是乙個key 主鍵 unique 外來鍵 2 乙個表最多有乙個標識列 3 標識列的型別只能是數值型 int float double等 4 標識列可以通過 set auto increment inc...
133 標識列 自增長列
特點 1 表示列必須和主鍵搭配嗎?不一定,但要求是乙個key 2 乙個表可以有幾個標識列?至多乙個!3 標識列的型別,只能是數值型。4 標識類可以通過set auto increment 值,來設定步長 建立表時設定標識列 create table tab identity id int prima...