『壹』 sql 我想問問,我想讓主鍵不遞增,sql語句應該怎麼寫
不用寫,有個手動的點一下就行了,是自動遞增1的
選擇了主鍵那行,看下面就有設置
『貳』 sql怎麼設置主鍵
1.主鍵語法
①創建時:create table sc (
studentno int,
courseid int,
score int,
primary key (studentno) );
②修改時:ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名);
前提是原先沒有設置主鍵。
2.外鍵語法
①創建時:create table sc (
studentno int,
courseid int,
score int,
foreign key (courseid) );
②修改時:
ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[約束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ;
3.使用組合主鍵
如果一列不能唯一區分一個表裡的記錄時,可以考慮多個列組合起來達到區分表記錄的唯一性,形式
①創建時:create table sc (
studentno int,
courseid int,
score int,
primary key (studentno,courseid) );
②修改時:alter table tb_name add primary key (欄位1,欄位2,欄位3);
前提是原來表中沒有設置主鍵,若原先已有主鍵則會報錯。
『叄』 SQL怎樣用命令設置主鍵
可以參考下面的方法:
建表的時候,可以直接在列名後面增加主鍵約束,比如:
IDchar(5)primarykey。
對已經建表的列增加主鍵約束:
alter table 表名addconstraint約束名 primary key (ID)
(3)sql怎麼設置不更新主鍵擴展閱讀:
sql語句
添加主鍵
Alter table tabname add primary key(col)
刪除主鍵
Alter table tabname drop primary key(col)
創建索引
create [unique] index idxname on tabname(col….)
刪除索引
drop index idxname
『肆』 SQL資料庫沒有主鍵,如何進行更新,刪除呢 有什麼方法嗎
可以用SQL語句,也可以用開發工具中數據集控制項的方法。
用SQL語句:
更新:update 表名 set 欄位名=欄位值,... where 篩選條件
刪除:delete 表名 where 篩選條件
『伍』 在SQL SERVER 中對表不能設置主鍵
資料庫主鍵是指表中一個列或者列的組合,其值能夠唯一的標識表中的每一個行。這樣的一列或者多列成為表的主鍵,通過它可以強製表的實體完整性。當創建或者更改表時可以通過定義PRIMARY KEY約束來創建主鍵,一個表只能有一個主鍵約束,而且主鍵約束中的列不能是空值,由於主鍵約束確保唯一數據,所一經常來定義標識列。
主鍵的作用 1、 主鍵是用於唯一標識資料庫表中一行數據的。2、 作為一個可以被外鍵有效引用的對象。
主鍵的設計原則 1、 主鍵應當是對用戶沒有意義的,比如說用戶登陸一個系統的時候的登錄id;而這種情況就不可能了:「學生表」需要支持這樣的需求「學生注銷後,可以重新激活自己的信息,而且還要保持自己的號碼跟原來的一直」,這樣的話主鍵就不能滿足要求了。2、 唯一性。3、 非空性:主鍵的值是不可重復的,也不可以為空。4、盡量不要更新主鍵。實際上,因為主鍵除了惟一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了。注意:這項原則對於那些經常需要在數據轉換或多資料庫合並時進行數據整理的數據並不適用。5、主鍵不應包含動態變化的數據,如時間戳、創建時間列、修改時間列等。6、主鍵應當有計算機自動生成。如果由人來對主鍵的創建進行干預,就會使它帶有除了惟一標識一行以外的意義。一旦越過這個界限,就可能產生認為修改主鍵的動機,這樣,這種系統用來鏈接記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。
創建主鍵--在創建表時就可以對欄位加上約束:
create table Student(StudentNo int PRIMARY KEY IDENTITY(1,1), --加主鍵約束,還有標識列屬性(兩者構成實體完整性)StudentName nvarchar(15) not null, --加非空約束,不加"not null" 默認為:可以為空StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外鍵約束,格式:FOREIGN KEY REFERENCES 關聯的表名(欄位名)StudentAge int DEFAULT ((0)), --加默認值約束StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加檢查約束,格式:check (條件表達式))
『陸』 sql添加外主鍵約束為什麼不更新修改
--我也是初學者,共同研究下,你最好一段一段執行,要不就沒意義了
use school
drop table teacher1
drop table student1
go
create table teacher1
(
t_id int primary key,
t_name nvarchar(10) not null
)
go
insert into teacher1 values(1347,'張三')
insert into teacher1 values(2680,'李四')
insert into teacher1 values(6379,'王五')
go
create table student1
(
s_id int primary key,
t_id int
)
go
alter table student1
add constraint FK foreign key(t_id) references teacher1(t_id) on update cascade
insert into student1 values(1,2680)
insert into student1 values(2,6379)
insert into student1 values(3,1347)
insert into student1 values(4,6379)
insert into student1 values(5,1347)
--兩個表建好了,大概按照你的意思,不知道是不是這種情況
go
select * from student1;
select * from teacher1; --查詢所有數據
go
--在student1表(外鍵表)中加入一組數據
insert into student1 values(6,1234) --失敗了,因為外鍵表中外鍵的值必須是引用主鍵表中關聯的主鍵的值
--也就是外鍵約束,或稱參照完整性
--外鍵約束是約束外鍵的數據的取值的
insert into teacher1 values(1234,'童川') --然後在teacher1表(主鍵表)中加一組數據
--成功,外鍵約束對主鍵表被引用的主鍵無影響
insert into student1 values(6,1234) --成功,驗證了失敗的原因
go
select * from student1;
select * from teacher1; --再次查詢所有數據
--on update cascade 這個東西我也沒學過,網路了一下,大概明白了
go
update teacher1 set t_id = t_id + 10000
where t_name in('童川') --成功
update student1 set t_id = t_id + 10000 --提示與外鍵約束發生沖突
go
select * from student1;
select * from teacher1; --看到了么?學生表中引用'童川'老師的數據的一列數據中t_id的值也隨之改變
--我想這就是on update cascade的作用
--主鍵的值改變後,引用它的外鍵的值也隨之改變
--最後順便一提,童川是我的室友,惡搞一下他,嘿嘿···
『柒』 sql 中是否可以把主鍵重新設置為非主鍵
樓主,你好!這個還是要看你的一個實際情況來看的。比如,你剛開始寫DDL語句時,那麼可以直接改掉就可以了;但是從你的問題來看,應該是已經通過DDL語句生成資料庫表了,並且很有可能在表中就已經存在數據了。如果是如我所描述的,那麼可以按如下方式來處理:
把資料庫做備份,不要在正式庫中直接修改。
首先,要了解哪些應用程序的代碼使用了這張表,並和這張表的這個主鍵欄位相關聯。
其次,確定這張表取消主鍵後,會設置哪個欄位為主鍵欄位?本來表中已經的記錄中,這個欄位的值是否重復?如果重復的話,那麼就不能調整。如果不重復的話,就可以調整。
最後,直接用DDL語句ALTER TABLE 的約束來調整主鍵欄位。
我只給你說了一個大致思路,具體操作還是需樓主自己動手。