SQL之数据定义
数据定义:CREATE,DROP,ALTER
1.建立数据库: create database 数据库名·
删除数据库: drop database 数据库名
打开数据库: use 数据库名
说明:打开一个数据库成为当前数据库,同时关闭之前的数据库。
--e.g. create database studemtdb; drop database studentdb; use studentdb;
2.创建系统登录名:create login 登录名 with password=‘密码’ [, default_database=默认数据库] //中括号里面的内容可以没有
删除登录名:drop login 登录名
修改登录名信息:alter login 登录名 with name=新登录名 [, password=‘新密码'][, default_database=默认数据库]
禁用/启用登录名:alter login 登录名 disable/enable
--e.g. create login db001 with password='db123', default_database=dbuser; alter login db001 with name=db002; drop login db001
3.创建当前数据库用户名:create user 用户名 [forlfrom login<登录名>][ with default_schema=<默认架构名>
删除用户名:drop user 用户名
修改用户名信息:alter user 用户名 with name=新用户名 [ , default_schema=<默认架构名>]
--e.g. create user db101 for login db001 with default_schema=dbu001;· alter user db101 with name=db102; drop uesr db101;
4.建立模式: create schema 模式名 [authorization 用户名 ]
说明:缺省[authorization 用户名 ],则为当前用户模式.
删除模式: drop schema 模式名;
说明:删除一个模式,同时删除之中的所有数据库对象。
注:系统管理员(sysadmin)用户的架构名固定为dbo.
--e.g. create schema db001 authorization u1; drop schema db001;
5.基本表的定义(CREATE):
create table表名
( 列名1 数据类型 [default缺省值] [not null]
[constraint<约束名><完整性约束条件>] --列级约束
[,列名2 数据类型 [default缺省值][not null]]
[constraint<约束名><完整性约束条件>] --列级约束
[, [constraint<约束名>] primary key(列名1[,列名2]…)] --表级约束
[, [constraint <约束名>] foreign key (列名1[,列名2]...) references表名(列名1[,列名2].…)] --表级约束
[ on delete cascade] [ on update cascade] --级联删除、更新
[,[constraint<约束名>] check(条件)]); --表级约束
create table student ( sno char(9)constraint pk_student primary key, sname char(9) not null, ssex char(2) , sage smallint, sdept char(15), constraint c_sage check(sage>=12) ); create table course ( cno char(4) constraint pk_course primary key, cname char(20), cpon char(4), ccredit smallint ); create table sc ( sno char(9) not null, cno char(4) not null, grade decimal(5,1), constraint pk_sc primary key(sno,cno), constraint fk_sno foreign key(sno) references student(sno), constraint fk_cno foreign key(cno) references course(cno), constraint c_grade check(grade>=0 and grade<=100) );
修改基本表定义(ALTER):
alter table 表名
add 子句 --增加新列或约束
drop column|constraint 名称 --删除列或约束alter column子句;--修改列定义
check|nocheck constraint 约束名 --启用或禁止约束
alter table student addaddr char(30); alter table student alter column addr char(30) not null; alter table student add constraint uq_adr unique(addr); alter table teach add primary key(tno); alter table student add constraint def_ssex default '女' for ssex; alter table tc add constraint fk_tno foreign key(tno) references teach(tno); alter table student drop constraint uq_adr; alter table student drop column addr; alter table student nocheck constraint up_adr;
删除基本表定义(DROP):
drop table 表名 [restrict|cascade];
6.索引的建立: create [unique/distinct] [clustered] index 索引名 on 表名 (列名[asc/desc][,列名[asc/desc]]…);
说明:distinct ( unique):唯一性索引,不允许表中不同的行在索引列上取相同值。
clustered:聚集索引,元组按索引项的值物理排序。每个表上只能建一个聚集索引,主码是聚集索引项。
asc(升序)/desc(降序):缺省为asc。
create index stud on student(sname desc);
--查询
select sno,sname from student;
注: select<列表>中只有索引项或只有(主码项,索引项)两项时才能看到索引效果,不能使用select * from student看效果。
索引的删除:drop index 索引名 on 表名 ;
可以随时禁止和启用索引。
Alter index stud on student disable;--禁止索引. Alter index stud on student rebuild; --重建索引并启用.