(一)数据库的创建
1)数据库分类
系统数据库和用户数据库;通过查看对象资源管理器来区分数据库类型;
注意:master数据库不要动,这个是数据库的数据库;我们主要学习用户数据库;
2)用户数据库文件组成
数据库物理文件的组成:数据库文件 + 日志文件;
注意:一个数据库有且只有一个mdf,但是可以有多个 ndf 和 ldf (但是至少一个)
3)创建数据库
创建一个主数据文件和一个日志文件
文件组类似于文件夹,主要用于管理磁盘空间,文件组分为主文件组和次文件组,日志文件不属于任何文件组;
创建多个数据文件和日志文件
删除方法:
drop 删除之后数据库不可恢复,要谨慎使用!!!
4)分离与附加数据库
分离数据库的必要性及语法
- 当数据库服务运行中,通常情况下无法直接移动和复制数据库文件;
- 所谓分离数据库就是讲正在使用的数据库文件解除服务的限制;
附加数据库的必要性及语法
- 附加数据库就是讲指定位置的数据库文件加入到数据库服务中心并运行;
- 数据库只有附加以后,用户才能通过DBMS操作数据;
(二)SQL Server 中的数据类型
1)文本类型:字符数据包含任意字母、符号或数字字符的组合
Unicode是国际组织制定的、可以容纳世界上所有文字和符号的字符编码方案
注意:带n的数据类型是不带n的两倍,比如nchar(1)和char(2)长度相同;
2)整数类型
注意:多用int;
3)精确数字类型
注意:多使用numeric(18, 2),表示18位整数,两位小数;
4)近似数字(浮点)类型
注意:使用较少;
5)日期类型
注意:使用最多是2013-01-01,这种格式;
6)货币类型
7)位类型
8)二进制类型
(三)数据表的创建
1)建表的语法
列的特征包含的内容:
- 是否为空(NULL):在输入数据的时候,数据库的列允许为空时,可以不输入数据,否则必须输入数据。列是否为空要根据数据库设计的具体要求决定,对于关键列必须禁止为空;
- 是否是标识列(自动编号);
- 是否有默认值:如果数据表的某列在用户不输入数据的时候,希望提供一个默认的内容,比如:用户如果不输入地址,则默认‘地址不详’;
- 是否为主键:主键是实体的唯一标识,保证实体不被重复。一个数据表必须有主键才有意义;
标识列的说明
-
标识列使用的意义:
-
表示列的使用方法:
-
注意问题:
2)代码分析
3)批处理语句
- go 是批处理的标志,表示SQL server 将这些SQL语句编译为一个执行单元,提高执行效率;
- 一般是将一些逻辑相关的业务操作语句放在同一批中,这完全由业务需求和代码编写者决定;
- Go 是SQL Server的批处理命令,只有代码编辑器才能识别并处理,编辑其他应用程序不能使用该命令
- 由于每个批处理之间是独立的,因此,在一个批处理出现错误时,并不会影响其他批处理中SQL代码的运行。
4)代码
--创建学员信息数据表
use StudentManageDB1
go
--判断数据表是不是存在
if exists(select * from sysobjects where name = 'Students')
drop table Students
go
--创建数据表
create table Students
(
StudentsId int identity(10000,1), --学号,从10000开始,每次递增1;标识列不可为空
StudentName varchar(20) not null,--姓名
Gender char(2) not null, --性别
Birthday datetime not null,--出生日期
StudentIdNo numeric(18, 0) not null,--身份证号
Age int not null, --年龄
PhoneNumber varchar(50),
StudentAdress varchar(500),
ClassId int not null --班级外键
)
go
--创建班级表
if exists(select * from sysobjects where name = 'StudentClass')
drop table StudentClass
go
create table StudentClass
(
ClassId int primary key, --定义主键(一个表必须含有主键)
ClassName varchar(20) not null,
)
go
--创建成绩表
if exists(select * from sysobjects where name = 'ScoreList')
drop table ScoreList
go
create table ScoreList
(
Id int identity (1,1) primary key,
StudentId int not null,--学号外键
CSharp int null,
SQLServer int null,
UpdateTime datetime not null --更新时间
)
go
--创建管理员表
if exists(select * from sysobjects where name = 'Admins')
drop table Admins
go
create table Admins
(
LoginId int identity (1000,1) primary key,
LoginPwd varchar(20) not null,--登录密码
AdminName varchar(20) not null
)
go
select * from Students
(四)数据的基本操作
1)插入实体
插入实体(数据行)语法
插入实体的SQL语句示例
insert into Students(StudentName, Gender, Birthday,
Age, StudentIdNo, PhoneNumber, StudentAdress, ClassId)--列名尽量写上,其中的顺序可以颠倒,但是value值必须一致
values('张三', '男', '1990-01-01', 21, 12345678945612345, '12345678952','河北邢台', 4)
注意:
- 列名个数 = 对应值的个数;
- 非值类型的数据,必须在单引号中;
- 数据值的类型必须与定义的字段类型一致;
- 标识列是自动增长类,由系统维护,不用添加;
2)查询实体
基本语法
示例:
select Student, StudentName from Students --查询两个字段
select * from Students --* 表示查询所有字段
3)T-SQL 中的运算符
示例:
select StudentId, StudentName, Gender from Students
where Age>=22
4)更新实体
语法:
更新实体的SQL语句示例:
使用 update 语句要注意与where条件句的配合使用
update Students set StudentAdress = '天津', Phonenumber = '13456' where StudentId = 10003
5)删除实体
语法:
一定要注意与 where 条件语句的配合使用;truncate一般用来删除整个表;
示例:
使用truncate时,不能含有外键约束,即简单的删除并不能删除外键约束【不能有引用的存在】
删除外键约束:右键选择设计(design)–> 右键选择“关系”即可见到;
删除以后,标识列重新排列;