用SQL语句创建数据库和表(如何用sql语句创建数据库和表)
nanshan 2024-10-09 12:55 11 浏览 0 评论
--------创建数据库
----use master
----GO
----IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = 'test1')
----DROP DATABASE test1
----GO
----CREATE DATABASE test1
------创建教师表
--use test1
--go
--if exists (select name from test1.dbo.sysobjects where name ='teacher')
--drop table teacher
--create table teacher
--(
--tno int not null primary key,
--tname nvarchar(15)
--)
--go
----插入数据到教师表中
--insert into teacher(tno,tname) values(1,'小屋');
--insert into teacher(tno,tname) values(2,'DAVA');
--insert into teacher(tno,tname) values(3,'刘局');
--insert into teacher(tno,tname) values(4,'张厚');
---- ----创建学生表
----use test1
---- go
---- if exists(select name from test1.dbo.sysobjects where name ='student')
---- drop table studnet
----create table student
---- (
---- sno int not null primary key,
---- sname nvarchar(15) not null,
---- sage datetime not null,
---- ssex char(2) not null
------ )
------go
------插入数据
----INSERT INTO student(sno,sname,sage,ssex) VALUES(1,'张三','1980-1-23','男')
----INSERT INTO student(sno,sname,sage,ssex) VALUES(2,'李四','1982-12-12','男')
----INSERT INTO student(sno,sname,sage,ssex) VALUES(3,'张飒','1981-9-9','男')
----INSERT INTO student(sno,sname,sage,ssex) VALUES(4,'莉莉','1983-3-23','女')
----INSERT INTO student(sno,sname,sage,ssex) VALUES(5,'王弼','1982-6-21','男')
----INSERT INTO student(sno,sname,sage,ssex) VALUES(6,'王丽','1984-10-10','女')
----.创建课程表
--CREATE TABLE [dbo].[course](
-- [cno] [int] NOT NULL PRIMARY KEY,
-- [cname] [nvarchar](20) NOT NULL,
-- [tno] [int] NOT NULL
--)
----创建外键,已经存在两张表,我想用sql语句建立这两张表的主外键关系
----ALTER TABLE 表名1 add constraint 约束名 foreign key(字段) references 表名2(字段)
--alter table course add constraint course_to_student foreign key(tno) references teacher(tno);
--ALTER TABLE [dbo].[course] WITH CHECK ADD
--CONSTRAINT [FK_course_teacher] FOREIGN KEY([tno])
--REFERENCES [dbo].[teacher] ([tno])
----插入数据
--insert into course(cno,cname,tno) values(1,'企业管理',3)
--insert into course(cno,cname,tno) values(2,'马克思',1)
--insert into course(cno,cname,tno) values(3,'UML',2)
--insert into course(cno,cname,tno) values(4,'数据库',5)
--insert into course(cno,cname,tno) values(5,'物理',8)
--5.创建成绩表
use test1
if exists(select * from test1.dbo.sysobjects where id=object_id(N'[dbo].[sc]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table sc ----[dbo].[sc]
go
create table sc
(
sno int not null,
cno int not null,
score float not null
)
go
--if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[table_name]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
--drop table [dbo].[table_name]
--GO
--CREATE TABLE [dbo].[table_name] (....)
--GO
--创建外键
--alter table [dbo].[sc] with check add constraint [foreign_key1] foreign key([cno]) references [dbo].[course] ([cno])
--alter table [dbo].[sc] with check add constraint [foreign_key2] foreign key([sno]) references [dbo].[student] ([sno])
ALTER TABLE [dbo].[sc] WITH CHECK ADD CONSTRAINT [FK_sc_course] FOREIGN KEY([cno])
REFERENCES [dbo].[course] ([cno])
ALTER TABLE [dbo].[sc] WITH CHECK ADD CONSTRAINT [FK_sc_student] FOREIGN KEY([sno])
REFERENCES [dbo].[student] ([sno])
--删除外键
--第一步:找出指定表上的外键约束名字
--exec sp_helpconstraint 'dbo.sc'
--第二步:删除外键约束
alter table [dbo].[studnet] drop constraint FK_sc_student
--插入数据
INSERT INTO sc(sno,cno,score)VALUES(1,1,80)
INSERT INTO sc(sno,cno,score)VALUES(1,2,86)
INSERT INTO sc(sno,cno,score)VALUES(1,3,83)
INSERT INTO sc(sno,cno,score)VALUES(1,4,89)
INSERT INTO sc(sno,cno,score)VALUES(2,1,50)
INSERT INTO sc(sno,cno,score)VALUES(2,2,36)
--INSERT INTO sc(sno,cno,score)VALUES(2,3,43)
INSERT INTO sc(sno,cno,score)VALUES(2,4,59)
INSERT INTO sc(sno,cno,score)VALUES(3,1,50)
INSERT INTO sc(sno,cno,score)VALUES(3,2,96)
--INSERT INTO sc(sno,cno,score)VALUES(3,3,73)
INSERT INTO sc(sno,cno,score)VALUES(3,4,69)
有一篇文章,不知道是否对你有帮助:
SQL Server的系统表及其应用研究
1. SQL Server的系统表
Microsoft的SQL Server是一个可伸缩的高性能数据库管理系统,专为分布式客户机/服务器环境而设计,SQL Server几乎将所有的配置信息、安全性信息和对象信息都存储在了它自身的系统表中,而系统表存在于每个独立的数据库中,存储一个特定数据库对象信息的系统表通常称为数据库目录,MASTER数据库有其特有的系统表用于保存整个系统和所有数据库的信息,通常称为服务器目录或系统目录。
服务器上所有的数据库包括MODULE, MASTER等都含有18个具有相同名称、结构的系统表,如表SYSOBJECTS用于描述数据库中的对象棗表、视图、存储过程等,表SYSUSER用于描述数据库的用户,而MASTER数据库另外还有13个单独的全局系统表,如表SYSLOGINS用于保存每个服务器的登录名、口令和配置信息、表SYSDATABASE保存服务器上所有数据库名、所有者、状态及其他信息。
存储过程是内嵌于数据库中的程序代码,它与表、视图等一样是数据库的一个组成部分,不同于一般的外部程序代码,它是经过预编译处理的代码,因此具有运行速度快、效率高的特点,存储过程也是SQL Server的一个重要功能,许多单纯针对后台数据库的操作一般都交由存储过程来完成以提高系统效率。本文将给出一个存储过程来说明SQL Server系统表的应用。
2. SQL Server系统表的应用
在应用SQL Server的基于客户机/服务器体系结构的信息系统开发中,有时需要将后台SQL Server上的某一数据库的表结构都打印出来,以便于开发人员查阅及最终文档的形成。SQL Server本身提供了一个系统存储过程(SP_COLUMNS),可以完成对单个表结构的查询,只要在SLQ Server的ISQL-W工具中键入SP_COLUMNS“表名”,并执行即可得到结果集。但该方法有许多不足之处,其主要缺点是:
1)只能对数据库中单个数据表进行操作,当需要查询一个数据库中所有的表时,需要多次执行系统存储过程SP_COLUMNS,因此显得非常繁琐。
2)查询结果集中包含了许多不必要的信息,缺乏使用的灵活性。
下面我们创建一个存储过程来完成对某一个数据库中所有表结构的查询。
在创建一个数据库的同时,系统会自动建立一些系统表,限于篇幅的缘故我们在这里只介绍与应用实例有关的三个系统表(SYSOBJECTS,SYSCOLUMNS,SYSTYPES)及其相关的字段。 表SYSOBJECTS为数据库内创建的每个对象(约束,规则,表,视图,触发器等)创建一条记录。
该表相关字段的含义如下:
SYSOBJECTS.name 对象名,如:表名,视图名。
SYSONJECTS.id 对象id。
SYSOBJECTS.type 对象类型(p存储过程,v视图,s系统表,u用户表)。
表SYSCOLUMNS为每个表、视图中的每个列和每个存储过程的每个参数创建一条记录。 该表相关字段的含义如下:(此处的列系指数据库中每个表、视图中的列)
SYSCOLUMNS.id 该列所属的表的id,可与SYSOBJECTS.id相关联
SYSCOLUMNS.colid 列id,表示该列是表或视图的第几列
SYSCOLUMNS.type 物理存储类型,可与SYSTYPES.type相关联.
SYSCOLUMNS.length 数据的物理长度。
SYSCOLUMNS.name 列名字,即字段名。
SYSCOLUMNS.Pre 列的精度级。
SYSCOLUMNS.Scale 列的标度级。
表SYSTYPES为每个系统和每个用户提供的数据类型创建一条记录,如果它们存在,给定域和默认值,描述系统提供的数据类型的行不可更改。
该表相关字段的含义如下:
SYSTYPES.name 数据类型的名字。
SYSTYPES.type 物理存储数据类型。
在SQL SERVER的企业管理器(SQL ENTERPRISE MANAGER)中,选定某一数据库,创建存储过程print_dbstructure。
源代码如下:
if exists (select* from sysobjects where id=object_id( 'dbo.print_dbstructure ')and sysstat & 0xf=4)存储过程
drop procedure dbo. print_dbstructure
GO
CREATE PROCEDURE print_dbstructure
AS
SELECT DISTINCT sysobjects.name, syscolumns.colid,
syscolumns.name, systypes.name, syscolumns.prec, syscolumns.scale
FROM syscolumns, sysobjects, systypes
WHERE sysobjects.id=syscolumns.id AND systypes.type=syscolumns.type AND ((sysobjects. type= 'u '))
GO
首先判断是否存在一个名为print_dbstructure的存储过程,如果存在,就摘除它,否则,定义SQL语句建立新的存储过程。从三个系统表中选出满足条件的记录(即该数据库中保存在系统表中的用户表信息)。
执行时,在ISQL_W工具中,选定print_dbstructure所在的数据库,执行该存储过程,即可得到结果集(即该数据库中用户表的结构信息)。
3. SQL Server系统表的应用推广
以上所介绍存储过程的主要缺陷在于只能对服务器上某一特定的数据库(print_dbstructure所在的数据库)进行查询操作,我们可以通过在SQL Server系统数据库MASTER中建立带有数据库名参数的系统存储过程来解决这一问题,请读者自行完成。当然,SQL Server 系统表的应用远不止于止,读者也可依本文所介绍的方法去挖掘其他几个系统表的应用。
/*创建bbsDB数据库*/
use master
if exists(select * from sysdatabases where name='bbsDB')
drop database bbsDB
create database bbsDB
on
(
name='bbsDB_data',
filename='D:\project\bbsDB_data.mdf',
size=10,
filegrowth=20%
)
log on
(
name='bbsDB_log',
filename='D:\project\bbsDB_log.ldf',
size=3,
maxsize=20,
filegrowth=10%
)
/*创建bbsUsers表*/
use bbsdb
if exists(select * from sysobjects where name='bbsUsers')
drop table bbsUsers
create table bbsUsers
(
UID int identity(1,1) not null,--学号,标识列
Uname varchar(15) not null,--用户昵称
Upassword varchar(10) not null,--用户密码
Uemail varchar(20),--邮箱地址
Usex bit not null,--用户性别
Uclass int,--等级
Uremark varchar(20),--备注
UregDate datetime not null,--注册日期
Ustate int null, --状态
Upoint int null--用户积分
)
/*创建bbsUsers表中的约束*/
alter table bbsUsers
add constraint PK_uid primary key(uid),--主键
constraint DF_Upassword default(888888) for Upassword,--初始密码为888888
constraint DF_Usex default (1) for Usex,--性别默认为男
constraint DF_UregDate default (getdate()) for UregDate,--注册日期默认为系统日期
constraint DF_Ustate default(0) for Ustate,--状态默认为离线
constraint DF_Upoint default(20) for Upoint,--积分默认为20点
constraint CK_Uemail check(Uemail like '%@%'),--电子邮件必须含有@符号
constraint CK_Upassword check (len(Upassword)>=6)--密码至少为六位
/*创建bbsSection表*/
use bbsdb
if exists(select * from sysobjects where name='bbsSection')
drop table bbsSection
create table bbsSection
(
SID int identity(1,1) not null,--板块标号,自动增长
Sname varchar(32) not null,--版块名称
SmasterID int not null,--版主用户ID
Sprofile varchar(20) null,--版面简介
SclickCount int null, --点击率
StopicCount int null--发帖数
)
/*创建bbsSection表中的约束*/
alter table bbsSection
add constraint PK_sid primary key(sid),--主键
constraint DF_SclickCount default(0) for SclickCount,--点击率默认为0
constraint DF_StopicCount default(0) for StopicCount,--发帖数默认为0
constraint DF_SmasterID foreign key(SmasterID)references bbsUsers (UID)--外键
/*创建bbsTopic表*/
use bbsdb
if exists(select * from sysobjects where name='bbsTopic')
drop table bbsTopic
create table bbsTopic
(
TID int identity(1,1) not null,--帖子编号,自动增长
TsID int not null,--发帖人ID
TuID int not null,--版主用户ID
TreplyCount int null,--回复数量
Tface int null, --发帖表情
Ttopic varchar(20) not null,--标题
Tcontents varchar(30) not null,--正文
Ttime datetime null,--发帖时间
TclickCount int null,--点击数
Tstate int not null,--状态
TlastReply datetime null--回复时间
)
/*创建bbsTopic表的约束*/
alter table bbsTopic
add constraint DF_TreplyCount default(0) for TreplyCount,--回复数量默认为0
constraint PK_tid primary key(tid),--主键
constraint DF_TclickCount default (0) for TclickCount,--点击数默认为0
constraint DF_Tstate default (1) for Tstate,--状态默认为1
constraint DF_Ttime default (getdate()) for Ttime,--发帖时间默认为系统日期
constraint CK_Tcontents check (len(Tcontents)>=6),--正文必须大于六个字符
constraint CK_TlastReply check ((TlastReply)>(Ttime)),--最后回复时间必须晚于发帖时间
constraint DF_TsID foreign key(TsID)references bbsSection (SID),--外键
constraint DF_TuID foreign key(TuID)references bbsUsers (UID)--外键
/*创建bbsReply表*/
use bbsdb
if exists(select * from sysobjects where name='bbsReply')
drop table bbsReply
create table bbsReply
(
RID int identity(1,1) not null,--自动编号,帖子编号
RtID int not null,--主贴ID
RsID int not null,--板块ID
RuID int not null,--回帖人ID
Rface int null, --回帖表情
Rcontents varchar(30) not null,--正文
Rtime datetime null,--回帖时间
RclickCount int null--点击数
)
/*创建bbsReply表的约束*/
alter table bbsReply
add constraint DF_Rtime default (getdate()) for Rtime,--回帖时间默认为系统日期
constraint CK_Rcontents check (len(Rcontents)>=6),--正文必须大于六个字符
constraint DF_RtID foreign key(RtID)references bbsTopic (TID),--外键
constraint DF_RsID foreign key(RsID)references bbsSection (SID),--外键
constraint DF_RuID foreign key(RuID)references bbsUsers (UID)--外键
相关推荐
- 详细了解ICMP协议(icmp协议的工作原理)
-
最近跟大家分享了一些网络故障排查的命令,今天给大家分享一下,这些命令背后的协议(ICMP)以及原理,只有了解了原理,我们才能更好的用好这些命令什么是ICMP协议Internet控制报文协议ICMP(I...
- Firewalld防火墙与ICMP攻击(防火墙policy)
-
提到ICMP大家应该都很熟悉,可能有人会说:不就是ping吗?但是说到ICMP攻击以及相关防御措施可能就有的人不是非常清楚了。ICMP的概念要想理解ICMP攻击以及防范我们还得从ICMP的概念说起,...
- 不可错过!5张图带你搞懂容器网络原理
-
使用容器总是感觉像使用魔法一样。对于那些理解底层原理的人来说容器很好用,但是对于不理解的人来说就是个噩梦。很幸运的是,我们已经研究容器技术很久了,甚至成功揭秘容器只是隔离并受限的Linux进程,运...
- Iptables防火墙详细介绍(iptables防火墙的原理)
-
一:Linux防火墙基础:Linux防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(也称网络层防火墙);Linux防火墙体系基于内核编码实现,具有非常稳定的...
- 盘点几个实现VLAN间路由的好方法!
-
在真实的网络中,常常需要跨VLAN通信。许多网络工作者通常选择一些方法来实现不同VLAN中的主机之间的相互访问,如单臂路由。然而,由于单臂路由技术的一些限制,如带宽和转发效率,这种技术是很少使用。三层...
- iptables使用详解(iptables入门)
-
前言最近买了一个VPS,并在上面搭了DOCKER,然后再DOCKER中安装Mysql。但只要将网络端口映射到宿主机上,那么外部网络就可以直接访问该数据。属实吓人。为此,我们需要使用防火墙。说到防火墙,...
- 网络安全-Kali系统hping3及netwox的使用
-
Kali-linux系统自身集成Scapy、hping3、netwox等工具,用于渗透测试及网络攻击ScapyScapy是一个Python程序,Scapy是一个功能强大的交互式数据包操作程序,能够发送...
- 网络工具中的瑞士军刀:Ping和Tracert
-
引言:Ping命令是一种存在于Windows、Unix和Linux系统下的一种命令。往往常用于测试分析判断网络问题所在,ping命令使用ICMP协议,该协议是TCP/IP协议簇的一个子协议,用于在IP...
- 如何确定一个网站是否支持IPv6?(如何判断一个网站)
-
IPv6是互联网协议(IP)的第六版,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。为什么国家大力推进互联网协议第六版(IPv6)规模部署?IPv6是为了解决IPv4存在的地址...
- 西门子Profinet故障诊断入门-4(西门子profinet模块)
-
Ping指令如何使用1.概述在做PROFINETIO通讯调试时经常遇到PROFINETIO通讯不通的情况,诊断时可以利用多种诊断工具和方法,这里介绍一下Ping指令的使用方法,利用"pi...
- Linux 网络设备 - Bridge & Veth Pair
-
我们继续介绍Linux中常见的网络设备,今天主要讲的是LinuxBridge和VethPair,理解清楚这两种设备对后续理解容器化网络会比较有帮助。1.vethpair两端互通我们先...
- Ip地址、子网掩码、网关三者如何协调工作你真的理解了吗?
-
首先我们来看看以下这两个地址是否可以相互通信呢?初步一看,貌似可以通信,但是再细看,发现两者的掩码完全不同,故而肯定不能通信了?然而并非如此,如果对两者的通信有更深刻的认识,相信就会发现他们到底能否相...
- 一文精通虚拟端口通道vPC,精品文章,爱了
-
今天给大家带来的是虚拟端口通道相关的技术:简介传统数据中心使用生成树来防止第2层环路,这已经使用了多年,但确实有局限性,为了防止环路,生成树会阻止一些链路并保持其他链路处于活动状态,如下所示,阻塞...
- 5张图诠释了容器网络(容器中的网络模式及特点)
-
使用容器总是感觉像使用魔法一样。对于那些理解底层原理的人来说容器很好用,但是对于不理解的人来说就是个噩梦。很幸运的是,我们已经研究容器技术很久了,甚至成功揭秘容器只是隔离并受限的Linux进程,...
- 抓包结果显示Destination unreachable(port unreachable)怎么排查
-
当Wireshark抓包结果显示Destinationunreachable(Portunreachable)时,表示目标主机的指定端口没有服务监听或无法响应请求。以下是详细的排查步骤和...
你 发表评论:
欢迎- 一周热门
-
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
WindowsServer2022|配置NTP服务器的命令
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)