sql server笔记1(表的定义)

准备SQL Server环境

/* 创建数据库Test /
CREATE DATABASE Test
GO
/
创建登录名WANG,它的密码是“wang” /
CREATE LOGIN WANG WITH PASSWORD = ‘wang’
GO
/
选择数据库Test,对该数据库执行操作 /
USE Test
GO
/
创建用户WANG,把用户WANG映射到登录名WANG */
CREATE USER WANG FOR LOGIN WAN

定义schema

/* 为用户WANG定义一个模式S-T */
CREATE SCHEMA [S-T] AUTHORIZATION WANG;

删除 schema

DROP SCHEMA [S-T];

表的创立

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*/
);

schema 与 表

CREATE TABLE [S-T].Student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE [S-T].Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES [S-T].Course(Cno)
);
CREATE TABLE [S-T].SC(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno),
FOREIGN KEY (Sno) REFERENCES [S-T].Student(Sno),
FOREIGN KEY (Cno)REFERENCES [S-T].Course(Cno)
);

登录名、用户名、schema、table之间的关系

在这里插入图片描述

基本表的基本操作

添加行

向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;

修改类型

将年龄的数据类型由字符型(假设原来的数据类型是
字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;

索引建立

为学生-课程数据库中的Student,Course,SC三个
表建立索引。Student表按学号升序建唯一索引,Course表
按课程号升序建唯一索引,SC表按学号升序和课程号降序
建唯一索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC)

修改索引名

将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;

删除索引名

删除Student表的Stusname索引
DROP INDEX Stusname;

约束条件

列值非空f(NOT NULL)

在定义SC表时,说明Sno、Cno、Grade属性不允
许取空值。
CREATE TABLE SC
( Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT NOT NULL,
PRIMARY KEY (Sno, Cno),

/* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在
列级不允许取空值的定义 可以不写 * /
);

列值唯一(UNIQUE)

建立部门表DEPT,要求部门名称Dname列取值唯
一,部门编号Deptno列为主码
CREATE TABLE DEPT
( Deptno NUMERIC(2),
Dname CHAR(9) UNIQUE NOT NULL,
/要求Dname列值唯一, 并且不能取空值/
Location CHAR(10),
PRIMARY KEY (Deptno)
);

检查列值是否满足一个条件表达式 CHECK

Student表的Ssex只允许取“男”或“女”。
CREATE TABLE Student
( Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN (‘男’,’女’)),
/*性别属性Ssex只允许取’男’或’女’ */
Sage SMALLINT,
Sdept CHAR(20)
)

check

当学生的性别是男时,其名字不能以Ms.打头。
CREATE TABLE Student
( Sno CHAR(9),
Sname CHAR(8) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno),
CHECK (Ssex=‘女’ OR Sname NOT LIKE ‘Ms.%’)
/定义了元组中Sname和 Ssex两个属性值之间的约束条件/
);

check 、 constraint 、 foreign key

. 使用“BETWEEN AND”方式创建约束check_grade
ALTER TABLE SC ADD CONSTRAINT “check_grade” CHECK
(Grade BETWEEN 0 AND 100)

请为SC表创建名为FK_SC_Student的外键,该外键引用
了表Student的Sno字段
ALTER TABLE SC ADD CONSTRAINT FK_SC_Student
FOREIGN KEY(Sno) REFERENCES Student(Sno)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金石不渝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值