百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

用SQL语句创建数据库和表(如何用sql语句创建数据库和表)

nanshan 2024-10-09 12:55 17 浏览 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)--外键

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: