数据库建库建表
1.直接右键数据库,选择新建数据库;
2.通过新建查询,输入命令建库建表。
使用CREATE DATABASE创建数据库school。
数据文件的逻辑名称自定义,需要注意的点是主数据文件的物理名称需填写存储文件的地址。
CREATE DATABASE school
on primary --表示属于primary文件组
(
name='school_data', --主数据文件的逻辑名称
filename='D:\school_data.dbf', --主数据文件的物理名称
size=5MB, --主数据文件的初始大小
maxsize=1000MB, --主数据文件增长的最大值
filegrowth=10% --主数据文件的增长率
)
log on
(
name='school_log', -- 日志文件的逻辑名称
filename='D:\school_log.ldf',-- 日志文件的物理名称
size=2mb,--日志文件的初始大小
maxsize=20mb, --日志文件增长的最大值
filegrowth=1mb --日志文件的增长率
)
可能遇到的错误:
对文件“e:\school.mdf"的目录查找失败,出现操作系统错误(系统找不到指定的路径。)CREATE DATABASE失败。无法创建列出的某些文件名。
解决方法:检查本地计算机是否存在e盘。
使用create table创建数据表Student。
CREATE TABLE [〈库名〉]〈表名〉(
〈列名〉〈数据类型〉[〈列级完整性约束条件〉]
[,列名]〈数据类型〉[〈列级完整性约束条件〉]]
[,…n]
[,〈表级完整性约束条件〉][,…n] );
要创建一张用户表存储用户数据,需要知道表的结构,如表的名称以及该表中每个列的名称和数据类型,指出每个列中是否允许空值属性等。
注意:数据库中的表包含系统表和用户表。系统表在创建数据库的时候自动生成的,存储数据库和表的相关信息,用户不应该直接更改系统表的内容。
DEFAULT:如果在插入过程中来显式提供值,则指定为列提供的值。
例子:默认值为男——default(‘男’);
PRIMARY KEY:通过唯一索引对给定的一列或多列强制实体完整性的约束。
例子:学号为主键——constraint pk_stu primary key;
UNIQUE:通过唯一索引为给定的一列或多列提供实体完整性的约束。
例子:姓名为唯一约束constraint uk_name unique;
CHECK:通过限制可输入到一列或多列中的可能值强制域完整性的约束。
例子:电话——constraint ck_phone check(phone like ‘8295[0-9][0-9][0-9][0-9]’) 。
student表定义如上图,代码片段如下:
use school --在数据库school中创建一个表
CREATE TABLE student
(
Stu_id Varchar(10) constraint pk_stu primary key NOT NULL,
Stu_name Varchar(10) constraint uk_name unique NOT NULL,
Stu_sex Varchar(2) default (‘男’) NOT NULL,
Birthdate datetime NULL,
Phone Varchar(8) constraint ck_phone check(phone like ‘8295[0-9][0-9][0-9][0-9]’) NULL,
age as year(getdate())-year(birthday),
Address Varchar(100) NULL,
)
学会了设置主键、约束,还很容易遇到组合主键和外键的问题
使用Constraint关键字定义约束方式,可以指定约束名称。
CREATE TABLE Course(
Stu_id Varchar(10)constraint fk_stu_id foreign key references Students(Stu_id) NOT NULL,
Course_id Varchar(4)constraint fk_Course_id foreign key references Course(Course_id) NOT NULL,
constraint pk_sc primary key(Stu_id,Course_id)
)
修改基本表的操作
通过更改、添加、除去列和约束或者通过启用或禁用约束和触发器来更改表。
ALTER TABLE table --table为表名
ALTER COLUMN column_name { data_type[NULL | NOT NULL]}
| ADD
{[<column_definition>]
| column_name AS computed_column_expression
}[…n]
| [WITH CHECK | WITH NOCHECK]
ADD
{<table_constraint>}[…n]
| DROP
{[CONSTRAINT]constraint_name
| COLUMN column [,…n]
| {CHECK | NOCHECK } CONSTRAINT
{ALL | constraint_name [,…n]}
}
1.ALTER COLUMN:指定要更改给定列。
(1)例子:将student表中的Stu_sex字段设为空(null)
use school
ALTER TABLE student
ALTER COLUMN Stu_sex varchar(2) null
2.ADD:指定要添加一个或多个列定义、计算列定义或者表约束。
(2)例子:在student表中添加一列class,类型为varchar(8),字段允许空。
use school
ALTER TABLE student
ADD class varchar(8) NULL
注意:向已存在的表中增加列时,应使新增加的列具有默认值或允许其为空值。添加列完成时,SQL Server将向表中已存在的行填充新增列的默认值或空值。如果既没有提供默认值也不允许为空值,那么新增列的操作将出错,因为SQL Sever不知道该怎么处理那些已经存在的行。
3.DROP {[CONSTRAINT]constraint_name|COLUMN column_name}:指定从表中删除constraint name或者column_name。
(3)例子:将student表中的class字段删除(class字段有约束ck_class1)。
use school
ALTER TABLE student
DROP CONSTRAINT ck_class1,
COLUMN class
4.给表增加约束
ALTER TABLE 表名
ADD CONSTRAINT 检查约束名
CHECK (约束表达式)[,…N]
(4)例子:在school数据库中,为学生表的出生日期列创建一个检查约束,以保证输入的日期数据大于2000年1月1日而小于当天的日期。
ALTER TABLE school
ADD CONSTRAINT ck_bd
CHECK(出生日期)‘01/01/2000’AND 出生日期(GETDATE())
5.给表创建外键
1.使用命令方式创建外键;
2.在创建新表时同时产生外键约束以及为已经存在的表创建外键约束。
ALTER TABLE 表名
ADD CONSTRAINT 约束名
[FOREIGN KEY ] {(列名[,…])}
REFERENCES 参考表名
[( 参考主键列[,…] ) ]
(5)例子:在Class表上,为班级编号Class_id字段创建一个外键约束,从而保证输入有效的班级编号。
ALTER TABLE Class
ADD CONSTRAINT fk_class FOREIGN KEY (班级编号Class_id)
REFERENCES 班级(班级编号Class_id)
建立和删除索引
建立索引是加快表的查询速度的有效手段,索引可以建在该表的一列或多列上。
ASC:升序,DESC:降序,缺省值为ASC
CREATE [UNIQUE] INDEX<索引名>
ON <表名>(<列名1>[<次序>][,<列名2>[<次序>]]…); --<表名>指定要建索引的基本表的名字,<次序>指定索引值的排列次序
(1)例子:在学生表上按学号升序建立唯一索引。
CREATE UNIQUE INDEX Stu_Stu_id ON student(Stu_id)
(2)例子:在班级表上按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX SC ON Class(Stu_id ASC,Course_id DESC)
删除school数据库及数据表
注意:删除数据库前考虑是否需要备份。
DROP DATABASE school --删除数据库,一般很少使用
DROP TABLE student