SQLServer的创建,表创建,主键,束缚,含糊查询

打印 上一主题 下一主题

主题 1000|帖子 1000|积分 3000


设置

 




注意: 设置完成之后 重新启动


创建数据库


注意: 这个目标路径必须要有该文件名的文件夹

  1. -- 指向 master 数据库,告诉它我们要创建一个新的数据库操作了
  2. use master
  3. go
  4. -- 创建数据库
  5. create database StudentManageDB
  6. on primary
  7. (
  8.         -- 以下四个组成部分缺一不可(注意在数据库文件中字符串要用单引号'',没有双引号""):
  9.         -- 数据库文件的逻辑名(数据库服务内部使用的,外部是看不见的,叫什么名字不重要,只要不重复进行)
  10.         name='StudentManageDB_data',
  11.         -- 数据库物理文件名(绝对路径,SQLServe_DB 文件夹需要提前创建好),通常命名:逻辑名.mdf
  12.         filename='F:\SQLServe_DB\StudentManageDB_data.mdf',
  13.         -- 数据库文件初始大小(依据企业的具体项目而定)
  14.         size=10MB,
  15.         -- 数据文件增常量(当size大小不够用时,以一定的值来扩充,增常量的大小依据size而定)
  16.         filegrowth=5MB
  17. )
  18. -- 创建日志文件
  19. log on
  20. (
  21.         -- 理解同上
  22.         name='StudentManageDB_log',
  23.     filename='F:\SQLServe_DB\StudentManageDB_log.ldf',,
  24.         size=5MB,
  25.         filegrowth=1MB
  26. )
  27. -- 最后需要增加一个 go,代表结束了(不能加在 log on 上面,因为上面是一个整体)
  28. go
  29. -- 然后点击 执行 按钮(如果报错,双击错误信息,可以快速定位到错误的地方)
  30. -- 执行正常会提示:命令已成功完成。
复制代码
删除


  1. -- 指向 master 数据库,告诉它我们要创建一个新的数据库操作了
  2. use master
  3. go
  4. -- 判断当前数据库是否存在(在 master 里面有一个 sysdatabases 数据表,存放的是数据库信息)
  5. -- 如果能从 sysdatabases 中找到 StudentManageDB 数据库,会返回一个结果集,那么 exists 发现有结果集的话,就会返回true
  6. -- 在 SQL 文件中,你选中某一段代码,点击执行,可以只执行某一段代码,比如选中:select * from sysdatabases
  7. if exists (select * from sysdatabases where name='StudentManageDB')
  8. -- 删除数据库
  9. drop database StudentManageDB
  10. go
复制代码
附加


SQLServer数据范例

文本范例

文本范例:字符数据包罗恣意字母、符号或数字字符的组合


  • char:固定长度的非 Unicode 字符数据,最大长度为8000个字符

    • 比说说界说性别 Gender char(2),一个汉字占2个字符,以是界说 char(2)就行避免造成空间浪费(固然界说成 nchar(1)也行)

  • varchar:可变长度的非 Unicode 数据,最大长度为8000个字符

    • 比说说界说姓名 Name varchar(20),因为姓名的长度不固定,可能2个汉字也可能4个汉字甚至更多,以是我们界说为可变长度。占的空间少了,可以节省出来一部门空间,占多了顶多也就20个字符了(这里名字最多10个汉字)。

  • text:存储长文本信息,最大长度为2^31-1 (2147483647)个字符

    • 存储的字符范围就比力多了。如果界说的字符凌驾 char的8000个字符,那么就必要界说为 text 长文本范例的了。

  • nchar:固定长度的 Unicode 数据,最大长度为4000个字符
  • nvarchar:可变长度的 Unicode 数据,最大长度为4000个字符
  • ntext:存储可变长度的长文本,2^30-1 (1073741823)个字符
Unicode:是国际组织制定的可以容纳天下上所有文字和符号的字符编码方案 注意:带n的数据范例长度是不带n的两倍。比如nchar(1)和char(2)长度相同(1个字节 nchar 等于 声明2个字节的char,以是带 n 的最大长度就低落了)
整数范例

整数范例:


  • bigint:占用8个字节,可表现范围:-2^63 ~ 2^63-1之间的整数
  • int:占用4个字节,可表现范围:-2^31 ~ 2^31-1之间的整数
  • smallint:占用2个字节,可表现范围:-2^15 ~ 2^15-1之间的整数
  • tinyint:占用1个字节,可表现范围:0 ~ 255之间的整数
正确数字范例

正确数字范例:


  • decimal:-10^38 ~ 10^38-1之间的固定精度和小数位的数字
  • numeric:功能等同于decimal
  • 写法:decimal(整数,小数)和numeric(整数,小数)
  • 默认:如果不指定位数,默认18位整数,0位小数,比如身份证号:numeric(18,0),固然身份证号一样平常不消 numeric,而是用 char,因为身份证号有的还含有 X 字符
近似数字(浮点)范例

近似数字(浮点)范例:


  • float[(n)]:表现范围:-1.79E+308 ~ 1.79E+308 (1.79乘以10的308次幂)
  • n表现精度,在1-53之间取值,当n在1-24之间时,精度为7位有效数字,占用4个字节;当n在25-53之间时,精度为15位有效数字,占用8个字节
  • real:表现范围: -3.40E+38 ~ 3.40E+38占用4个字节存储空间,相称于float(24)
日期范例

日期范例:


  • datetime:允许的范围1753-1-1至9999-1-1
  • smalldatetime:允许的范围1900-1-1至2079-6-6
  • 时间精度不同:datetime正确到3/100秒;smalldatetime正确到1分钟
  • 格式分析:

    • 分隔符数字方式:2023-04-24或04/24/2023
    • 纯数字方式:04242023
    • 英文数字方式:Apr 24,2023

  • 注意问题:日期在使用的时候必要使用单引号''括起来
货币范例

货币范例:


  • money:货币数值介于 -2^63 ~ 2^63-1之间,正确到货币单位的千分之一。
  • smallmoney:货币数据介于 -214748.3648 ~ -214748.3648之间,正确到货币单位的千分之十。
位范例

位范例:


  • bit:表现“是/否”范例的数据。(0、1 / true、false)
二进制范例

二进制范例:


  • binary:固定长度的二进制数据,最大长度为8000个字节。
  • vbinary:可变长度的二进制数据,其最大长度为8000个字节。
  • image:可变长度的二进制数据,其最大长度为2^31个字节。应用场合:可存储图片。
数据表的创建

列的特征包罗的内容



  • 是否为空(NULL):在输入数据时,数据库的列允许为空时,可以不输入数据,否则必须输入。列是否为空要根据数据库设计的具体要求决定,对于关键列必须克制为空。
  •  是否是标识列(主动编号)
  •  是否有默认值:如果数据表的某列在用户不输入数据的时候,希望提供一个默认的内容,比如:用户如果不输入学员地址,则默认:'地址不详'。
  • 是否为主键:identity(开始位,增量)主键是实体的唯一标识,保证实体不被重复。一个数据表必须有主键才有意义,否则更新和删除实体都可能会出现非常。
新建查询创建数据表

  1. -- 创建学员信息数据表
  2. -- 不能再使用 use master 否则创建的数据表就会出现在 master 数据库中了(会出现有些学生创建完数据表,找不到了的情况)
  3. -- 需要指向 StudentManageDB 数据库,执行完就会发现左上角的下拉框“可用数据库”发生改变了
  4. use StudentManageDB
  5. go
  6. -- 判断数据表是否存在
  7. -- 数据表在某个数据库中的信息存在 sysobjects 这个数据表中
  8. -- 选中小括号中的代码执行,可查看 sysobjects 表中的信息,其中 sys 开头的都是系统表
  9. if exists(select * from sysobjects where name='Students')
  10. drop table Students
  11. go
  12. -- 创建表
  13. create table Students
  14. (
  15.         -- 学号
  16.         -- 假设学号是5位的,我们从10000开始,每次递增1
  17.         StudentId int identity(10000,1),
  18.         -- 姓名
  19.         StudentName varchar(20) not null,
  20.         -- 性别
  21.         Gender char(2) not null,
  22.         -- 出生日期
  23.         Birthday datetime not null,
  24.         -- 身份证号
  25.         StudentIdNo numeric(18,0) not null,
  26.         -- 年龄
  27.         -- 后期可通过出生日期动态推算出来,这里只作为练习
  28.         Age int not null,
  29.         -- 电话号码
  30.         PhoneNumber varchar(50),
  31.         -- 地址
  32.         StudentAddress varchar(500),
  33.         -- 所属班级(外键)
  34.         ClassId int not null       
  35. )
  36. go
复制代码
主键束缚与唯一束缚

主键(primary key)束缚:如 pk_StudentId
唯一(unique)束缚:如 uq_StudentIdNo
新建查询

  1. use StudentManageDB
  2. go
  3. -- 添加相关约束:
  4. -- 创建主键约束(单独选中执行可查看括号中 select 的结果)
  5. if exists (select * from sysobjects where name='pk_StudentId')
  6. alter table Students drop constraint pk_StudentId
  7. alter table Students add constraint pk_StudentId primary key(StudentId)
  8. go
  9. -- 添加完成后,刷新,打开 Students 表的列,可以看到 StudentId 是主键(钥匙了)
  10. -- 创建唯一约束
  11. if exists (select * from sysobjects where name='uq_StudentIdNo')
  12. alter table Students drop constraint uq_StudentIdNo
  13. alter table Students add constraint uq_StudentIdNo unique(StudentIdNo)
  14. go
  15. -- 添加完成后,也可以通过表右键 -> 设计 -> 右键:索引/键 -> 找到添加约束
复制代码
检查束缚与默认束缚

检查(check)束缚:如 ck_Age
 默认(default key)束缚:如 df_StudentAddress
  1. use StudentManageDB
  2. go
  3. -- 创建检查约束
  4. if exists (select * from sysobjects where name='ck_Age')
  5. alter table Students drop constraint ck_Age
  6. alter table Students add constraint ck_Age check(Age between 18 and 30)
  7. go
  8. if exists (select * from sysobjects where name='ck_PhoneNumber')
  9. alter table Students drop constraint ck_PhoneNumber
  10. -- 范围约束:len(PhoneNumber) >= 6 and len(PhoneNumber) <= 11、len(PhoneNumber) between 6 and 11
  11. alter table Students add constraint ck_PhoneNumber check(len(PhoneNumber) = 11)
  12. go
  13. -- 添加失败,与现有的数据发生冲突(通常是创建完数据表立马添加约束)
  14. -- 如果有非法数据,要么清空,要么修改成符合要求的数据
  15. -- select * from Students
  16. -- go
  17. -- 创建默认约束
  18. if exists (select * from sysobjects where name='df_StudentAddress')
  19. alter table Students drop constraint df_StudentAddress
  20. alter table Students add constraint df_StudentAddress default('地址不详') for StudentAddress
  21. go
  22. -- insert into Students (StudentName,Gender,Birthday,Age,StudentIdNo,PhoneNumber,StudentAddress,ClassId) values ('测试','男','1998-05-22',25,941548445145,'19552145822',default,1)
  23. -- 或者
  24. -- insert into Students (StudentName,Gender,Birthday,Age,StudentIdNo,PhoneNumber,ClassId) values ('沈月','女','1998-05-22',25,941548445161,'19552145874',1)
  25. -- go
  26. -- select * from Students
复制代码
手动操作



含糊查询

Like , between, in

  1. `select StudentName, StudentAddress from Students where StudentAddress like '河南%'`
  2. `select StudentName, StudentAddress from Students where StudentName like '%浩%'`
  3. `select StudentName, Age, StudentAddress from Students where Age between 24 and 26`
  4.   `select StudentName, Birthday from Students where Birthday between '1999-01-01' and '2001-05-05'`
  5. `select StudentName, Age, StudentAddress from Students where Age in (20,26)`
  6. `select StudentName, Age, StudentAddress from Students where StudentName in ('王可','沈月')`
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表