数据库概论sql---数据定义
数据定义功能包括模式定义、表定义、视图和索引的定义
一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象
1.定义
create schema <模式名> authorization <用户名>
没有指定模式名,模式名隐含为用户名
2.删除
drop schema <模式名> <cascade|restrict>
cascade、restrict两者必选其一。选择cascade,表示删除模式的同时把该模式中所有的数据库对象都删除了;
选择restrict,表示如果该模式已经定义了下属的数据库对象,则拒绝删除语句的执行。只有无下属才执行。
2.基本表的定义和删除
1.定义基本表
直接看例子吧!
【例3.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是被参照表*/
foreign key(cno) references course(cno),
/*表级完整性约束条件,cno是外键,course是被参照表*/
);
一个表只有一个主键,但是它可以有多个属性构成
主码约束 | primary key |
---|---|
唯一性约束 | unique |
非空值约束 | not null |
参照完整性约束 | foreign key |
检查约束 | check |
默认值 | default |
2.数据类型
自行查书P83
3.修改基本表
ALTER TABLE <表名> [ADD [COLUMN] <新列名><数据类型>[完整性约束]] [DROP [COLUMN] <列名> [CASCADE|RESTRICT] ] [DROP CONSTRAINT <完整性约束名>] [ALTER COLUMN <列名> <数据类型>] [CHANGE <旧列名> <新列名> <列类型>] [MODIFY<列名> <数据类型>]; 其中[]为可选项 ,<>为必填项。
1.修改表名:
基本格式: RENAME TABLE [原表名称] TO `[新表名称]; 或者 ALTER TABLE [原表名称] RENAME TO [新表名称];
2.修改列名:
基本格式:ALTER TABLE 表名 CHANGE [旧列名] [新列名] [列类型]。 示例:
ALTER TABLE `t_flightinfo` CHANGE `t_plane_num` `aino` VARCHAR(20) DEFAULT NULL;
3.删除表中的列:
基本格式:ALTER TABLE 表名 DROP [COLUMN] <列名> [CASCADE|RESTRICT] ; 示例:
ALTER TABLE `t_flightinfo` DROP COLUMN t_aflight_num;
4.增加新列、新的列级完整性约束条件、和新的表级完整性约束条件:
基本格式:ALTER TABLE 表名 ADD [COLUMN] <新列名><数据类型>[完整性约束]; 示例:
ALTER TABLE `t_flightinfo` ADD COLUMN `t_fldt` VARCHAR(50) DEFAULT NULL;
5.修改列数据类型:
基本格式:ALTER TABLE 表名 ALTER COLUMN <列名> <数据类型>; 或ALTER TABLE 表名 CHANGE <旧列名> <新列名> <列类型>; 或 ALTER TABLE 表名 MODIFY<列名> <数据类型>; 注:change和modify在MySQL中可以修改表数据类型,alter column不行,仍给出以前学《数据库系统概论》时用Oracle测试执行的alter column的例子 ALTER TABLE student ALTER COLUMN sage INT; MySQL示例:
ALTER TABLE `t_flightinfo` MODIFY `t_load` VARCHAR(20);
ALTER TABLE `t_flightinfo` CHANGE `t_loadt_load` VARCHAR(20);
3.索引的建立和删除
建立索引是加快查询速度的有效手段
1.建立索引
SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
2.修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
3.删除索引
DROP INDEX <索引名>;