[C#学习笔记24]T-SQL创建数据库、数据表、CRUD、检查约束、外键约束
打开数据库,新建查询,编写操作数据库的代码
基于T-SQL创建数据库
数据库(课程管理系统数据)、课程表(保存课程信息)、课程分类表(课程分类信息)、讲师表
系统数据库:
master数据主要用来管理其他数据库的信息
model数据库:模板数据
用户数据库:
数据文件:
主数据文件,一个数据库有且仅有一个主数据文件。mdf扩展名
次要数据文件,根据需要添加多个并且分布到不同的磁盘路径。ndf扩展名
日志文件,有且至少有一个。ldf扩展名
学习T-SQL脚本最大好处是在数据库兼容性上更强大。
特捏注意:drop关键字使用开发中要特别小心,万一删错了无法挽回。
给数据表添加约束是为了保证数据的有效性。LoginPwd varchar(18) check(len(LoginPwd)>=6 and len(LoginPwd)<=18) not null,
检查约束就是添加数据的时候,会检查这个字段的值,是否在约束的条件范围之内
主键约束要求不能重复
标识列:这个列必须是唯一的,系统自动生成,不用显式的插入数据
格式:identity(标识种子,增值量) identity(100,1)
常见错误:标识列显式给值;插入列的个数和对应的值个数不一致
标识列在删除数据后,不会自动补充,也没必要考虑这个
insert update delete select基本语法熟练运用
默认约束:给字段加入默认值
唯一约束
外键约束:两个数据表之间有关系,但没有约束,在添加数据时会造成数据不一致的情况
作用:1)外键表中添加数据时,如果和主表建立关系,则会自动的从主表中对应的字段中查询数据是否一致,不一致会拒绝.保证数据一致.
2)方便管理数据
使用innser join 实现联合查询

数据库关系图的建立(双击数据库关系图——是——右键新建——添加所有数据表)

练习代码如下:
--首先要指向操作的数据库
use master
go --批处理的结束标志
if exists(select * from sysdatabases where name='CourseManageDB')
drop database CourseManageDB
go
create database CourseManageDB
on primary
(
name='CourseManageDB_data',
filename='D:\DB\CourseManageDB_data.mdf',--主数据文件
size=10MB,
filegrowth=1MB
)
,
(
name='CourseManageDB_data1',
filename='D:\DB\CourseManageDB_data1.ndf',--次要数据文件
size=10MB,
filegrowth=1MB
)
log on
(
name='CourseManageDB_log',
filename='D:\DB\CourseManageDB_log.ldf',--日志文件
size=10MB,
filegrowth=1MB
)
go
--指向要操作的数据
use CourseManageDB
go
--创建讲师表
if exists(select * from sysobjects where name='Teacher')
drop table Teacher
go
create table Teacher
(
-- TeacherId int primary key, --讲师编号,主键
TeacherId int identity(100,1) primary key,--自增主键用identity(基数,增量)
LoginAccount varchar(50) not null,--登录帐号
LoginPwd varchar(18) check(len(LoginPwd)>=6 and len(LoginPwd)<=18) not null,
TeacherName varchar(20) not null,
PhoneNumber char(11) not null,
-- NowAdress nvarchar(100)
NowAdress nvarchar(100) default('地址不详')--地址添加默认值
)
go
--课程分类表
if exists(select * from sysobjects where name='CourseCategory')
drop table CourseCategory
go
create table CourseCategory
(
CategoryId int identity(10,1) primary key,
CategoryName varchar(20) not null
)
go
--课程表
if exists(select * from sysobjects where name='Course')
drop table Course
go
create table Course
(
CourseId int identity(10,1) primary key,
CourseName varchar(20) not null,
CourseContent nvarchar(500) not null,
ClassHour int not null,
-- Credit int not null--学分
Credit int check(Credit>=1 and Credit<=30) not null,--学分约束范围1~30分
CategoryId int references CourseCategory(CategoryId) not null,--外键约束
TeacherId int references Teacher(TeacherId)
)
go
--根据需要添加其他数据表
--添加测试数据
--insert into Teacher(TeacherId,LoginAccount,LoginPwd,TeacherName,PhoneNumber)
--values(10000,'Dragon Yao','012345','姚小龙','1234567890'),
--(10001,'Dragon Li','111111','李小龙','1234567891'),
--(10002,'Dragon Liang','222222','梁小龙','1234567892')
--insert into Teacher(TeacherId,LoginAccount,LoginPwd,TeacherName,PhoneNumber)
--values(10000-1,'Dragon Yao','012345','姚小龙','1234567890')--主键不能
--当启用标识列的时候,不能显式的插入值,应该改成下面的方法
insert into Teacher(LoginAccount,LoginPwd,TeacherName,PhoneNumber)
values('Dragon Yao','012345','姚小龙','1234567890'),
('Dragon Li','111111','李小龙','1234567891'),
('Dragon Liang','222222','梁小龙','1234567892')
insert into Teacher(LoginAccount,LoginPwd,TeacherName,PhoneNumber,NowAdress)
values('Dragon Yao1','012345','姚小龙','1234567890','西安')
select * from Teacher
--删除后主键值还会顺延自增,不受影响,全部删除也不会从头自增
delete from Teacher where TeacherId=102
delete from Teacher--全部删除
update Teacher set LoginPwd='000000',TeacherName='新老师' where TeacherId=104--修改
--添加课程分类
Insert Into CourseCategory(CategoryName)values('.Net'),('Java'),('C++')
select * from CourseCategory
--添加课程信息
Insert into Course(CourseName,CourseContent,ClassHour,Credit,CategoryId,TeacherId)
values('C#01','OOP/SQL',500,10,10,100)
Insert into Course(CourseName,CourseContent,ClassHour,Credit,CategoryId,TeacherId)
values('C#02','WinForm',500,10,11,101)
select * from Course
select CourseName,CourseContent,ClassHour,Credit,Course.CategoryId,CategoryName from Course
inner join CourseCategory on Course.CategoryId=CourseCategory.CategoryId
{
name='CourseManageDB_log',
filename='D:\DB\CourseManageDB_log.ldf,--日志文件名
size=10MB,
filegrowth=1MB
}
go