用SQL语句创建数据库和表(如何用sql语句创建数据库和表)
nanshan 2024-10-09 12:55 9 浏览 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)--外键
相关推荐
- Linux下C++访问web—使用libcurl库调用http接口发送解析json数据
-
一、背景这两天由于一些原因研究了研究如何在客户端C++代码中调用web服务端接口,需要访问url,并传入json数据,拿到返回值,并解析。 现在的情形是远程服务端的接口参数和返回类型都是json的字符...
- 干货 | 这 3 个超经典的Linux实战项目,让你分分钟入门Linux系统
-
编译安装nginx搭建小游戏网站编译安装流程下载nginx代码wget-P/server/tools/http:nginx.org/download/nginx1.22.0.tar.gz解压并进...
- 权限管理-树莓派linux⑦
-
前言当你在看这篇README,我感到非常荣幸。作为支持开源、分享的理念的我,给大家带来一些学习上的乐趣。由于本人并非专业的教育领域人士,很多时候天马行空,随心所欲的表达方式,可能让部分人感到不适。请根...
- 每天Linux学习:linux文件属性
-
ls-lih先通过这个命令来观察(-l列表显示目录内容详细,-i第一列显示inode,-h将文件大小显示为我们常见的kb,mb等单位)从截图中我们能看出文件属性由这9列信息组成:第1列:inod...
- Linux ln、unlink命令用法
-
ln命令可以用来创建软链接或硬链接。1.创建软链接:ln-s源文件目标文件例如:ln-s/usr/lib/libc.so/usr/local/lib/libc.so.6这样就创建了一...
- Linux 系统启动完整流程
-
一、启动系统流程简介如上图,简述系统启动的大概流程:1:硬件引导UEFi或BIOS初始化,运行POST开机自检2:grub2引导阶段系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器GRU...
- 最火的 CI/CD 平台 Jenkins 详细搭建教程(for Linux)
-
在正式学习Jenkins之前我们需要对两个名词有一定了解,其一是DevOps,另外一个就是CI/CD。何为DevOps?来自wiki百科介绍DevOps是一系列软件开发实践,强调开发人员(Dev)和测...
- hadoop集群搭建详细方法
-
第一步:搭建配置新的虚拟机格式化之前先把tmp目录下所有与Hadoop有关的信息全部删除rm-rf/tmp/hadoop-centos*开启之后jps只有Java的进程:sudovi/et...
- Linux 常用命令集合
-
系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...
- inode文件索引,你了解嘛?你的Linux基础真的扎实嘛?
-
一、inode是什么?深入了解inode,就要从文件存储说起来!文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节。读取硬盘的时候,不会一个个扇区地读取,这样效率...
- linux实例之创建service服务
-
前面我们讲过可以通过service命令来启动,重启,停止指定的服务程序。service服务可以在系统启动时,自动运行该服务,我们可以利用这一特点,创建service文件,并且让系统重启时,自动执行命令...
- linux之软连接和硬连接的区别
-
硬连接硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的...
- Linux inode 详解
-
简介索引节点(IndexNode)是Linux/类unix系统文件系统上的一种数据结构,用于存储有关文件或目录的元数据。它包含文件的所有信息,除了文件名和数据。inode在文件系统如何存储和检...
- Bash 脚本实例:获取符号链接的目标位置
-
我们都熟悉Linux中的符号链接,通常称为符号链接或软链接,符号链接是指向任何文件系统中的另一个文件或目录的特定文件。本文将介绍Linux中符号链接的基础知识,并创建一个简单的bash脚本...
- windows快捷方式,符号链接,软链接和硬链接
-
当一个软件大量的向C盘写入数据,而我们又无法修改软件保存数据的位置时,可以使用windows系统的“符号链接”(SymbolicLink)功能,将保存数据的位置修改到其它分区中。符号链接类似于我们熟...
你 发表评论:
欢迎- 一周热门
-
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WindowsServer2022|配置NTP服务器的命令
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
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)