亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL創(chuàng)建、修改和刪除表操作指南

 更新時(shí)間:2022年08月25日 10:04:12   作者:曠世奇才李先生  
MySQL是最常用的數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)操作中,基本都是增刪改查操作,簡(jiǎn)稱CRUD,下面這篇文章主要給大家介紹了關(guān)于MySQL創(chuàng)建、修改和刪除表的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

表是數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的基本單位。一個(gè)表包含若干個(gè)字段或記錄。表的操作包括創(chuàng)建新表、修改表和刪除表。這些操作都是數(shù)據(jù)庫(kù)管理中最基本,也是最重要的操作。

一、創(chuàng)建表

創(chuàng)建表是指在已存在的數(shù)據(jù)庫(kù)中建立新表。這是建立數(shù)據(jù)庫(kù)最重要的一步,是進(jìn)行其他表操作的基礎(chǔ)。

1、創(chuàng)建表的語(yǔ)法形式

MySQL中,創(chuàng)建表是通過SQL語(yǔ)句CREATE TABLE實(shí)現(xiàn)的。其語(yǔ)法格式如下:

create table 表名(屬性名 數(shù)據(jù)類型 [完整性約束條件],
                  屬性名 數(shù)據(jù)類型 [完整性約束條件],
                  ...
                  );

其中,“表名”參數(shù)表示所要?jiǎng)?chuàng)建的表的名稱;“屬性名”參數(shù)表示表中字段的名稱;“數(shù)據(jù)類型”參數(shù)指定字段的數(shù)據(jù)類型,“完整性約束條件”參數(shù)指定字段的某些特殊約束條件。

2、設(shè)置表的主鍵

主鍵是表的一個(gè)特殊字段。該字段能唯一地標(biāo)識(shí)該表中的每條信息。主鍵和記錄的關(guān)系,如同身份證和人的關(guān)系。主鍵用來標(biāo)識(shí)每個(gè)記錄,每個(gè)記錄的主鍵值都不同。身份證是用來標(biāo)明人的身份,每個(gè)人都具有唯一的身份證號(hào)。設(shè)置表的主鍵指在創(chuàng)建表時(shí)設(shè)置表的某個(gè)字段為該表的主鍵。

主鍵的主要目的是幫助MySQL以最快的速度查找到表中的某一個(gè)條信息。主鍵必須滿足的條件就是主鍵必須是唯一的,表中任意兩條記錄的主鍵字段的值不能相同;主鍵的值是非空值。主鍵可以是單一的字段,也可以是多個(gè)字段的組合。

1、單字段主鍵

主鍵是由一個(gè)字段構(gòu)成時(shí),可以直接在該字段的后面加上PRIMARY KEY來設(shè)置主鍵。語(yǔ)法規(guī)則如下:

屬性名 數(shù)據(jù)類型 PRIMARY KEY

其中,“屬性名”參數(shù)表示表中字段的名稱;“數(shù)據(jù)類型”參數(shù)指定字段的數(shù)據(jù)類型。

下面在example1表中設(shè)置stu_id作為主鍵,SQL代碼如下:

create table example1(
	stu_id int PRIMARY KEY,
	stu_name VARCHAR(20),
	stu_sex boolean
);

運(yùn)行創(chuàng)建語(yǔ)句后,example1表中包含3個(gè)字段。stu_id字段是整型;stu_name字段是字符串型;stu_sex是布爾型。其中,stu_id字段是主鍵。

2、多字段主鍵

主鍵是由多個(gè)屬性組合而成時(shí),在屬性定義完之后統(tǒng)一設(shè)置主鍵。語(yǔ)法規(guī)則如下:

primary key(屬性名1,屬性名2,...屬性名n)

3、設(shè)置表的外鍵

外鍵是表的一個(gè)特殊字段。如果字段sno是一個(gè)表A的屬性,且依賴于表B的主鍵。那么,稱表B為父表,表A為子表,sno為表A的外鍵。通過sno字段將父表B和子表A建立關(guān)聯(lián)關(guān)系。設(shè)置表的外鍵指在創(chuàng)建表設(shè)置某個(gè)字段為外鍵。

設(shè)置外鍵的原則就是必須依賴于數(shù)據(jù)庫(kù)中已存在的父表的主鍵;外鍵可以為空值。

外鍵的作用是建立該表與其父表的關(guān)聯(lián)關(guān)系。父表中刪除某條信息時(shí),子表中與之對(duì)應(yīng)的信息也必須有相應(yīng)的改變。例如,stu_id是student表的主鍵,stu_id是grade表的外鍵。當(dāng)stu_id為“123”同學(xué)退學(xué)了,需要從student表中刪除該學(xué)生的信息。那么,grade表中stu_id為“123”的所有信息也應(yīng)該同時(shí)刪除。這樣可以保證信息的完整性。

設(shè)置外鍵的基本語(yǔ)法規(guī)則如下:

constraint 外鍵別名 foreign key (屬性1.1,屬性1.2,...,屬性1.n)
            references 表名(屬性2.1,屬性2.2,...,屬性2.n)

其中,“外鍵別名”參數(shù)是為外鍵的代號(hào);“屬性1”參數(shù)列表是子表中設(shè)置的外鍵;“表名”參數(shù)是指父表的名稱;“屬性2”參數(shù)列表是父表的主鍵。

4、設(shè)置表的非空約束

非空性是指字段的值不能為空值(NULL)。非空約束將保證所有記錄中該字段都有值。如果用戶新插入的記錄中,該字段為空值,則數(shù)據(jù)庫(kù)系統(tǒng)會(huì)報(bào)錯(cuò)。例如,在id字段加上非空約束,id字段的值就不能為空值。如果插入記錄的id字段的值為空,該記錄將不能插入。設(shè)置表的非空約束是指在創(chuàng)建表時(shí)為表的某些特殊字段加上NOT NULL約束條件。

設(shè)置非空約束的基本語(yǔ)法規(guī)則如下:

屬性名 數(shù)據(jù)類型 NOT NULL

下面在example4表中設(shè)置字段id和name的非空約束。SQL代碼如下:

create table example4(
	id int not null primary key,
	name varchar(20) not null,
	stu_id int,
	constraint d_fk foreign key (stu_id)
	references example1(stu_id)
);

代碼運(yùn)行后,example4表中包含3個(gè)字段。其中,id字段為主鍵;id和name字段為非空字段,這兩個(gè)字段的值不能為空值(NULL);stu_id字段為外鍵;d_fk為外鍵的別名;example1表為example4表的父表;example4的外鍵依賴于父表的主鍵stu_id。

5、設(shè)置表的唯一性約束

唯一性是指所有記錄中該字段的值不能重復(fù)出現(xiàn)。設(shè)置表的唯一性約束是指在創(chuàng)建表時(shí),為表的某些特殊字段加上UNIQUE約束條件。唯一性約束將保證所有記錄中該字段的值不能重復(fù)出現(xiàn)。例如,在id字段加上唯一性約束,所以記錄中id字段上不能出現(xiàn)相同的值。例如,在表的id字段加上唯一性約束,那么每條記錄的id值都是唯一的,不能出現(xiàn)重復(fù)的情況。如果一條的記錄的id為‘0001’,那么該表中就不能出現(xiàn)另一條記錄的id為‘0001’。設(shè)置唯一性約束的基本語(yǔ)法規(guī)則如下:

屬性名 數(shù)據(jù)類型 UNIQUE

6、設(shè)置表的屬性值自動(dòng)增加

AUTO_INCREMENT是MySQL數(shù)據(jù)庫(kù)中一個(gè)特殊的約束條件。其主要用于為表中插入的新記錄自動(dòng)生成唯一的ID。一個(gè)表只能有一個(gè)字段使用AUTO_INCREMENT約束,且該字段必須為主鍵的一部分。AUTO_INCREMENT約束的字段可以是任何整數(shù)類型(TINYINT、SMALLINT、INT和BIGINT等)。默認(rèn)情況下,該字段的值是從1開始自增。

設(shè)置屬性值字段增加的基本語(yǔ)法規(guī)則如下:

屬性名 數(shù)據(jù)類型 AUTO_INCREMENT

下面在example6表中設(shè)置字段id的值自動(dòng)增加。SQL代碼如下:

create table example6(
	id int primary key auto_increment,
	stu_id int unique,
	name varchar(20) not null
);

代碼運(yùn)行后,example6表中包含3個(gè)字段。其中,id字段為主鍵,且每插入一條新記錄id的值會(huì)自動(dòng)增加;stu_id字段為唯一值,該字段的值不能重復(fù);name字段為非空字段,該字段的值不能為空值(NULL)。

在插入記錄時(shí),默認(rèn)的情況下自增字段的值從1開始自增。例如,example6表中的id字段被設(shè)置成自動(dòng)增加,默認(rèn)情況第一條記錄的id值為1。以后每增加一條記錄,該記錄的id值都會(huì)在前一條記錄的基礎(chǔ)上加1。

如果第一條記錄設(shè)置了該字段的初值,那么新增加的記錄就從初值開始自增。例如,如果example6表中插入的第一條記錄的id值設(shè)置為8,那么再插入記錄的id值就會(huì)從8開始往上增加。

7、設(shè)置表的屬性的默認(rèn)值

在創(chuàng)建表時(shí)可以指定表中的字段的默認(rèn)值。如果插入一條新的記錄時(shí)沒有為這個(gè)字段賦值,那么數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)為這個(gè)字段插入默認(rèn)值。默認(rèn)值是通過DEFAULT關(guān)鍵字來設(shè)置的。設(shè)置默認(rèn)值的基本語(yǔ)法規(guī)則如下:

屬性名 數(shù)據(jù)類型 DEFAULT 默認(rèn)值

下面在example7表中設(shè)置字段id的值自動(dòng)增加。SQL代碼如下:

create table example7(
	id int primary key auto_increment,
	stu_id int unique,
	name varchar(20) not null,
	English varchar(20) default 'zero',
	Math float default 0,
	Computer float default 0
);

代碼運(yùn)行后,example7表中包含6個(gè)字段。其中,id字段為主鍵,且每插入一條新記錄id的值會(huì)自動(dòng)增加;stu_id字段為唯一值,該字段的值不能重復(fù);name字段為非空字段,該字段的值不能為空值(NULL);English字段的默認(rèn)值為zero;Math字段和Computer字段的默認(rèn)值為0。如果沒有使用DEFAULT關(guān)鍵字指定字段的默認(rèn)值,也沒有指定字段為非空,那么字段的默認(rèn)值為空(NULL)。

二、查看表結(jié)構(gòu)

查看表結(jié)構(gòu)是指查看數(shù)據(jù)庫(kù)中已存在的表的定義。查看表結(jié)構(gòu)的語(yǔ)句包括DESCRIBE語(yǔ)句和SHOW CREATE TABLE語(yǔ)句。通過這兩個(gè)語(yǔ)句,可以查看表的字段名、字段的數(shù)據(jù)類型和完整性約束條件等。

1、查看表基本結(jié)構(gòu)語(yǔ)句DESCRIBE

MySQL中,DESCRIBE語(yǔ)句可以查看表的基本定義。其中包括,字段名、字段數(shù)據(jù)類型、是否為主鍵和默認(rèn)值等。DESCRIBE語(yǔ)句的語(yǔ)法形式如下:

DESCRIBE 表名;

其中,“表名”參數(shù)指所要查看的表的名稱。

下面用DESCRIBE語(yǔ)句查看example1表的定義,代碼如下:

DESCRIBE example1;

通過DESCRIBE語(yǔ)句,可以查出example1表包含stu_id、stu_name和stu_sex字段。同時(shí),結(jié)果中顯示了字段的數(shù)據(jù)類型(Type)、是否為空(Null)、是否為主外鍵(Key)、默認(rèn)值(Default)和額外信息(Extra)。

DESCRIBE可以縮寫成DESC。

下面直接使用DESC查看example1表的結(jié)構(gòu)。代碼如下:

DESC example1;

2、查看表詳細(xì)結(jié)構(gòu)語(yǔ)句SHOW CREATE TABLE

MySQL中,SHOW CREATE TABLE語(yǔ)句可以查看表的詳細(xì)定義。該語(yǔ)句可以查看表的字段名、字段的數(shù)據(jù)類型、完整性約束條件等信息。除此之外,還可以查看表默認(rèn)的存儲(chǔ)引擎和字符編碼。SHOW CREATE TABLE語(yǔ)句的語(yǔ)法形式如下:

show create table 表名;

其中,“表名”參數(shù)指所要查看的表的名稱。

下面是用SHOW CREATE TABLE語(yǔ)句查看example1表的定義,代碼如下:

show create table example1 

三、修改表

修改表是指修改數(shù)據(jù)庫(kù)中已存在的表的定義。修改表比重新定義表簡(jiǎn)單,不需要重新加載數(shù)據(jù),也不會(huì)影響正在進(jìn)行的服務(wù)。MySQL中通過ALTER TABLE語(yǔ)句來修改表。修改表包括修改表名、修改字段數(shù)據(jù)類型、修改字段名、增加字段、刪除字段、修改字段的排列位置、更改默認(rèn)存儲(chǔ)引擎和刪除表的外鍵約束等。

1、修改表名

表名可以在一個(gè)數(shù)據(jù)庫(kù)中唯一的確定一張表。數(shù)據(jù)庫(kù)系統(tǒng)通過表名來區(qū)分不同的表。例如,數(shù)據(jù)庫(kù)school中有student表。那么,student表就是唯一的。在數(shù)據(jù)庫(kù)school中不可能存在另一個(gè)名為student的表。MySQL中,修改表名是通過SQL語(yǔ)句ALTER TABLE實(shí)現(xiàn)的。其語(yǔ)法形式如下:

ALTER TABLE 舊表名 RENAME [TO] 新表名;

其中,“舊表名”參數(shù)表示修改前的表名:“新表名”參數(shù)表示修改后的新表名;TO參數(shù)是可選參數(shù),其是否在語(yǔ)句中出現(xiàn)不會(huì)影響語(yǔ)句的執(zhí)行。

下面是將example0改名為user表,SQL代碼如下;

alter table example0 rename user;

2、修改字段的數(shù)據(jù)類型

字段的數(shù)據(jù)類型包括整數(shù)類型、浮點(diǎn)數(shù)型、字符串型、二進(jìn)制類型、日期和時(shí)間類型等。數(shù)據(jù)類型決定了數(shù)據(jù)的存儲(chǔ)格式、約束條件和有效范圍。表中的每個(gè)字段都有數(shù)據(jù)類型。MySQL中,ALTER TABLE語(yǔ)句也可以修改字段的數(shù)據(jù)類型。其基本語(yǔ)法如下:

ALTER TABLE 表名 MODIFY 屬性名 數(shù)據(jù)類型;

其中,“表名”參數(shù)指所要修改的表的名稱;“屬性名”參數(shù)指需要修改的字段的名稱;“數(shù)據(jù)類型”參數(shù)指修改后的新數(shù)據(jù)類型。

下面將修改user表中name字段的數(shù)據(jù)類型。SQL代碼如下:

alter table user MODIFY name varchar(30)

代碼運(yùn)行成功后查看user的表的結(jié)構(gòu)。

我們發(fā)現(xiàn)表的類型長(zhǎng)度已經(jīng)變了。

3、修改字段名

字段名可以在一張表中唯一的確定一個(gè)字段。數(shù)據(jù)庫(kù)系統(tǒng)通過字段名來區(qū)分表中的不同字段。例如,student表中包含id字段。那么,id字段在student表中是唯一的。student表中不可能存在另一個(gè)名為“id”的字段。MySQL中,ALTER TABLE語(yǔ)句也可以修改表的字段名。其基本語(yǔ)法如下:

ALTER TABLE 表名 CHANGE 舊屬性名 新屬性名 新數(shù)據(jù)類型;

其中,“舊屬性名”參數(shù)指修改前的字段名;“新屬性名”參數(shù)指修改后的字段名;“新參數(shù)類型”參數(shù)修改后的數(shù)據(jù)類型,如不需要修改,則將新數(shù)據(jù)類型設(shè)置成與原來一樣。

1、只修改字段名

使用ALTER TABLE語(yǔ)句可以直接修改字段名,不改變?cè)撟侄蔚臄?shù)據(jù)類型。

下面將example1表中stu_name字段改名為name,且不改變數(shù)據(jù)類型。由于不改變?cè)撟侄蔚臄?shù)據(jù)類型,需要知道該字段現(xiàn)在的數(shù)據(jù)類型。

在執(zhí)行ALTER TABLE語(yǔ)句之前,先用DESC語(yǔ)句查看example1表的結(jié)構(gòu)。其中可以看到example1表中存在stu_name字段,以便與修改后進(jìn)行對(duì)比。并且可以知道stu_name字段現(xiàn)在的數(shù)據(jù)類型。desc語(yǔ)句執(zhí)行后的顯示結(jié)果如下:

從查詢結(jié)果可以看出,example1表中存在stu_name字段,且數(shù)據(jù)類型為varchar(20)。修改example1表中字段的SQL代碼如下:

alter table example1 change stu_name name varchar(20);

代碼執(zhí)行完畢后,驗(yàn)證一下是否已經(jīng)修改了屬性的名字,使用desc語(yǔ)句重新查看。

查詢結(jié)果顯示,example1表中已經(jīng)不存在stu_name字段,取而代之的是name字段。而且,字段的數(shù)據(jù)類型沒有發(fā)生改變。

2、修改字段名稱和字段數(shù)據(jù)類型

使用ALTER TABLE語(yǔ)句可以直接修改字段名和該字段的數(shù)據(jù)類型。

下面將example1表中stu_sex字段改名為sex,且數(shù)據(jù)類型改為INT(2)。SQL代碼如下:

alter table example1 change stu_sex sex int(2)

我們查看是否修改成功:

從查詢結(jié)果可以看出,我們已經(jīng)修改成功了。

4、增加字段

在創(chuàng)建表時(shí),表中的字段就已經(jīng)定義完成。如果要增加新的字段,可以通過ALTER TABLE語(yǔ)句進(jìn)行增加。在MySQL中,ALTER TABLE語(yǔ)句增加字段的基本語(yǔ)法如下:

alter table 表名 add 屬性名1 數(shù)據(jù)類型 [完整性約束條件] [FIRST | AFTER 屬性名2];

其中,“屬性名1”參數(shù)指需要增加的字段的名稱;“數(shù)據(jù)類型”參數(shù)指新增加字段的數(shù)據(jù)類型;“完整性約束條件”是可選參數(shù),用來設(shè)置新增字段的完整性約束條件;“FIRST”參數(shù)也是可選參數(shù),其作用是將新增字段添加到“屬性名2”所指的字段后。如果執(zhí)行的SQL語(yǔ)句中沒有“FIRST” “AFTER 屬性名2”參數(shù)指定新增字段的位置,新增的字段默認(rèn)為表的最后一個(gè)字段。

1、增加無(wú)完整性約束條件的字段

一個(gè)完整的字段包括字段名、數(shù)據(jù)類型和完整性約束條件。增加字段一般包括上述內(nèi)容。根據(jù)實(shí)際情況,一些字段可以不用完整性約束條件進(jìn)行約束。

下面將在user表中增加一個(gè)沒有完整性約束條件約束的phone字段。SQL代碼如下:

alter table user add phone varchar(20);

使用desc語(yǔ)句查看一下是否添加成功。

2、增加有完整性約束條件的字段

增加字段時(shí)可以設(shè)置該字段的完整性約束條件,如設(shè)置字段是否為空(Null)、是否為主外鍵(Key)、默認(rèn)值(Default)和是否為自增類型等約束條件。

下面將在user表中增加一個(gè)有非空約束的age字段,SQL代碼如下;

alter table user add age int(4) not null;

使用desc查詢是否增加成功。

3、表的第一個(gè)位置增加字段

默認(rèn)情況下,新增字段為表的最后一個(gè)字段。如果加上FIRST參數(shù),則可以將新增字段設(shè)置為表的第一個(gè)字段。

下面將在user表中第一個(gè)位置增加num字段,并設(shè)置num字段為主鍵。SQL代碼如下:

alter table user add num int(8) primary key first; 

我們使用desc查看是否添加成功。

可以看到添加成功。

4、表的指定位置之后增加字段

在增加字段時(shí),由于特殊原因需要在表的指定位置增加字段。如果加上“AFITER 屬性名2”參數(shù),那么新增的字段插入在“屬性名2”后面。

下面將在user表的phone字段后增加address字段,并設(shè)置address字段為非空。SQL代碼如下:

alter table user add address varchar(30) not null after phone;

我們使用desc來查看是否添加屬性正確。

我們看到確實(shí)屬性添加到指定位置了。

5、刪除字段

刪除字段是指刪除已經(jīng)定義好的表中的某個(gè)字段。在表創(chuàng)建完之后,如果發(fā)現(xiàn)某個(gè)字段需要?jiǎng)h除,可以采用將整個(gè)表都刪除,然后重新創(chuàng)建一張表的做法。這樣做是可以達(dá)到目的,但必然會(huì)影響到表中的數(shù)據(jù)。而且,操作比較麻煩。MySQL中,ALTER TABLE語(yǔ)句也可以刪除表中的字段。其基本語(yǔ)法如下:

alter table 表名 drop 屬性名;

其中,“屬性名”參數(shù)指需要從表中刪除的字段的名稱。

下面將從user表中刪除id字段。SQL代碼如下:

alter table user drop id;

我們使用desc來查看是否刪除成功。

我們可以看到?jīng)]有了id屬性了。

6、修改字段的排列位置

創(chuàng)建表的時(shí)候,字段在表中的排列位置就已經(jīng)確定了。如果要改變字段在表中的排列位置,則需要ALTER TABLE語(yǔ)句來處理。MySQL中,修改字段排列位置的ALTER TABLE語(yǔ)句的基本語(yǔ)法如下:

alter table 表名 modify 屬性名1 數(shù)據(jù)類型 first | after 屬性名2;

其中,“屬性名1”參數(shù)指需要修改位置的字段的名稱:“數(shù)據(jù)類型”參數(shù)指“屬性名1”的數(shù)據(jù)類型;“first”參數(shù)指定位置為表的第一個(gè)位置;“after 屬性名2”參數(shù)指定“屬性名1”插入在“屬性名2”之后。

1、字段修改到第一個(gè)位置

FIRST參數(shù)可以指定字段為表的第一個(gè)字段。

下面將user表中name字段修改為該表的第一個(gè)字段。SQL代碼如下:

alter table user modify name varchar(30) first;

使用desc查看一下是否修改成功。

我們可以看到name已經(jīng)到第一個(gè)字段了。

2、字段修改到指定位置

“AFTER”參數(shù)可以將字段排在表中指定的字段之后。

下面將user表中sex字段修改到age字段之后,SQL代碼如下:

alter table user modify sex tinyint(1) after age;

我們通過desc來查看是否修改成功

我們可以看到已經(jīng)修改成功。

7、更改表的存儲(chǔ)引擎

MySQL存儲(chǔ)引擎是指MySQL數(shù)據(jù)庫(kù)中表的存儲(chǔ)類型。MySQL存儲(chǔ)引擎包括InnoDB、MyISAM、MEMORY等。不同的表類型有著不同的優(yōu)缺點(diǎn),在創(chuàng)建表時(shí),存儲(chǔ)引擎就已經(jīng)設(shè)定好了。如果要改變,可以通過重新常見一張表來實(shí)現(xiàn)。這樣做是可以達(dá)到目的,但必然會(huì)影響到表中的數(shù)據(jù)。而且,操作比較麻煩。MySQL中,ALTER TABLE語(yǔ)句也可以更改表的存儲(chǔ)引擎的類型。其基本語(yǔ)法如下:

ALTER TABLE 表名 ENGINE=存儲(chǔ)引擎名;

其中,“存儲(chǔ)引擎名”參數(shù)指設(shè)置的新存儲(chǔ)引擎的名稱。

下面將user表的存儲(chǔ)引擎改為MyISAM,SQL代碼如下:

alter table user engine=MyISAM;

我們使用show create table語(yǔ)句查看一下是否修改成功。

可以看到已經(jīng)修改成功。

8、刪除表的外鍵約束

外鍵是一個(gè)特殊字段,其將某一表與其父表建立關(guān)聯(lián)關(guān)系。在創(chuàng)建表的時(shí)候,外鍵約束就已經(jīng)設(shè)定好了。由于特殊需要,與父表之間的關(guān)聯(lián)關(guān)系需要去除,要求刪除外鍵約束。MySQL中,ALTER TABLE 語(yǔ)句也可以刪除表的外鍵約束。其基本語(yǔ)法如下:

alter table 表名 drop foreign key 外鍵別名;

其中,“外鍵別名”參數(shù)指創(chuàng)建表時(shí)設(shè)置的外鍵的代號(hào)。

四、刪除表

刪除表是指刪除數(shù)據(jù)庫(kù)中已存在的表。刪除表時(shí),會(huì)刪除表中的所有數(shù)據(jù)。因此,在刪除表時(shí)要特別注意。MySQL中通過DROP TABLE語(yǔ)句來刪除表。由于創(chuàng)建表時(shí)可能存在外鍵約束,一些表成為了與之關(guān)聯(lián)的表的父表。要?jiǎng)h除這些父表,情況比較復(fù)雜。

1、刪除沒有被關(guān)聯(lián)的普通表

MySQL中,直接使用drop table語(yǔ)句可以刪除沒有被其他關(guān)聯(lián)的普通表。其基本語(yǔ)法如下:

drop table 表名;

其中,“表名”參數(shù)為要?jiǎng)h除的表的名稱。

下面將刪除example5表。SQL代碼如下:

drop table example5;

2、刪除被其他表關(guān)聯(lián)的父表

下面我們要?jiǎng)h除example1表。SQL代碼如下:

drop table example1;

可以看到刪除結(jié)果失敗,原因?yàn)橛型怄I依賴于該表。因?yàn)閑xample4表依賴于example1表。example4表的外鍵stu_id依賴于example1表的主鍵。example1表是example4表的父表。如果要?jiǎng)h除example4表,必須先去掉這種依賴關(guān)系。最簡(jiǎn)單直接的辦法是,先刪除子表example4,然后再刪除父表example1。但這樣可能會(huì)影響子表的其他數(shù)據(jù);另一種辦法是,先刪除子表的外鍵約束,然后再刪除父表。這種辦法,不會(huì)影響子表的其他數(shù)據(jù),可以保證數(shù)據(jù)庫(kù)的安全。

首先,刪除example4表的外鍵約束。先用show create table語(yǔ)句查看example4表的外鍵別名,執(zhí)行如下:

查詢結(jié)果顯示,example4表的外鍵別名為d_fk。然后執(zhí)行alter table語(yǔ)句,刪除example4表的外鍵約束。刪除example4表的外鍵的SQL語(yǔ)句如下:

alter table example4 drop foreign key d_fk;

現(xiàn)在我們?cè)俅尾榭磂xample4表中還有沒有外鍵約束。

可以看到已經(jīng)沒有外鍵約束了。

現(xiàn)在,可以直接使用drop table語(yǔ)句刪除example1表。SQL代碼如下:

drop table example1;

補(bǔ)充:MySQL 常用字段類型

一個(gè)數(shù)據(jù)表是由若干個(gè)字段組成的,一個(gè)表十幾個(gè)字段也很正常,每個(gè)字段表示不同的信息,需要使用不同類型的數(shù)據(jù)。

所以在創(chuàng)建表的時(shí)候,要為每個(gè)字段指定適合的數(shù)據(jù)類型。

MySQL 中常用的字段類型有以下這些:

1. 整數(shù)類型

數(shù)據(jù)類型數(shù)據(jù)范圍
TINYINT-128 -- 127
SMALLINT-32768 -- 32767
MEDIUMINT-2^23 -- 2^23-1
INT-2^31 -- 2^31-1
BIGINT-2^63 -- 2^63-1

2. 字符串類型

數(shù)據(jù)類型字節(jié)范圍用途
CHAR(n)0 -- 255字節(jié)定長(zhǎng)字符串
VARCHAR(n)0 -- 65535字節(jié)變長(zhǎng)字符串
TEXT0 -- 65535字節(jié)長(zhǎng)文本數(shù)據(jù)
LONGTEXT0 -- 2^32-1字節(jié)極大文本數(shù)據(jù)
BLOB0 -- 65535字節(jié)二進(jìn)制長(zhǎng)文本數(shù)據(jù)
LONGBLOB0 -- 2^32-1字節(jié)二進(jìn)制極大文本數(shù)據(jù)

3. 小數(shù)類型

m 表示浮點(diǎn)數(shù)的總長(zhǎng)度,n 表示小數(shù)點(diǎn)后有效位數(shù)。

數(shù)據(jù)類型數(shù)據(jù)用法數(shù)據(jù)范圍
FloatFloat(m,n)7位有效數(shù)
DoubleDouble(m,n)15位有效數(shù)
DecimalDecimal(m,n)28位有效數(shù)

4. 時(shí)間類型

數(shù)據(jù)類型格式用途
DATEYYYY-MM-DD日期
TIMEHH:MM:SS時(shí)間
YEARYYYY年份
DATETIMEYYYY-MM-DD HH:MM:SS日期和時(shí)間
TIMESTAMP10位或13位整數(shù)(秒數(shù))時(shí)間戳

5. 枚舉類型

enum(枚舉值1,枚舉值2,...)

枚舉類型只能在列出的值中選擇一個(gè),如性別。

五、總結(jié)

這里的相關(guān)內(nèi)容還沒有整理完畢,文章后面持續(xù)更新,建議收藏。

文章中涉及到的命令大家一定要像我一樣每個(gè)都敲幾遍,只有在敲的過程中才能發(fā)現(xiàn)自己對(duì)命令是否真正的掌握了。

到此這篇關(guān)于MySQL創(chuàng)建、修改和刪除表操作的文章就介紹到這了,更多相關(guān)MySQL創(chuàng)建 修改 刪除表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL進(jìn)階之索引

    MySQL進(jìn)階之索引

    索引就是一種數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)類似,鏈表,樹等等。但是比它們要復(fù)雜的多,索引(index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(有序),本文詳細(xì)介紹了MySQL索引,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • Mysql用戶權(quán)限分配實(shí)戰(zhàn)項(xiàng)目詳解

    Mysql用戶權(quán)限分配實(shí)戰(zhàn)項(xiàng)目詳解

    用戶是數(shù)據(jù)庫(kù)的使用者和管理者,MySQL通過用戶的設(shè)置來控制數(shù)據(jù)庫(kù)操作人員的訪問與操作范圍,這篇文章主要給大家介紹了關(guān)于Mysql用戶權(quán)限分配實(shí)戰(zhàn)項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • MySQL連接時(shí)出現(xiàn)2003錯(cuò)誤的實(shí)現(xiàn)

    MySQL連接時(shí)出現(xiàn)2003錯(cuò)誤的實(shí)現(xiàn)

    本文主要介紹了MySQL連接時(shí)出現(xiàn)2003錯(cuò)誤的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • ubuntu20.04?安裝?MySQL5.7過程記錄

    ubuntu20.04?安裝?MySQL5.7過程記錄

    這篇文章主要介紹了ubuntu20.04?安裝?MySQL5.7過程記錄的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • MySql通過ip地址進(jìn)行訪問的方法

    MySql通過ip地址進(jìn)行訪問的方法

    這篇文章主要介紹了MySql通過ip地址進(jìn)行訪問的方法,首先要登錄mysql,切換數(shù)據(jù)庫(kù)然后授權(quán),具體代碼詳情大家參考下本文
    2018-06-06
  • MySQL8.0.18配置多主一從

    MySQL8.0.18配置多主一從

    主從復(fù)制是指數(shù)據(jù)可以從一個(gè)MySQL數(shù)據(jù)庫(kù)服務(wù)器主節(jié)點(diǎn)復(fù)制到一個(gè)或多個(gè)從節(jié)點(diǎn),本文詳細(xì)的介紹了MySQL8.0.18配置多主一從,感興趣的可以了解一下
    2021-06-06
  • MySQL中數(shù)據(jù)導(dǎo)入恢復(fù)的簡(jiǎn)單教程

    MySQL中數(shù)據(jù)導(dǎo)入恢復(fù)的簡(jiǎn)單教程

    這篇文章主要介紹了MySQL中數(shù)據(jù)導(dǎo)入恢復(fù)的簡(jiǎn)單教程,主要用到了LOAD DATA語(yǔ)句,需要的朋友可以參考下
    2015-05-05
  • 總結(jié)三道MySQL聯(lián)合索引面試題

    總結(jié)三道MySQL聯(lián)合索引面試題

    這篇文章主要介紹了總結(jié)三道MySQL聯(lián)合索引面試題,眾所周知MySQL聯(lián)合索引遵循最左前綴匹配原則,在少數(shù)情況下也會(huì)不遵循,創(chuàng)建聯(lián)合索引的時(shí)候,建議優(yōu)先把區(qū)分度高的字段放在第一列
    2022-08-08
  • Mysql Sql語(yǔ)句注釋大全

    Mysql Sql語(yǔ)句注釋大全

    這篇文章主要介紹了Mysql Sql語(yǔ)句注釋大全,需要的朋友可以參考下
    2017-07-07

最新評(píng)論