sql server脚本创建数据库代码及解析
创建数据库
--指向操作的数据库master
use master
go
--判断数据库TestManageDB是否已经存在
if exists(select * from sysdatabases where name='TestManageDB')
--存在即删除TestManageDB数据库
drop database TestManageDB
go
--创建数据库TestManageDB
create database TestManageDB
--创建主数据文件
on primary
(
--数据库的逻辑文件名(系统用的,必须唯一)
name='TestManageDB_data',
--数据库物理文件名(绝对路径)
filename='D:\DB\TestManageDB_data.mdf',--主数据文件名,.mdf后缀
--数据库初始文件大小(实际需求来定义)
size=10MB,
--数据文件增值量
filegrowth=1MB
),
-- 次要数据文件,可以不要,也可以根据需要添加多个且分配到不同的磁盘、路径
(
name='TestManageDB_data1',
filename='D:\DB\TestManageDB_data1.ndf',--次要数据文件名,后缀.ndf
size=10MB,
filegrowth=1MB
)
--日志文件,至少有一个
log on
(
name='TestManageDB_log',
filename='D:\DB\TestManageDB_data1.ldf',--日志文件名,后缀.ldf
size=10MB,
filegrowth=1MB
)
go
创建数据表 、主键
--创建数据表
--指向TestManageDB数据库
use TestManageDB
go
--判断表UserInfo是否存在,存在即删除该表
if exists(select *from sysobjects where name='UserInfo')
drop table UserInfo
go
--创建数据表UserInfo
create table UserInfo
(
UserId int primary key,--用户编号,主键
UserName varchar(50) not null,--用户姓名(不能为空)
UserPhone char(11)not null,--用户电话(不为空)
)
go
create table UserLogin
(
LoginId int primary key,
LoginPwd nvarchar(30) not null,
LoginName nvarchar(50) not null
)
go
create table UserNews
(
NewsId int primary key,
NewsName nvarchar(30) not null,
NewsContent nvarchar(max)
)
go
表中插入数据( insert into 表名(属性1,属性2...) values(值1,值2...) )
--添加测试数据(UserInfo表中插入信息)
insert into UserInfo(UserId,UserName,UserPhone)
values(1001,'小明','54778888'),
(1002,'小王','65338888'),
(1003,'小马','39888888')
创建约束(check 约束用户输入数据长度)
--判断表UserInfo是否存在,存在即删除该表
if exists(select *from sysobjects where name='UserInfo')
drop table UserInfo
go
--创建表 UserInfo时创建约束
create table UserInfo
(
UserId int primary key,--用户编号,主键
UserName nvarchar(20) check(len(UserName)>=2and len(UserName)<=20) not null,--UserName长度大于2小于20
UserPhone char(11) check(len(UserPhone)>5 and len(UserPhone)<=11)not null,--用户电话(不为空,长度大于5且小于11)
)
go
标识列( identity(初始值,自增值))
--判断表UserInfo是否存在,存在即删除该表
if exists(select *from sysobjects where name='UserInfo')
drop table UserInfo
go
--创建表时设置标识列
create table UserInfo
(
--设置为标识列
UserId int identity(1000,1) primary key,--用户编号,主键,标识列1000开始,自增1
UserName nvarchar(20) check(len(UserName)>=2and len(UserName)<=20) not null,--用户姓名(不能为空)
UserPhone char(11)check(len(UserPhone)>=5and len(UserPhone)<=11)not null,--用户电话(不为空)
)
go
-- UserId列为标识列,不需要再手动写入值
insert into UserInfo(UserName,UserPhone)
values('小明','54778888'),
('小王','65338888'),
('小马','39888888'),
('小李','11554')
注:
- 标识列属性应写在数据类型后,如(UserId int identity(1000,1) primary key),
- 标识列的数据类型应为数值型且约束不能为空(主键自动约束不能为空),
- 标识列启动时不能手动写入值,标识列无法更新
- 标识列删除数据后不会补充
删除表中数据(delete from 表名 where 条件)
delete from UserInfo where UserId=1000
更新表中数据(update 表名 set 更新的属性 where 条件)
update UserInfo set UserName='秋水' where UserId=1001
默认值约束( default(值) ),设置默认值,用户有输入时值为用户输入,无输入为默认值
--判断表UserInfo是否存在,存在即删除该表
if exists(select *from sysobjects where name='UserInfo')
drop table UserInfo
go
--创建数据表时设置默认值约束
create table UserInfo
(
UserId int identity(1000,1) primary key,--用户编号,主键
UserName nvarchar(20) check(len(UserName)>=2and len(UserName)<=20) not null,--用户姓名(不能为空)
UserPhone char(11)check(len(UserPhone)>=5and len(UserPhone)<=11)not null,--用户电话(不为空)
UserAddress nvarchar(max) default('地址不详')--默认值约束,有输入即为用户输入,无输入即为默认值
)
外键约束( references 表名(列名) )
当我们在外键表中,添加数据的时候,如果和主表建立引用关系,则会从主表对应的字段中查询数据是否一致,不一致即拒绝,保证数据一致。
create table UserInfo
(
UserId int identity(1000,1) primary key,--用户编号,主键
UserName nvarchar(20) check(len(UserName)>=2and len(UserName)<=20) not null,--用户姓名(不能为空)
UserPhone char(11)check(len(UserPhone)>=5and len(UserPhone)<=11)not null,--用户电话(不为空)
UserAddress nvarchar(max) default('地址不详')
)
go
--references 表名(列名)
create table UserLogin
(
LoginId int primary key,
LoginPwd nvarchar(30) not null,
LoginName nvarchar(50) not null,
UserId int references UserInfo(UserId) not null --设置外键约束
)
go
设置了外键约束还可以进行连接查询(inner join )