MySQL基本表的定义、删除与修改
定义基本表
在MySQL语言中,使用CREATE TABLE 语句定义基本表,其基本格式如下:
CREATE TABLE <表名> (
<列名><数据类型> [列级完整性约束条件],
<列名><数据类型> [列级完整性约束条件],
...
[表级完整性约束条件]
);
1
2
3
4
5
6
2
3
4
5
6
TIP
- 在创建数据表之前,应使用语句“USE<数据库>”指定操作在哪个数据库中进行,如果没有选择数据库,就会抛出 No database selected 的错误。默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。
- 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
- 数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。
建立一个 学生表 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
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
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
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 个字节 |
DATE | YYYY-MM-DD | 3 个字节 |
TIME | HH:MM:SS | 3 个字节 |
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
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
2
3
增加课程名称时必须取唯一值
ALTER TABLE course ADD UNIQUE(cname);
1
还有一些对基本表其他类型的修改,就不再一一列举了。