资讯专栏INFORMATION COLUMN

SQL Server初识(语言基础及数据定义功能)

spademan / 1770人阅读

摘要:定义外码的语法格式为列名外表名外表列名其中各项含义为级联删除。实现数据的完整性主码约束添加主码约束注意每个表只有能有一个约束用约束的列取值不能有重复,而且不允许有空值。语法表名约束名列名为雇员表电话号码列添加约束。

一.Sql Management的简单的使用:
1.第一次运行默认windows混合模式直接点击连接

2.创建一个数据库

粘贴以下代码到查询窗口

USE master
GO
IF NOT EXISTS (
   SELECT name
   FROM sys.databases
   WHERE name = N"TutorialDB"
)
CREATE DATABASE [TutorialDB]
GO

点击F5或者执行

3.创建一个表
首先将master更改为之前创建的数据库的名字

然后在窗口里面输入如下sql语句

-- Create a new table called "Customers" in schema "dbo"
-- Drop the table if it already exists
IF OBJECT_ID("dbo.Customers", "U") IS NOT NULL
DROP TABLE dbo.Customers
GO
-- Create the table in the specified schema
CREATE TABLE dbo.Customers
(
   CustomerId        INT    NOT NULL   PRIMARY KEY, -- primary key column
   Name      [NVARCHAR](50)  NOT NULL,
   Location  [NVARCHAR](50)  NOT NULL,
   Email     [NVARCHAR](50)  NOT NULL
);
GO

4.插入一个行

-- Insert rows into table "Customers"
INSERT INTO dbo.Customers
   ([CustomerId],[Name],[Location],[Email])
VALUES
   ( 1, N"Orlando", N"Australia", N""),
   ( 2, N"Keith", N"India", N"keith0@adventure-works.com"),
   ( 3, N"Donna", N"Germany", N"donna0@adventure-works.com"),
   ( 4, N"Janet", N"United States", N"janet1@adventure-works.com")
GO

5.查看查询结果

-- Select rows from table "Customers"
SELECT * FROM dbo.Customers;


这里可以更改显示方式和保存结果

6.更改查询窗口的服务器连接

注意:这并没有改变你的服务器对象资源管理器连接,只是当前查询窗口。
两者之间的区别:否允许连接到数据库引擎”和“登录”的区别--转载自CSDN的xcntime。

(温馨提示:一定要选择自己要操作的数据库然后选中所需要的代码区域再点击执行!)

下面正式开始SQL的学习

一. SQL包含的主要动词

1.数据定义:

CREATE (创建)、DROP(删除)、ALTER(修改)     

2.数据查询:

SELECT (查询出数据,也可用于变量赋值)

3.数据操作:

INSERT(插入)、UPDATE(更新)、DELETE(删除) 

4.数据控制:

GRANT(授权)、REVOKE(回收权限)、DENY(拒绝权限)

二. 常用的SQL的数据类型
1.精确数字

数据类型 范围 存储
bigint -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807 8 字节
int -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 4 字节
smallint -2^15 (-32,768) 到 2^15-1 (32,767) 2 字节
tinyint 0 到 255 1 字节
bit 可以取值为 1、0 或 NULL 的 integer 数据类型。 1(2)个字节

2.近似数字

float -1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308 8 字节
realt -3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38 4 字节

3.日期和时间

datetime 存储从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒 8 字节
smalldatetime 存储从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟 4 字节

4.字符串

char(n) char:字符型,存储指定长度的定长非统一编码型的数据,必须指定列宽,列宽最大为8000 个字符
varchar(n) 字符型,存储非统一编码型字符数据,数据类型为变长,要指定该列的最大长度,存储的长度不是列长,而是数据的长度
text 字符型,存储大量的非统一编码型字符数据

5.Unicode 字符串

nchar(n) 统一编码字符型,存储定长统一编码字符型数据,能存储4000种字符,统一编码用双字节结构来存储每个字符
nvarchar(n) 统一编码字符型,用作变长的统一编码字符型数据
ntext 统一编码字符型,用来存储大量的统一编码字符型数据

6.二进制字符串

binary(n) 二进制数据类型,存储可达8000 字节长的定长的二进制数据
varbinary(n) 二进制数据类型,用来存储可达8000 字节长的变长的二进制数据
image 二进制数据类型,用来存储变长的二进制数据
基本表的定义和删除

注意:默认的sql语言不区分大小写。
1.

CREATE TABLE<表名>()
 <列名> 数据类型[列级完整性的约束定义]
 {,<列名> 数据类型[列级完整性约束定义]...}
 [,表级完整性约束定义])

值得提的一点是:
大部分完整性约束都既可以在“列级完整性约束定义”出定义,也可以在“表级完整性约束定义”,但有些涉及多个列的完整性约束必须在“表级完整性约束定义”

文法描述常用符号解释(在sql语法中并不输入):
"[]"表示内容是可选的
"{}"与"..."一起表示可以出现0次或者多次
"|"表示在多个短语中选择一个,比如:term1|term2|trem3

在列级完整性约束可以定义如下的约束

NOT NULL:限制列的取值非空

DEFAULT:指定列的默认值

UNIQUE:限制列的取值不能重复

CHECK:限制列的取值范围

PRIMARY KEY:指定本列的主码

FOREIGN KEY:定义本列为引用其他表的外码

表级完整性约束除了NOT NULL和DEFAULT不能定义外其他约束都可以。
以下需要注意几点:
一.如果check约束定义多列之间的取值约束则只能定义在表级完整性约束定义
二.如果在"表级完整性约束定义"处定义主码,则主码列要用括号括起来,即:PRIMARY KEY(列 1{[,列 2]*});
三.如果在"表级完整性约束定义"处定义外码,则FOREIGN KEY和<列名>均不能省略。

2.定义主码约束
如果是在列级完整性约束处定义主码,则语法格式为:

<列名> 数据类型 PRIMARY KEY[(<列名> [,....n])]

如果是在表级完整性约束处定义主码,则语法格式为:

PRIMARY KEY(<列名> [,...n])

3.定义外码的约束
一般情况下外码是单列的,他可以定义在列级完整性约束处,也可以定义在表级完整性约束处。定义外码的语法格式为:

[FOREIGN KEY(<列名>)] REFERENCES <外表名>(<外表列名>)
[ON DELETE { CASCADE |NO ACTION }]
[ON UODATE { CASCADE |NO ACTION }]

其中各项含义为:

ON DELETE CASCADE:级联删除。表示当删除主表中的记录时,如果在子表之中有对这些记录的主码值的引用,则一起删除这些记录。

ON DELETE NO ACTION:限制删除。表示当删除主表的记录时,如果在子表中有对这些记录的主码值的引用,则拒绝删除主表中的记录。

ON UODATE CASCADE:级联更新。表示当更新主表中有子表引用的列值时,如果在子表中有对这个列的值的引用,则一起更改。

ON UODATE NO ACTION:限制更新。表示当更新主表中的有子表引用的列值时,如果在子表中有对这个列值的引用,则拒绝更改主表的值

举例 创建三张表:
代码:
CREATE TABLE Student(
sno  char(7)      PRIMARY KEY,/*在列级完整性约束处定义主码的约束*/
Sname char(10)    NOT NULL,
Ssex char(2),
Sage tinyint,
Sdept char(20)
)

CREATE TABLE COURES(
Cno  char(6)     NOT NULL,
Cname char(20)   NOT NULL,
Credit tinyint,
Semester tinyint, 
PRIMARY KEY(cno)            /*在表级完整性约束处定义主码的约束*/  
)

CREATE TABLE SC (
Sno char(7) NOT NULL,
Cno char(6) NOT NULL,
Grade tinyint,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
)
 
删除表

SQL语句为:

DROP TABLE  <表名> {[, <表名>]...}

例如删除test表:

DROP TABLE test 
修改表结构

如果需要添加列删除列或者修改列定义,实现添加删除约束功能,则可以使用ALTER TABLE 语句实现。
alter table的语法:

ALTER TABLE<表名>
[ ALTER COLUMN <列名>新数据类型]      --修改列的定义
| [ADD <列名>数据类型约束定义]         --添加新的列
| [DROP COLUMN<列名>]                --删除列
| [ADD [constraint <约束名>] 约束定义]--添加约束
| [DROP [constraint] <约束名>]       --删除约束

举例:
添加"专业"这个新列

ALTER TABLE  Student
ADD Spec char(10) NULL

修改类型为char(20)

ALTER TABLE  Student
ADD COLUMN Spec char(20)

删除该列

ALTER TABLE  Student
DROP COLUMN Spec 

添加和删除约束在后面会提到

数据的完整性

1.列级约束
主要是对列的数据类型,数据格式(学号各个位所代表的意义),取值范围(学生成绩取值范围)和取值集合,是否能为空值的约束。
2.元组约束
元组约束指元组各个字段之间的相互约束,如开始日期小于结束日期。
3.关系约束
若干个元组之间,关系之间的联系的约束。学号的取值不能重复也不能取空值,学生选课表的学号要受学生表中的学号约束。

实现数据的完整性

1.主码约束
添加主码约束注意:

每个表只有能有一个PRIMARY KEY约束

用PRIMARY KEY 约束的列取值不能有重复,而且不允许有空值。

语法格式:

  ALTER TABLE 表名
     ADD [ CONSTRAINT <约束名>]  PRIMARY KEY (<列名> [,... n]) 
    

举例:对雇员表和工作表分别添加主码约束

ALTER TABLE 雇员表
 ADD CONSTRAINT PK_EMP PRIMARY KEY(雇员编号)
ALTER TABLE 工作表
 ADD CONSTRAINT PK_JOB PRIMARY KEY(工作编号)

2.UNIQUE约束
限制一个列中不能有重复的值

UNIQUE约束的列允许有一个空值;(主码约束不允许)

一个表中可以定义多个UNIQUE约束;(主码只能定义一个)

可以在多个列上定义一个UNIQUE约束,表示这些组合起来不能有重复值。

语法:

ALTER TABLE 表名
 ADD [CONSTRAINT <约束名>]  UNIQUE(<列名> [, ....n])

为雇员表“电话号码”列添加UNIQUE约束。

ALTER TABLE 雇员表
 ADD CONSTRAINT UK_UID UNIQUE (电话号码)

3.外码约束
注意:外码所引用的列必须是又primary key约束的或者unique约束定义的列。
语法:

ALTER TABLE 表名
ADD [CONSTRIANT <约束名>] FOREIGN KEY(<列名>) REFERENCES 引用表名(<列名>)

为雇员表的工作编号添加外码引用约束,此列引用工作表的工作编号列

ALTER TABLE 雇员表
ADD CONSTRAINT JOB_ID FOREIGN KEY (工作编号)REFERENCES 工作表(工作编号)

4.default约束

用于初始化数据

ALTER TABLE  表名
ADD [CONSTRAINT <约束名>] DEFAULT 默认值 FOR 列名

设置默认工资为1000

ALTER TABLE 雇员表
ADD CONSTRAINT DEFAULT 1000 FOR 工资

5.CHECK约束

限制值的取值范围,让每一个数据都有意义

语法:

ALTER TABLE 表名
 ADD [CONSTRAINT<约束名>] CHECK (逻辑表达式)

在雇员表中添加员工的工资大于1000

  ALTER TABLE 雇员表
   ADD CONSTRAINT CHK_Salary CHECK(工资>=1000)

在工作表中添加最低工资小于等于最大工资

   ALTER TABLE 工作表
   ADD CONSTRAINT CHK_job_Salary CHECK(最低工资<=最高工资)

上述这些约束都可以在定义表时同时定义

CREATE TABLE 工作表(
    工作编号 char(8) PRIMARY KEY,
    最低工资 int,
    最高工资 Int,
    CHECK (最低工资<=最高工资)
    )
  
CREATE TABLE 雇员表(
 雇员编号 char(7) primary key,
 雇员名  char(10),
 工作编号 char(8) REFERENCES 工作表(工作编号),
 工资  int DEFAULT 1000 CHECK(工资>=1000),
 电话号码 char(8)NOT NULL UNIQUE
)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32240.html

相关文章

  • TiDB 源码阅读系列文章(二)初识 TiDB 源码

    摘要:本文为源码阅读系列文章的第二篇,第一篇文章介绍了整体的架构,知道有哪些模块,分别是做什么的,从哪里入手比较好,哪些可以忽略,哪些需要仔细阅读。具体的实现是按照协议实现,具体的协议可以参考协议文档。 本文为 TiDB 源码阅读系列文章的第二篇,第一篇文章介绍了 TiDB 整体的架构,知道 TiDB 有哪些模块,分别是做什么的,从哪里入手比较好,哪些可以忽略,哪些需要仔细阅读。 这篇文章是...

    TigerChain 评论0 收藏0
  • TiDB 源码阅读系列文章(二)初识 TiDB 源码

    摘要:本文为源码阅读系列文章的第二篇,第一篇文章介绍了整体的架构,知道有哪些模块,分别是做什么的,从哪里入手比较好,哪些可以忽略,哪些需要仔细阅读。具体的实现是按照协议实现,具体的协议可以参考协议文档。 本文为 TiDB 源码阅读系列文章的第二篇,第一篇文章介绍了 TiDB 整体的架构,知道 TiDB 有哪些模块,分别是做什么的,从哪里入手比较好,哪些可以忽略,哪些需要仔细阅读。 这篇文章是...

    李文鹏 评论0 收藏0
  • 【Zinx第二章-初识Zinx框架】Golang轻量级并发服务器框架

    摘要:主要是存放一些框架的全部模块的抽象层接口类,框架的最基本的是服务类接口,定义在模块中。使用完成应用程序实际上,目前框架的对外接口并未改变,所以的测试依然有效。 【Zinx教程目录】Zinx源代码https://github.com/aceld/zinx (请拷贝网址,在浏览器打开[简书不让自动跳转])完整教程电子版(在线高清)-下载Zinx框架视频教程(框架篇)(完整版下载)链接在下面...

    rottengeek 评论0 收藏0
  • PostgreSQL的实践一:初识

    摘要:每个服务由多个进程组成,为首的进程名为。服务使用字节长的内部事务标识符,即时发生重叠后仍然继续使用,这会导致问题,所以需要定期进行操作。操作被认为是紧跟操作后的操作。在涉及高比例插入删除的表中,会造成索引膨胀,这时候可以重建索引。 简介和认知 发音 post-gres-q-l 服务(server) 一个操作系统中可以启动多个postgres服务。每个服务由多个进程组成,为首的进程名为p...

    yibinnn 评论0 收藏0
  • MySql Binlog初识

    摘要:日志最大值,默认,。该大小并不能非常严格控制大小,尤其是当到达比较靠近尾部而又遇到一个较大事务的时候,系统为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有都记录进入当前日志,直到该事务结束。 Mysql日志MySQL 的日志包括错误日志(ErrorLog),更新日志(Update Log),二进制日志(Binlog),查询日志(Query Log),慢查询日志(Slow...

    Wildcard 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<