MySQL基本表的定义、删除与修改


定义基本表

在MySQL语言中,使用CREATE TABLE 语句定义基本表,其基本格式如下:

CREATE TABLE <表名> (
	<列名><数据类型> [列级完整性约束条件],
	<列名><数据类型> [列级完整性约束条件],
	...
	[表级完整性约束条件]
);
1
2
3
4
5
6

TIP

  • 在创建数据表之前,应使用语句“USE<数据库>”指定操作在哪个数据库中进行,如果没有选择数据库,就会抛出 No database selected 的错误。默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。
  • 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROPALTERINSERT等。
  • 数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。

建立一个 学生表 student

CREATE TABLE student (
	sno CHAR ( 9 ) PRIMARY KEY,  -- 列级完整性约束条件,sno是主码
	sname CHAR ( 20 ) UNIQUE,    -- sname 取唯一值
	ssex CHAR ( 2 ),
	sage SMALLINT,  
	sdept CHAR ( 20 )    
);
1
2
3
4
5
6
7

建立一个 课程表 course

CREATE TABLE course (
	cno CHAR ( 4 ) PRIMARY KEY,  -- 列级完整性约束条件,cno是主码
	cname CHAR ( 40 ) NOT NULL,  -- 列级完整性约束条件,cname 不能取空值
	cpno CHAR ( 4 ),
	ccredit SMALLINT,
	FOREIGN KEY ( cpno ) REFERENCES course ( cno ) 
);  -- 表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno 
1
2
3
4
5
6
7

建立 学生选课表 sc

CREATE TABLE sc (
	sno CHAR ( 9 ),
	cno CHAR ( 4 ),
	grade SMALLINT,
	PRIMARY KEY ( sno, cno ),  -- 主码由两个属性构成,必须作为表级完整性进行定义
	FOREIGN KEY ( sno ) REFERENCES student ( sno ),  -- 表级完整性约束条件,sno是外码,被参照表是student,被参照列是sno 
    FOREIGN KEY ( cno ) REFERENCES course ( cno )  -- 表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno 
);  
1
2
3
4
5
6
7
8

数据类型

常见的一些数据类型:

数据类型含义存储需求
CHAR(n)长度为 n 的定长字符串n 个字节,1<=n<=255
VARCHAR(n)最大长度为 n 的变长字符串m+1 个字节,l< = n和 1<=n<=255
INT (INTEGHR)普通大小的整数4 个字节
BIGINT大整数8 个字节
SMALLINT小的整数2 个字节
FLOAT单精度浮点数4 个字节
DOUBLE双精度浮点数8 个字节
DATEYYYY-MM-DD3 个字节
TIMEHH:MM:SS3 个字节
BINARY(n)固定长度二进制字符串n 个字节
VARBINARY(n)可变长度二进制字符串n+1 个字节

删除基本表

当某个基本表不再被需要时,可以使用 DROP TABLE 语句可以删除一个或多个数据表,语法格式如下:

DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]
1

TIP

  • 表名1, 表名2, 表名3 ...表示要被删除的数据表的名称。DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。
  • IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。

修改基本表

在 MySQL 中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等。其语法格式如下:

ALTER TABLE <表名> [修改选项]
1

其中修改选项的语法格式如下:

{ 
ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名> 
}
1
2
3
4
5
6
7
8
9
10

将 student 表中增加"入学时间"列,数据类型为日期型

ALTER TABLE student ADD s_entrance DATE;
1

将 student 表中年龄的数据类型改为整数

ALTER TABLE student ALTER COLUMN sage INT;   # 执行未成功

ALTER TABLE student MODIFY sage INT;   # 执行成功
1
2
3

增加课程名称时必须取唯一值

ALTER TABLE course ADD UNIQUE(cname);
1

还有一些对基本表其他类型的修改,就不再一一列举了。