當前位置:首頁 » 數據倉庫 » 資料庫表主鍵移行
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫表主鍵移行

發布時間: 2022-11-20 19:46:56

⑴ mssqlserver2008的資料庫轉成mysql的資料庫後表的主鍵和表間的關系怎麼遷移過去

使用SQL Server Management Studio 2008的導出腳本功能。
可以把表結構,主、外鍵關系約束等數據對象導出為定義語句,把表中數據到處為Insert語句。
導出的腳本可能因為格式不能直接在mysql里執行,但都是標准SQL語法,使用文本編輯器的查找替換功能,把不符合mysql的字元替換掉,例如,把[]替換為""。
應該就可以了...

⑵ 資料庫表中的主鍵能不能修改

可以修改,可以一般不會去修改。因為主鍵是數據表中的唯一標識符,不是所有的欄位都可以用來當主鍵的。所以一般不會去修改它。一般的方法是先刪除主鍵約束,然後再重新添加。alter table 表名 drop constraint 主鍵名修改主鍵:alter table 表名 add constraint 主鍵名 primary key (column1,column2,....,column)

⑶ 資料庫主鍵問題,怎麼設置主鍵

--為保險起見,還是現將你的這個表備份一下
SELECT*intotFROMTT3
--test為你要操作的表,先刪除主鍵
altertabletestchangeididint;--ID為你的主鍵自增列,刪除自增
altertabletestchangeididauto_increment;--在設置自增

PS:我沒有MYSQL不能測試,樓主去試試上面的看,不行的話可以先將這一列刪除,然後在重新添加這一列:

altertable`表格名`addcolumn`列名`intnotnullauto_incrementprimarykeycomment'主鍵'first;


⑷ 關於資料庫主鍵問題

根據你的提問,我認為你所說的是物理主鍵和邏輯主鍵的概念.
一般所言的資料庫中的主鍵是物理主鍵,他可能在系統中由資料庫自動生成,比如一個32位長的隨機字元串.
而邏輯主鍵一般是用來表示一個包含確切意義的並唯一的鍵值,使用者可以根據邏輯主鍵的值清晰的了解到一些信息,但這些信息從物理主鍵是無法了解的.
你上面的表裡是打算用邏輯主鍵當物理主鍵用.這樣做可以,但不推薦.
一般的做法,尤其在大型項目中.建議使用物理主鍵,該主鍵交由資料庫自動生成.並使用自己的邏輯主鍵,需要在程序中判斷自己邏輯主鍵的唯一性,當然如果要求不高的系統可以不做判斷.
優點,在資料庫遷移等過程中,可最大可能的保護你數據的完整性,比如你從一個ORACLE資料庫移動到SEQ SERVER資料庫時,可能物理主鍵會存在這樣或那樣的問題,這時你可以選擇放棄原有的物理主鍵,只移動數據內容並生成新的物理主鍵.
還有點建議,在程序中使用的時候,建議使用物理主鍵來關聯你的數據內容~
答題完畢,希望對你有所幫助.

⑸ 什麼是資料庫裡面的主鍵

資料庫主鍵的意思是指一個列或者是多列的組合,它的值能唯一地標識表中的每一行,它的作用是可強製表的實體完整性。主鍵用於其他表的外鍵關聯,以及本記錄的修改與刪除。在創建以及更改表的時候可以通過定義 PRIMARY KEY 約束來進行主鍵的創建。

(5)資料庫表主鍵移行擴展閱讀:

資料庫主鍵的作用如下:

1、可以保證實體的完整性。

2、加快資料庫的操作速度。

3、在表中添加新記錄時,DBMS會自動檢查新記錄的主鍵值。

4、DBMS自動按主鍵值的順序顯示表中的記錄。

⑹ 資料庫裡面的主鍵和外鍵及候選鍵是什麼意思啊

1、主鍵(primary
key)吧:一張表(關系)的一個列(屬性)或多個列可以作為主鍵,但是前提是讓這個列作主鍵,這個列就能保證該列下的各個行(元組)的值不能相同,比如說用姓名屬性作主鍵的話,那麼這個主鍵就不一定可以,如果有兩個人是同樣的名字的話,就不能做到該屬性下的各個元組數據的值不同,如果用阿拉伯數字作主鍵就是一個很好的選擇。
2、外鍵(foreign
key):一張表(關系)的列(屬性)它同時存在表1和表2中,它不是表1的主鍵,而是表2的主鍵,就可以說他是表1的外鍵。
3、候選鍵(Candidate
Key):能唯一標識表(關系)中行(元組)的列(屬性),則稱該屬性為候選鍵,也稱
候選關鍵字

候選碼;由此來看候選鍵可以不只一個,還看一看得出的就是主鍵同時它也是候選鍵。

⑺ 資料庫表中的主鍵和外鍵

主外鍵的存在是依託兩個實體之間的關系而存在的;
比如班級與學生的關系:
一個班級可以有多個學生,並且一個學生只能屬於一個班級,這就是一對多的關系;
那麼設計資料庫的時候就應該在學生表內存放班級的ID作為外鍵,為什麼不在班級表內放學生呢?
因為,你想一想班級表內如果放學生那麼記錄可能就是這樣:
1班ID 1班 xx同學id
1班ID 1班 xx同學id
..
這是不允許的,班級表內班級為主鍵,是唯一的不允許相同記錄的;
下面簡單給你講下大概建成的表結構
--建班級表
create table class(
classid int primary key,--定義班級ID為主鍵
classname varchar(15)
)
--建學生表
create table students(
studentid int primary key,--定義學生ID為主鍵
classid int ,--外鍵值,跟班級表classid 屬性類型相同
stuname varchar(20),--學生姓名
---定義外鍵
foreign key(classid) references class(classid) --本表classid是基於class表classid的外鍵
)
---------
如上定義了主外鍵後,兩個表間的關系就是一對多的關系了,並且學生表內的classid必須依託班級表的classid存在,也就是說外鍵必須要主鍵存在的時候才能創建,例如:
--在班級表為空的情況往學生表插入一條記錄是不允許的:
insert into students(studentid,classid,stuname)values(1,1,'小明')
系統會拋出異常提示主鍵表班級表內班級ID不存在這樣是不允許插入的;
必須要先往班級表內插入一條記錄:
insert into class(classid,classname)values(1,'一班')
後才能執行插入前面一條往學生表插入信息的語句..

--------------可了解一些了?真累啊.

⑻ 資料庫表中的主鍵有什麼作用

資料庫主鍵

主鍵:表中經常有一個列或多列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強製表的實體完整性。當創建或更改表時可通過定義 PRIMARY KEY 約束來創建主鍵。一個表只能有一個 PRIMARY KEY 約束,而且 PRIMARY KEY 約束中的列不能接受空值。由於 PRIMARY KEY 約束確保唯一數據,所以經常用來定義標識列。

作用:

1)保證實體的完整性;

2)加快資料庫的操作速度

3) 在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復。

4) ACCESS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。

在有些資料庫中,雖然主鍵不是必需的,但最好為每個表都設置一個主鍵,不管是單主鍵還是復合主鍵。它存在代表著表結構的完整性,表的記錄必須得有唯一區分的欄位,主鍵主要是用於其他表的外鍵關聯,以及本記錄的修改與刪除。

主鍵的無意義性

在開發過程中,讀者可能會看到將一些表使用有意義的欄位表示主鍵,例如「用戶登錄信息表」將「登錄名」(英文名)作為主鍵,「訂單表」中將「訂單編號」作為主鍵,如此設計主鍵一般都是沒什麼問題,因為將這些主鍵基本不具有「意義更改」的可能性。但是,也有一些例外的情況,例如「訂單表」需要支持需求「訂單可以作廢,並重新生成訂單,而且訂單號要保持原訂單號一致」,那將「訂單編號」作為主鍵就滿足不了要求了。因此讀者在使用具有實際意義的欄位作為主鍵時,需要考慮是否存在這種可能性。

主鍵的選擇

①編號作主鍵

此方法就是採用實際業務中的唯一欄位的「編號」作為主鍵設計,這在小型的項目中是推薦這樣做的,因為這可以使項目比較簡單化,但在使用中卻可能帶來一些麻煩,比如要進行「編號修改」時,可能要涉及到很多相關聯的其他表,就像黎叔說的「後果很嚴重」;還有就是上面提到的「業務要求允許編號重復時」,我們再那麼先知,都無法知道業務將會修改成什麼?

②自動編號主鍵

這種方法也是很多朋友在使用的,就是新建一個ID欄位,自動增長,非常方便也滿足主鍵的原則,優點是:資料庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對於檢索非常有利;數字型的,佔用空間小,易排序,在程序中傳遞也方便;如果通過非系統增加記錄(比如手動錄入,或是用其他工具直接在表裡插入新記錄,或老系統數據導入)時,非常方便,不用擔心主鍵重復問題。

缺點:其實缺點也就是來自其優點,就是因為自動增長,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當系統與其他系統集成時,需要數據導入時,很難保證原系統的ID不發生主鍵沖突(前提是老系統也是數字型的);如果其他系統主鍵不是數字型那就麻煩更大了,會導致修改主鍵數據類型了,這也會導致其他相關表的修改,後果同樣很嚴重;就算其他系統也是數字型的,在導入時,為了區分新老數據,可能想在老數據主鍵前統一加一個「o」(old)來表示這是老數據,那麼自動增長的數字型又面臨一個挑戰。

⑼ 如何把SQL資料庫中表的數據整行復制,如把第一行的數據整行復制到第二行。

其實還是不夠清晰.
不過意思我猜出來了.
如果是每行像你說的一樣有個行號那就好辦了. 我告訴你一個很簡單的語句.
假如行號是RowId:
update YourTableName set RowId=RowId-1 where RowId<1000 and RowId>5
上面的語句是把第6行到999行的數據往前移一行,你應該可以照著寫其他的吧?
寫得不好,望採納...

⑽ 資料庫之主鍵外鍵

1,主鍵約束 (table的唯一標識)

能夠作為主鍵列的特點:該列不能為空,不能有重復值出現

創建表時指定主鍵的兩種方式:

CREATE TABLE stu(

sid CHAR(6) PRIMATY KEY,

sname VARCHAR(20),

age INT,

gender VARCHER(10)

);

指定sid列為主鍵列

CREATE TABLE stu(

sid CHAR(6),

sname VARCHAR(20),

age INT,

gender VARCHER(10),

PRIMARY KEY(sid)

);

指定sid列為主鍵列

修改表時指定主鍵:ALTER TABLE stu ADD PRIMATY KEY(sid);

刪除主鍵:ALTER TABLE stu DROP PRIMARY KEY;

2,主鍵自增長

因為主鍵列的特性是:必須唯一,不能為空,所以我們通常會指定主鍵為整形,然後設置其自動增長

創建表時指定主鍵自增長:

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20),

age INT,

gender VARCHAR(10)

);

修改表時設置主鍵自增長:ALTER TABLE stu 

3,非空約束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) NOT NULL,

age INT,

gender VARCHAR(10)

);

對sname列設置了非空約束

4,唯一約束

某些列不能設置重復的值,所以可以對列添加唯一約束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) NOT NULL UNIQUE,

age INT,

gender VARCHAR(10)

);

6,外鍵約束

外鍵特點:外鍵必須是另一個表的主鍵的值(外鍵要引用主鍵!),外鍵可以重復,外鍵可以為空,一張表可以有多個外鍵!

CREATE TABLE dept( //部門表

deptno INT  PRIMARY KEY AUTO_INCREMENT,

deptname CHAR(20)

);

INSERT INTO dept VALUES(10,『研發部』);

INSERT INTO dept VALUES(20,『人力部』);

INSERT INTO dept VALUES(30,『財務部』);

CREATE TABLE emp(   //員工表

empno INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(50),

dno INT, //員工所屬部門(外鍵),

CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)

);

INSERT INTO emp(empno,ename)  VALUES(NULL,『張三』),//外鍵可以不傳入值

INSERT INTO emp(empno,ename)  VALUES(NULL,『李四』,10),//外鍵可以重復

INSERT INTO emp(empno,ename)  VALUES(NULL,『王五』,10),

INSERT INTO emp(empno,ename)  VALUES(NULL,『趙六』,80),//dept表沒有主鍵值為80的記錄,sql客戶端編譯報錯

7,一對一關系模型

創建老公表

CREATE TABLE hashand(

hid INT PRIMARY KEY AUTO_INCREMENT,

hname VARCHAR(50),

);

INSERT INTO hashand VALUES(NULL,『劉備』);

INSERT INTO hashand VALUES(NULL,『關羽』);

INSERT INTO hashand VALUES(NULL,『張飛』);

SELECT * FROM hashand

//創建老婆表

CREATE TABLE wife(

wid INT PRIMARY KEY AUTO_INCREMENT,

wname VARCHAR(50),

CONSTRAINT fk_wife_hashand FOREIGN KEY(wid)  REFERENCES hashand(hid)

)

/**

wid:

1,非空

2,唯一

3,引用hid

*/

INSERT INTO wife VALUES(1,『楊貴妃』);

INSERT INTO wife VALUES(2,『妲己』);

INSERT INTO wife VALUES(3,『褒姒』);

SELECT * FROM wife;

對於一對一關系模型從表的主鍵即是外鍵,例如老公和老婆的關系模型,一個老公只能有一個老婆,一個老婆只能有一個老公

對於一對多關系模型主表的主鍵即是從表的外鍵,例如訂單和用戶的關系模型,一個用戶可以下單多次,對應多個訂單,而一個訂單只能屬於一個用戶

對於多對多關系模型沒有主表和從表之分,需要建立第三張表來記錄這兩張表的外鍵,建立兩個外鍵,分別引用這兩張表的主鍵

8,多對多關系模型

在表中簡歷多對多關系需要使用中間表,即需要三張表,在中間表中使用兩個外鍵,分別引用其他兩個表的主鍵,例如學生和老師的關系模型,一個老師可以有多個學生,一個學生可以有多個老師

CREATE TABLE student(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname CHAR(40)

);

CREATE TABLE teacher(

tid INT PRIMARY KEY AUTO_INCREMENT,

tname CHAR(40)

);

CREATE TABLE stu_tea(

sid INT,

tid INT,

ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),

ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid)

);

INSERT INTO student VALUES(NULL,『劉德華』);

INSERT INTO student VALUES(NULL,『梁朝偉』);

INSERT INTO student VALUES(NULL,『黃日華』);

INSERT INTO student VALUES(NULL,『苗僑偉』);

INSERT INTO student VALUES(NULL,『湯鎮業』);

INSERT INTO teacher VALUES(NULL,『崔老師』);

INSERT INTO teacher VALUES(NULL,『劉老師』);

INSERT INTO teacher VALUES(NULL,『石老師』);

SELECT * FROM student;

SELECT * FROM teacher;

INSERT INTO stu_tea VALUES(1,1); //劉德華是崔老師的學生

INSERT INTO stu_tea VALUES(2,1); //梁朝偉是崔老師的學生

INSERT INTO stu_tea VALUES(3,1);//黃日華是崔老師的學生

INSERT INTO stu_tea VALUES(4,1);//苗僑偉是崔老師的學生

INSERT INTO stu_tea VALUES(5,1);//湯鎮業是崔老師的學生

INSERT INTO stu_tea VALUES(2,2);//梁朝偉是劉老師的學生

INSERT INTO stu_tea VALUES(3,2);//黃日華是劉老師的學生

INSERT INTO stu_tea VALUES(4,2);//苗僑偉是劉老師的學生

INSERT INTO stu_tea VALUES(3,3);//黃日華是石老師的學生

INSERT INTO stu_tea VALUES(5,3);//湯鎮業是劉老師的學生

SELECT * FROM stu_tea;

這時在stu_tea這個中間表中的每條記錄都是來說明student表和teacher表的關系的

例如在stu_tea表中的記錄:sid為1001,tid為2001,這說明編號為1001的學生有一個編號為2001的老師

sid          tid

1001       2001 //編號為1001的學生有一個編號為2001的老師

1001       2002 //編號為1001的學生有一個編號為2002的老師

1001       2003 //編號為1001的學生有一個編號為2003的老師

1002       2001 //編號為2001的老師有一個編號為1002的學生

1002       2004 //編號為2004的老師有一個編號為1002的學生

9,合並結果集

要求要合並的結果集中,列的類型和列數相同

UNION,去除重復行,UNION ALL,不去除重復行