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

資料庫的主鍵不能刪除嗎

發布時間: 2023-06-30 06:34:01

資料庫之主鍵外鍵

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,不去除重復行

如何刪除資料庫主鍵自動增長

不能刪除資料庫中有自動增長的主鍵的表,其原因是這個表與其它表之間建立有「關系」。必須將「關系」刪除後才能刪除表。至於「關系」的定義以及刪除的方法可以參考Access幫助。

㈢ mysql資料庫中怎麼刪除主鍵

mysql刪除表的游碧銷主鍵

表結構:
create table service_code(
`id` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`name`)
)ENGINE=MyISAM DEFAULT CHARSET=gb2312;

先刪除主鍵

alter table service_code drop primary key;
然神遊後再添加主鍵
alter table service_code add primary key(id);
注:在添加主鍵之前,必慧扒須先把重復的id刪除掉

㈣ 主鍵和外鍵的作用

主鍵和外鍵的作用:

1、保證實體的完整性,加快資料庫操作速度,在表中添加記錄時,access會自動檢查新記錄主鍵值,不允許該值與主鍵值重復。access會自動按主鍵值排序好的顯示出來。如果沒有約束,則是按照用戶輸入信息的順序顯示出來。主鍵不接受空值,約束確保唯一數據。

2、外鍵保證的是數據的完整性。外鍵:一組數據的主鍵是另一組數據的的元素;主鍵約束了外鍵所在表中不能存在主鍵類之外的值;外鍵用於與另一張表的關聯。是能確定另一張表記錄的欄位,用於保持數據的一致性。比如,A表中的一個欄位,是B表的主鍵,就可以是A表的外鍵。

(4)資料庫的主鍵不能刪除嗎擴展閱讀:

主鍵和外鍵的注意事項:

1、主鍵默認非空,默認唯一性約束,只有主鍵才能設置自動增長,自動增長一定是主鍵,主鍵不一定自動增長;

設置主鍵的方式:在定義列時設置:ID INT PRIMARY KEY;在列定義完之後設置:primary KEY(id)、

2、只有INNODB的資料庫引擎支持外鍵,修改my.ini文件設置default-storage-engine=INNODB 外鍵必須與參照列的數據類型必須相同(數值型要求長度和無符號都相同,字元串要求類型相同,長度可以不同)。

設置外鍵的語法:CONSTRAINT 外鍵名 FOREIGN KEY (外鍵欄位)REFERENCES 參照表 (參照欄位) ON DELETE SET NULL ON UPDATE CASCADE 設置參照完整性。

3、外鍵約束的參照操作:

RESTRICT拒絕參照表刪除或更新參照欄位;

RESTRICT和NO ACTION相同,但這個指令只在mysql生效;

CASCADE刪除或更新參照表的參照欄位時,外鍵表的記錄同步刪除更新;

SET NULL 刪除或更新參照表的參照欄位時,外鍵表的外鍵設為NULL。

㈤ 資料庫可以沒有主鍵么,如果可以怎麼取消已有的主鍵

可以沒有主鍵,要是想取消的話 就修改一下欄位,讓那個為主鍵的變成平常的欄位,然後就可以取消了,