SQL Server建库建表命令

数据库建库建表
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 like8295[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/2000AND 出生日期(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 
发布了14 篇原创文章 · 获赞 2 · 访问量 629

猜你喜欢

转载自blog.csdn.net/zys_shan/article/details/104897503