当前位置:   article > 正文

SqlServer数据库——建表,约束,数据插入,逻辑(第二篇)_sqlserver 创建表

sqlserver 创建表

一,SQL语句基础语法

1.1创建数据库

  1. 创建数据库时可参照此图形化操作界面进行信息设置
    在这里插入图片描述
--创建数据库
create database DateTest2
on --数据文件
(
	name="DateTest2",--逻辑名称
	filename="D:\SqlServer_Data\DateTest2.mdf",--物理路径和名称
	size=5MB,--文件初始大小
	filegrowth=2MB--数据文件增长方式,也可以写百分比
	--注意:最后一项不用逗号结尾
)
log on
(
	name="DateTest2_log",--逻辑名称
	filename="D:\SqlServer_Data\DateTest2_log.ldf",--物理路径和名称
	size=5MB,--文件初始大小
	filegrowth=2MB--数据文件增长方式,也可以写百分比
	--注意:最后一项不用逗号结尾
	
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

(1)运行结果:
在这里插入图片描述
在这里插入图片描述
2. 快速创建数据库

--快速创建数据库
create database DataTest3
  • 1
  • 2

(1)所有的配置均默认,创建的位置也是默认位置。
在这里插入图片描述
(2)文件位置:
在这里插入图片描述

1.2创建表

1.2.1IDENTITY属性

  • 在 SQL Server 中,可以通过在表的列定义中使用 IDENTITY 属性来创建自增长列。语法如下:
    column_name data_type [IDENTITY(seed, increment)] [NOT NULL]
    (1)column_name:列的名称。
    (2)data_type:列的数据类型。
    (3)IDENTITY(seed, increment):可选的属性,用于指定自增长列的起始值增量值。seed 是自增长列的起始值,increment 是每次自增长的增量,默认值为 1。
    (4)NOT NULL:可选的属性,用于指定该列的值不能为空。
  • 例如,以下语句创建一个名为 Employee 的表,其中包含一个自增长列 ID:
CREATE TABLE Employee (
    ID int IDENTITY(1,1) PRIMARY KEY,
    Name varchar(50) NOT NULL,
    Age int,
    Gender char(1)
);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这个例子中,ID 列被定义为整数类型,并设置为自增长列。自增长列的起始值为 1,每次自增长的增量为 1。ID 列还被指定为表的主键,用于确保每个行都具有唯一的标识符。

  • 在将数据插入到表中时,可以省略自增长列的值,SQL Server 将自动为该列分配唯一的自增长值。例如:
INSERT INTO Employee (Name, Age, Gender)
VALUES ('John', 25, 'M');

  • 1
  • 2
  • 3

此语句将向 Employee 表中插入一行数据,其中 ID 列的值将自动生成。

  • 如果需要获取最后插入行的自增长值,可以使用 SCOPE_IDENTITY() 函数。例如:
DECLARE @id int;

INSERT INTO Employee (Name, Age, Gender)
VALUES ('Jane', 30, 'F');

SET @id = SCOPE_IDENTITY();

SELECT @id;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这个例子将向 Employee 表中插入一行数据,并使用 SCOPE_IDENTITY() 函数获取最后插入行的 ID 值,将其存储到 @id 变量中,并返回该值。

1.2.2创建表

  • 选择对应的数据库创建表,否则会将表创建到其他库中。
    在这里插入图片描述
  • 建表
    (1)主键:可以唯一可以表示某一个人,或某一条数据,主键不能重复
sto int primary key,--学号,设置主键
  • 1

(2)主键设置的identity(初值,步长)

sto int primary key identity(1001,1),--学号,设置主键,初值1001,后面每次新建一个学生自动加一
  • 1

(3)设置非空

name varchar(20) not null,--姓名,设置为非空
  • 1

(4)创建学生表

--注意创建表之前要切换到对应的数据库
use DateTest2

--创建表
--create table 表名
--(
	--字段名1 数据类型,
	--字段名2 数据类型

--)
--建立学生表
create table Student
(
	Sto int primary key identity(1001,1),--学号,设置主键,初值1001,后面每次新建一个学生自动加一
	Name varchar(20) not null,--姓名,设置为非空
	Age int,--年龄
	Sex nvarchar(1)check(Sex='男'or Sex='女'),--性别,添加约束
	Phonenum int unique,--手机号,设置唯一性
	StudentRemark text--学生相关描述
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

运行结果:
在这里插入图片描述

1.2.3数据类型

(1)char:定长,char(10),无论存储的数据是否真的存到了10个字节,都要占用10个字节。例如:存‘ab’仍然占用10个字节。(注意:一个汉字占两个字节
(2)varchar:变长,varchar(10),最多占用10个字节,如果未到10个字节,占用内存是其真实大小。例如:存‘ab’只占2个字节
(3)text:长文本
(4)char,varchar,text前面加上n:存储的是Unicode字符,对中文很友好,例如:varchar(100):可以存储100个字符,50个汉字;而nvarchar(100):可以存储100个字符,100个汉字
(5)data与datatime:data:只能存储年月日datatime:可存储年月日,时分秒
(6)float:存储小数,存在误差
(7)decimal:精度更高,decimal(总长度,小数点后有几位),decimal(12,2):表示数据总长度12位,小数点后有两位

1.2.4实例


CREATE TABLE StudentTable(
    学号 char(6) NOT NULL  PRIMARY KEY ,
    姓名 char(8) NOT NULL ,
    性别 bit NULL DEFAULT (1) ,
    出生时间 datetime NULL ,
    专业 char(12) NULL ,
    总学分 int NULL DEFAULT (0) CHECK (总学分>=0 AND 总学分<160) ,
    备注 varchar(500) NULL 
   
)

CREATE TABLE CourseTable (
    课程号 char(3) NOT NULL ,
    课程名 char(16) NOT NULL ,
    开课学期 tinyint NULL DEFAULT (1) CHECK (开课学期>=1 AND 开课学期<=8) ,
    学时 tinyint NULL DEFAULT (0) ,
    学分 tinyint NULL DEFAULT (0) ,
    PRIMARY KEY (课程号)
)



CREATE TABLE GradeTable (
    学号 char(6) NOT NULL ,
    课程号 char(3) NOT NULL ,
    成绩 int NULL DEFAULT (0) ,
    PRIMARY KEY (学号, 课程号)
)

delete from StudentTable WHERE 学号=081102;

insert StudentTable values('081101','王林',1,'1990-2-10','计算机',50,null),
('081102','程明'  ,1,'1991-2-1'  ,'计算机',50,null),
('081103','王燕'  ,0,'1989-10-6' ,'计算机',50,null),	
('081104','韦严平',1,'1990-8-26' ,'计算机',50,null),	
('081106','李方方',1,'1990-11-20','计算机',50,null),
('081107','李明'  ,1,'1990-5-1'  ,'计算机',54,null),
('081108','林一帆',1,'1989-8-5'  ,'计算机',52,'提前休完,获得学分'),
('081109','张强民',1,'1989-8-11' ,'计算机',50,'提前休完,获得学分'),
('081110','张蔚'  ,0,'1991-7-22' ,'计算机',50,null),
('081111','赵琳'  ,0,'1990-3-18' ,'计算机',50,null),
('081113','严红'  ,0,'1989-8-11' ,'计算机',48,null),
('081201','王敏'  ,1,'1989-6-10' ,'通信工程',42,null),
('081202','王林'  ,1,'1989-1-29' ,'通信工程',40,null),
('081203','王玉民',1,'1990-3-26' ,'通信工程',42,null),
('081204','马琳琳',0,'1989-2-10' ,'通信工程',42,null),
('081206','李计'  ,1,'1989-9-20' ,'通信工程',42,'提前休完,获得学分'),
('081210','李红庆',1,'1989-5-1'  ,'通信工程',44,'提前休完,获得学分'),
('081216','孙祥欣',1,'1989-3-19' ,'通信工程',42,null),
('081218','孙研'  ,1,'1990-10-9' ,'通信工程',42,null),
('081220','吴薇华',0,'1990-3-18' ,'通信工程',42,null),
('081221','刘燕敏',0,'1989-11-12','通信工程',42,null),
('081241','罗林琳',0,'1990-1-30' ,'通信工程',50,null);

insert CourseTable values('101','计算机基础',1,80,5),
('102','程序设计与语言',2,68,4),
('206','离散数学',4,68,4),
('208','数据结构',5,68,4),
('210','计算机原理',5,85,5),
('209','操作系统',6,68,4),
('212','数据库原理',7,68,4),
('301','计算机网络',7,51,3),
('302','软件工程',7,51,3);

insert GradeTable values('081101','101',80),
('081101','102',78),
('081101','206',76),
('081103','101',62),
('081103','102',70),
('081103','206',81),
('081104','101',90),
('081104','102',84), 
('081104','206',65),
('081102','102',78),
('081102','206',78),
('081106','101',65),
('081106','102',71),
('081106','206',80),
('081107','101',78),
('081107','102',80),
('081107','206',68),
('081108','101',85),
('081108','102',64),
('081108','206',87),
('081109','101',66),
('081109','102',83),
('081109','206',70),
('081110','101',95),
('081110','102',90),
('081110','206',89),
('081111','101',91),
('081111','102',70),
('081111','206',76),
('081113','101',63),
('081113','102',79),
('081113','206',60),
('081201','101',80),
('081202','101',65),
('081203','101',87),
('081204','101',91),
('081210','101',76),
('081216','101',81),
('081218','101',70),
('081220','101',82),
('081221','101',76),
('081241','101',90);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3修改表结构

  1. 在表中添加新的列:
--添加新的列
   alter table Student
   add grade int
  • 1
  • 2
  • 3
  1. 在表中删除列
--(2)删除列
alter table Student 
drop column grade--column 表示列的意思
  • 1
  • 2
  • 3
  1. 改变表中的数据类型
--alter table Student alter column 列名 数据类型
--修改年龄varchar(20)为varchar(10)
alter table Student alter column Name varchar(10)
  • 1
  • 2
  • 3

1.4维护约束(删除约束和添加约束)

1.4.1添加check约束

--(5)添加约束(check约束),约束名可自定义
alter table Student add constraint CK__Student__Sex__1 check(Sex='男'or Sex='女')
  • 1
  • 2

查看约束名称:鼠标右键表->选中设计->选中列右键选择check
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4.2删除约束

--(4)删除约束
--alter table 表名 drop constraint 约束名
alter table Student drop constraint CK__Student__Sex__1
  • 1
  • 2
  • 3

约束为空:
在这里插入图片描述

1.4.3添加主键约束

--alter table 表名  constraint 约束名primary key(列名)
alter table 表名 add constraint 约束名 primary key(列名)
  • 1
  • 2

1.4.4添加唯一约束

alter table 表名add constraint 约束名 unique(列名)

  • 1
  • 2

1.4.5添加外键约束

alter table 表名 add constraint 约束名foreign key(列名) references 关联表名(列名(主键))
  • 1

###3.4.6添加默认值约束

alter table 表名 add constraint default 默认值 for 列名
  • 1

1.5数据插入,删除

1.5.1插入一条数据

  1. 代码格式:
insert into 表名(列名1,列名2......) values(数据1,数据2......)
  • 1
  1. 插入数据到学生表
SET IDENTITY_INSERT Student ON
insert into Student(Sto,Name,Age,Sex,Phonenum,StudentRemark) 
values(1001,'李华',23,'男',156423,'优秀')
insert into Student(Sto,Name,Age,Sex,Phonenum,StudentRemark) 
values(1002,'王磊',25,'男',156489,'良好')
--简写,如果每一列都添加数据,则表名后面的列名可省略
insert into Student values('周杰伦',45,'男',156459,'良好')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

1.5.2一次性插入多条数据

  1. 在 SQL Server 中,可以使用以下两种方法来一次性插入多条数据:
    (1)使用INSERT INTO VALUES语句 ,在INSERT INTO语句中指定多个值集时,可以一次性插入多条数据。例如:
INSERT INTO table_name (column1, column2, column3)
VALUES
  ('value1', 'value2', 'value3'),
  ('value4', 'value5', 'value6'),
  ('value7', 'value8', 'value9');

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

上面的语句将在一次操作中向表中插入三行数据,每行包含三个值。
实例:

insert into Student values
('那英',35,'女',189646,'优秀') ,
('张杰',43,'男',189465,'良好')
  • 1
  • 2
  • 3

在这里插入图片描述

(2)使用INSERT INTO SELECT语句,可以使用INSERT INTO SELECT语句从另一个表或查询中选择多个行,并将它们插入到目标表中。例如:

INSERT INTO table_name (column1, column2, column3)
SELECT column1, column2, column3
FROM other_table
WHERE some_condition;

  • 1
  • 2
  • 3
  • 4
  • 5

上面的语句将从另一个表中选择满足某些条件的多个行,并将它们插入到指定的表中。可以在SELECT语句中使用JOIN等其他操作来选择要插入的行。

1.5.3数据删除

  1. 要删除 SQL Server 数据库中的数据,您可以使用以下语法:
DELETE FROM 表名 WHERE 列名 =;

  • 1
  • 2

其中,表名 是要删除数据的表的名称,列名 是要筛选删除的行的列的名称,值 是要匹配的列的值。

1.6逻辑编写

1.6.1定义整型变量

  • 语法:DECLARE @变量名 数据类型 [= 初始值];
  • @变量名 为变量名,可以使用任何有效的标识符
  • 例如,创建一个名为 @myVar 的整数变量并初始化为 0,可以使用以下语句:DECLARE @myVar INT = 0;
  • 如果不需要初始化变量,可以省略初始值部分:DECLARE @myVar INT;
  • 在创建变量后,可以使用 SET 语句为变量赋值,例如:SET @myVar = 1;

1.6.2循环语句while

  • WHILE 循环是最常用的循环语句,用于重复执行一组 SQL 语句,直到指定的条件不再满足为止。WHILE 循环的语法如下:
WHILE condition
BEGIN
    -- SQL statements to be executed
END

  • 1
  • 2
  • 3
  • 4
  • 5

其中,condition 是一个逻辑表达式,当该表达式的值为 true 时,循环会一直执行。在循环体中,可以包含任意数量的 SQL 语句。

  • 以下是一个使用 WHILE 循环计算数字的累加和的示例:
DECLARE @i int = 1;--创建变量
DECLARE @sum int = 0;

WHILE @i <= 10
BEGIN
    SET @sum = @sum + @i;
    SET @i = @i + 1;
END

SELECT @sum;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

1.6.3print与select的区别

  1. PRINT 语句

(1)PRINT 语句用于在控制台或查询结果窗格中输出一条消息。PRINT 语句的语法如下:PRINT 'message';
(2)其中,message 是要输出的文本消息。PRINT 语句可以用于调试和跟踪 SQL 脚本的执行过程,以及输出程序中的提示信息。但是,PRINT 语句不能将结果集返回给客户端,它只是在控制台或查询结果窗格中输出文本消息。
(3)以下是一个使用 PRINT 语句输出文本消息的示例:

DECLARE @message varchar(50) = 'Hello, world!';
PRINT @message;

  • 1
  • 2
  • 3

在这个例子中,首先声明一个字符串变量 @message,并将其赋值为 ‘Hello, world!’。然后使用 PRINT 语句将 @message 变量的值输出到控制台或查询结果窗格中。

2.SELECT 语句
(1)SELECT 语句用于从数据库中检索数据,并将结果集返回给客户端。SELECT 语句的语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition;
(2)其中,column1, column2, … 是要检索的列名,table_name 是要检索数据的表名,condition 是一个可选的筛选条件,用于限制检索的结果集。SELECT 语句可以用于检索数据、计算聚合函数、进行表连接、排序、分组等操作,并将结果集返回给客户端。
(3)以下是一个使用 SELECT 语句检索数据的示例:

SELECT *
FROM Customers
WHERE City = 'London';
  • 1
  • 2
  • 3

在这个例子中,使用 SELECT 语句从 Customers 表中检索所有列,并筛选出城市为 London 的客户。这个查询会返回一个结果集,包含符合条件的所有客户记录。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/612374
推荐阅读
相关标签
  

闽ICP备14008679号