MySql的定义功能包括模式定义,表定义,视图定义和索引定义的定义
操作对象 | 创建 | 删除 | 修改 |
---|---|---|---|
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
模式定义与删除
1.模式定义语句:
CREATE SCHEM <模式名>AUTHORIZATION <用户名>;
要创建模式需要拥有管理员的权限或者获得了数据库管理员授予的CREATE SCHEMA 的权限。
2.删除模式
DROP SCHEMA<模式名>CASCADE |RESTRICT>;
其中CASCADE
和RESTRICT
两者必选其一 CASCADE (级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;选择了RESTRICT(限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝删除语句的执行,只有当该模式中没有任何下属的对象时才能执行语句。
基本表的定义与删除
定义基本表
CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]
...
[,<表级完整性约束条件>];
列如:建立一个学生的表’学生’:
列级完整性约束条件
列级完整性约束条件 | 表示 |
---|---|
不能取空值 | NOT NULL |
主码 | PRIMARY KEY |
唯一性 | UNIQUE |
数据类型
数据类型 | 含义 |
---|---|
CHAR(n)、CHARCTER(n) | 长度为n的定长字符串 |
VARCHAR(n)、CHARAcTERVARYING(n) | 长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT 、INTEGER | 长整数(4字节) |
SMALLINT | 短整数(2字节) |
BIGINT | 大整型(8字节) |
REAl | 小数(6位小数精度之后随机输出 |
DOUBLE PRECISION | 小数(15位小数精度之后随机输出) |
FLOAT(n) | 可选精度,精度至少n位数字 |
BOOLEAN | 逻辑布尔量 |
DATA | 日期 |
TIME | 时间 |
模式与表
每一个基本表都属于某一个模式,一个模式包含多个基本表。当定义基本表时一般可以有三种方法定义它所属的模式。现在要在S-T中定义Student,Course,SC等基本表。
方法一:在表名中明显地给出模式名。
CREATE TABLE "S-T".Student(...);
CREATE TABLE "S-T".Course(...);
CREATE TABLE "S-T".SC(...);
方法二,在创建模式语句中同时创建表
方法三,设置所属的模式,这样在创建表时表名中不必给出模式名。
当用户创建基本表时若没有指定模式,系统根据搜索路径来确定该对象所属的模式。
使用下面的语句可以显示当前的搜索路径:
SHOW search_path;
搜索路径的当前默认值是$user,PUBLIC。其含义是首先搜索与用户名相同的模式名,如果该模式名不存在,则使用PUBLIC模式。 数据库管理员也可以设置搜索路径,例如;
SET search_path TO "S-T",PUBLIC;
然后,定义基本表:
CERATE TABLE Student(...);
实际结果是建立了S-T.Studnt基本表。因为关系数据库管理系统发现搜索路径中第一个模式名S-T存在,就把该模式作为基本表Student所属的模式。
修改基本表
SQL语言用ALTER TABLE语句修改基本表,其一般格式为
ALTER TABLE<表名>
[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
[ADD<表级完整性约束>]
[DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
[DROP CONSTRAINT<完整性约束>[RESTRICT|CASCADE]]
[ALTER COLUM<列名><数据类型>];
其中<表名>是要修改的基本表,ADD子句用于增加新列,新的列级完整性约束条件和新的表级完整性约束条件。DROP COLUMN子句用于删除表中的列。DROP CONSTRAINT子句用于删除指定的完整性约束条件。ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型。
向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATE;
不论基本表中原来是否已有数据,新增加的列一律为空值。
将年龄的数据类型由字符型改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
例如:
####### 删除基本表
使用DROP TABLE语句,其一般格式为:
DROP TABLE<表名>[RESTRICT|CASCADE];
若选择RESTRICT,则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。若选择CASCADE,则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除。
例:删学生表
DROP TABLE 学生 CASCADE;
索引的建立与删除(*)
当表的数据量比较大时,查询操作会比较耗时。建立索引是加快查询速度的有效手段。
数据库索引有多种类型,常见索引包括顺序文件上的索引,B+树索引,散列索引,位图索引等。顺序文件上的索引是针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成。B+树索引是将索引属性组织成B+树形式,B+树的叶结点为属性值和相应的元组指针。具有动态平衡的优点。散列索引是建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。散列索引具有查找速度快的特点。位图索引是用位向量记录索引属性中可能出现的值,每一个位向量对应一个可能值。索引虽然能加速数据库查询,但需要占用一定的存储空间,当基本表更新时,,索引要进行相应的维护,这些都会增加数据库的负担。一般来说,建立和删除索引由数据库管理员或表的属主,即建立表的人,负责完成。关系数据库管理系统在执行查询时会自动选择合适的索引作为存取路径,用户不必也不能显示地选择索引。索引是关系数据库管理系统的内部实现技术,属于内模式的范畴 。