sql server2019学习笔记 #新建数据库 #新建表 #常用数据类型 #提交数据出错未更新任何行,错误源:Net SqlClient Data Pro#varchar和nvarcharc的区别

1创建数据库

1.1SQL server Management Studio图形界面:

资源管理器-新建数据库
(建议首先在目标存储位置建立文件夹)

1.2T-sql脚本:

新建查询【红线圈】


create database testdb
on primary(                  --数据库文件 .mdf
name='testdb',               --文件名称
filename='E:\testdb.mdf',    --文件存储路径,如果其中有文件夹一定要事先创建好文件夹才可以
size=10,                     --文件初始大小
maxsize=100mb,               --文件最大
filegrowth=2                 --增量   记得每一个赋值后面都有逗号,但是最后一个不可以有
)
log on(                      --日志文件 .ldf
name='testdb_log',
filename='E:\testdb_log.ldf',
size=10,
maxsize=100mb, 
filegrowth=2 
)

ctrl+f5 或者√(分析)【蓝线圈】
如没有报错继续
执行(f5)【黑线圈】
在这里插入图片描述
刷新一下,便可以看到新建的数据库,完美!
在这里插入图片描述

2新建表

2.1SSMS图形界面

数据库-表-新建表 即打开了表设计器

2.2 T-SQL

命令内,用,隔开小命令
命令外,用GO隔开两个命令

一些常见的约束:
NOT NULL --非空
DEFAULT’默认’ --默认值
DEFAULT数字
IDENTITY(种子,增量) --标识列
numeric(18,0) --18位数字,小数位数为0,一般身份证号码啥的
PRIMERY KEY或者最后用 PRIMARY KEY(某列名) --主键
UNIQUE–唯一性约束
CHECK(约束条件) --check约束

唯一性约束和主键约束
区别:唯一性可以为空,主键不可以为空
相同:都不允许重复

3位的char要求每个字符在0-9之间
no char(3) check(no like ‘[0-9][0-9][0-9]’)

设置identity的时候以及表设计器操作也是一样,一定这个字段是int
身份证学号什么的要设置char
1有可能出现0的开头,数字没法表示
2一般不用于计算,所以一般不用数字而用字符

设置性别gender
1可以Bit default 0,这样还是0,1自己去判断男女,什么都不填默认false
2可以char(2) default’男‘,除非是初始什么都不填才可以default值显示
3可以 char(2) check (gender in (‘男’,’女‘)),这样就非要填一个什么
4可以 char(2) default ‘男’ check (gender in (‘男’,’女‘))
5可以 char(2) check(gender=‘男’ or gender=‘女’),其实和3是一样的
在这里插入图片描述


USE booktest
GO
CREATE TABLE Student(
Sno CHAR(7) PRIMARY KEY,
Sname varchar(10) NOT NULL,
Sex bit DEFAULT 0,
Ssex CHAR(2) DEFAULT '男', --不填默认男
Gender CHAR(2) CHECK (Gender IN ('男','女')),  --没有default并且没要求not null 所以不填会默认 Null
Sgender CHAR(2) DEFAULT '男' CHECK (Sgender IN ('男','女')), --不填默认男
Sage int CHECK(Sage BETWEEN 0 AND 100),
Sdept varchar(10) NOT null
)
GO

在这里插入图片描述

一些小栗子
USE Guanke2019
GO
 CREATE  TABLE stuInfo2(
 stuName VARCHAR(4) NOT NULL,
 stuNo VARCHAR(10) NOT NULL,
 Credit SMALLINT CHECK(Credit BETWEEN 1 AND 10),
 stuSeat INT IDENTITY(1,1),
 stuId NUMERIC(18,0),
 stuAddress TEXT DEFAULT'具体不详'
 PRIMARY KEY(stuNo),
 PRIMARY KEY(stuNo,Cno)  --联合主键
 )

 CREATE TABLE stuInfo7(
 stuNo VARCHAR(10) PRIMARY KEY CHECK(LEN(stuNo)=3),
 stuName VARCHAR(10) UNIQUE,
 score INT NOT NULL
 )

2.3注意

默认对表的结构不允许修改,因此
【工具】-【选项】-取消勾选【阻止保存要求重新创建表的更改】
在这里插入图片描述

2.4出错合集

(1)提交数据出错
新创建好的表,编辑前200行数据,添加编辑数据时出错,一行数据提交不了,报错:未更新任何行,错误源:Net SqlClient Data Provider
在这里插入图片描述
然后查看表设计器
stuNo varchar(3)
stuName varchar(2)
结合各种帖子,大概意思就是数据的长度超过了规定设置的长度
猫猫摇头,又是一个坑🕳
这就不得不讲到varchar(X)和nvarcharc(X)的区别了
在教材上写:

  • varchar(可变长度的非Unicode数据)
  • nvarchar(可变长度的Unicode数据)

然后翻译过来就是:

  • varchar记录一个英文或英文标点,对应一个字符长度
    记录一个中文或中文标点,对应两个字符长度
  • nvarchar记录一个英文/中文/字符,对应一个字符长度
  • n是指national的意思

总之:

  • 英语环境用varchar,国内中文环境用nvarchar
  • varchar比较节省空间
  • 若是多语言的应用坏境,则需要采用unicode即用nvarchar

所以出错原因是
varchar(2)输入‘狗子’这两个中文字符,占位4个字符长度,不合适
所以

  • 首先,

如果用varchar的话,最好varchar(10)空间放多一点,如果不够实际占位是可以自动缩小的,超过了就难办了

  • 其次,

控制输入字符的长度len(列名),也是控制占位的字符长度的

(2)默认值没有显示
stuAddress设置了默认值,但是在新添数据的时候没有显示
在这里插入图片描述
在这里插入图片描述
根据上面的出错思路
大概又是我varchar设置小了,原始设置为varchar(10)
现在修改为varchar(50)然后它可以了!显示了!
明明这个默认地址这么长,还放个10,真是心大!!
在这里插入图片描述

3常见的数据类型

分类数据类型说明1说明2说明3
二进制image存储图像
-binary固定长度的二进制
-vbinary可变长度的二进制
分类数据类型说明1说明2说明3
文本数据类型char字符数据包括任意数字、字母和数字的组合,在单引号内输入固定长度的非unicode字符长度最多为8KB
-varchar-可变长度的非unicode字符
-nchar-固定长度的unicode字符
-nvarchar-可变长度的unicode字符
-text-存储长文本信息长度最多为2GB
-ntext-存储可变长度的长文本

(1)char与varchar,nchar与nvarchar的区别
两个字符型字段分别定义为char(10)和varchar(10),当给它们存入“abc”这个数据时,char(10)字段占用十个字节的存储空间,会在abc之前补充7个空格,而varchar(10)只占用3个字节存储空间,这就是char和varchar的区别。可以看出varchar比较适合存储长度变化很大的数据,但是char的存取速度会比较快,因为是固定长度。
(2)nchar和char,nvarchar和varchar,ntext和text的区别
主要区别在于是否使用Unicode进行编码。一般情况下在仅仅处理中文及英文,不涉及特殊符号时不需要使用Unicode,Unicode编码中由于每个字符都占用两个字节,而在非Unicode编码中,英文及英文符号占一个字节,中文及中文符号占两个字节,也就是说nchar(5)与char(10)都可以写入5个中文或中文符号,前者写入5个英文或者英文符号,后者写入10个英文或英文符号。
(3)char类和text的区别
char和varchar以及nchar和nvarchar字段的数据是保存在表中,而text字段可以保存大容量的文本,数据是保存在另外的空间里,当然在表面上看来并没有什么区别。

分类数据类型说明1说明2说明3
日期和时间数据类型time仅存储时间,精度为 100 纳秒hh:mm:ss[.nnnnnnn]时间和日期在单引号内输入
-date仅存储日期,从 0001 年 1 月 1 日 到 9999 年 12 月 31 日YYYY-MM-DD
-smallltimedate日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束,精确到1分钟YYYY-MM-DDhh:mm:ss
-timedate日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束,精确到3/100秒,即3.33 毫秒YYYY-MM-DDhh:mm:ss[.nnn]
-timedate2从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒YYYY-MM-DDhh:mm:ss[.nnnnnnn]
-timedateoffset与 datetime2 相同,外加时区偏移YYYY-MM-DDhh:mm:ss[+/-]hh:mm
-timestamp时间戳
分类数据类型说明1说明2说明3
数值数据类型bigint整数可存储8字节整数(-9223372036854775808~9223372036854775807)仅包含数字,正数负数和分数
-int-可存储4字节整数(-2147483648~2147483647)
-smallint-可存储2字节整数(-32768~32767)
-tinyint-可存储1字节整数(0 到255)
-float[(n)]数字从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据参数 n 指示该字段保存 4 字节还是 8 字节,N< =24-4字节,N> 24-8字节,默认n=53
-real-从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据
-numeric(p,s)固定精度和比例的数字p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值,默认是 18。s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值,默认是 0。
-decimal(p,s)-
分类数据类型说明1说明2说明3
货币数据类型money介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据十进制货币
-smallmoney介于 -214,748.3648 和 214,748.3647 之间的货币数据
布尔数据类型bit存储0或1表示是/否的数据

4表的完整性约束

4.1实体完整性

4.2域完整性

4.3引用完整性

5查看已注册的服务器

快捷键:ctr+alt+G
或者
在这里插入图片描述
铛铛!
在这里插入图片描述


--日期
SELECT CONVERT(date,GETDATE())            --日期:2016-05-03
--用于定义一个与采用 24 小时制并带有秒小数部分的一日内时间相组合的日期
SELECT CONVERT(datetime,GETDATE())        --2016-05-03 15:02:38.763
--定义结合了 24 小时制时间的日期。
SELECT CONVERT(datetime2,GETDATE())        --2016-05-03 15:02:38.7630000
--用于定义一个与采用 24 小时制并可识别时区的一日内时间相组合的日期。
SELECT CONVERT(datetimeoffset,GETDATE())--2016-05-03 15:02:38.7630000 +00:00
--此时间为 24 小时制,秒始终为零 (:00),并且不带秒小数部分。
SELECT CONVERT(smalldatetime,GETDATE())    --2016-05-03 15:03:00
--定义一天中的某个时间。此时间不能感知时区且基于 24 小时制。
SELECT CONVERT(time,GETDATE())            --15:02:38.7630000
--时间戳
SELECT CONVERT(timestamp,GETDATE())        --0x0000A5FB00F7EB4D

参考:
(1)https://blog.csdn.net/zhaojie911272507/article/details/81166149?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161596231416780261956350%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161596231416780261956350&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-2-81166149.first_rank_v2_pc_rank_v29&utm_term=sqlser+%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B
(2)https://blog.csdn.net/huyu107/article/details/51304662



  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值