黑马程序员-自学笔记-SQL Server与ADO.Net(二)

SQL Server与ADO.Net(二)

--------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

1、数据的更新(修改数据)

l   修改单个值

•    updata 要修改的表名 set 字段名=值 where条件

l  修改多个值

•    updata 表名 set 字段1=值1,字段2=值2 where条件

l   追加可使用:字段=字段+值

l   where多条件使用and连接

•    优先级:not -> and -> or

•    不等于:<>或!=

l  更新一个列:update Student set sSex = ‘男’

l  更新多个列: update  Student set sSex ='女',sAge = 18,sBirthday='1989-8-8'

l  更新一部分数据: update  Student set sClassId= 4 where sClassId = 1,用where语句表示只更新Name是’tom’的行,注意SQL中等于判断用单个=,而不是==。

l  Where中还可以使用复杂的逻辑判断update Student set sAge=30 wheresName='华佗' or sAge<25 ,or相当于C#中的||(或者)

l  所有学生的年龄加1update Student set sAge = sAge +1

l  update Student set sClassId=6

l  where (sAge>20 and sAge<30)or(sAge=50)

l  Where中可以使用的其他逻辑运算符:or、and、not、<、>、>=、<=、 <>(或!=)等

 

2、备份表数据(*)

l   select * into 新表名 from 源表名

l   可以加where条件

l   备份表结构

•    select * into 新表 from 源表 where 1>2

l  备份表时只会备份表结构,对于约束不会备份

 

3、插入多条数据(*)

l  从源表中某特定数据加到一新表中

l  insert into 目标表名 select 字段列表 from 源表名

 

4、数据删除

l  删除表中全部数据:delete from 表名

    •     只删除数据,如果不加where条件表明删除所有数据

•     delete只是删除数据,表还在,和drop table不同。

l  delete也可以带where子句来删除一部分数据

l   对于删除的数据,主键自动增长计数器依旧执行

l  想主键清零,从头来过使用truncate

•    truncate table 表名

•     truncate清空表中的数据,不能加where子句

•     truncate删除是数据不计入日志,慎用

l  删除表

•     drop table 表名

 

5、约束

数据库约束是为了保证数据的完整性(正确性)而实现的一套机制

l  非空约束  not null

l  主键约束(PK) primary key constraint 唯一且不为空

l  唯一约束 (UQ)unique constraint 唯一,允许为空,但只能出现一次

l  默认约束 (DF)default constraint 默认值

l  检查约束 (CK)check constraint 范围以及格式限制

l  外键约束 (FK)foreign key constraint 表关系

 

9、手动添加约束(设计器)

l  单击右键 -> 设计表

l  主键

l   唯一约束

•     右键 -> 索引键 -> 添加 -> 常规 -> 唯一键

•     命名“UQ_表名_字段名”

l  检查约束

•     右键 -> check约束 -> 添加 -> 表达式

•    命名“CK_表名_列名”

 

10、T-SQL实现添加约束

l   使用修改表结构方式实现

l   修改表结构使用alter table

l   alter table 表名 add constraint 约束名 约束类型与条件

l  主键约束:primary key(字段)

l   唯一约束:unique(字段)

•    注意为空与空字符串

l   check约束:check(约束表达式)

l   默认约束:default(值) for 字段名

l  添加多个约束(逗号隔开)

•    alter table 表名

•    add

•    constraint 约束名 约束类型与条件

l  如:1、EmpId设为主键

修改表结构使用alter table

alter table Employee add constraintPK_Empolye_EmpId primary key(EmpId)

修改表Employee

在表Employee中添加一个约束,约束类型是主键约束

主键字段为EmpId,名字为PK_Employee_EmpId

l  2、EmpName必须唯一(不能有重名)

alter table Employee add constraintUQ_Employee_EmpName unique(EmpName)

l  3、性别只能是“男”或“女”

    altertable Employee

   addconstraint CK_Employee_EmpGender check(EmpGender='男' or EmpGender='女')               

l  4、年龄只能是0-150岁(含)

   altertable Employee

   addconstraint CK_Employee_EmpAge check(EmpAge>=0 and EmpAge<=150)            

l  5、Email不能为空

   添加一些别的约束(长度大于20,必须包含@)

   函数len(),可以得到字段的长度

   altertable Employee add constraint

CK_Employee_EmpEmailcheck(len(EmpEmail)>=20 and Empmail like '%@%')

l  6、alter table 表名 constraint DF_表名_列名 default(值) for 列名

 

11、删除约束

l  alter table 表名 drop constraint 约束名

l  可以删除多个约束,用,分隔开

 

12、建表时添加约束

l   在字段后直接加上约束类型与条件

l   主键:primary kay

l   非空约束:not null

l   唯一约束:unique

l   检查约束:check(约束表达式)

l   默认值约束:default(值)

 

13、如何查看已有约束

l   约束与表是同一级别

l   select * from sys.objects

•     type不同表示的类型不一样

•    S      系统表

•    U     用户表

•    PK 主键

•    UQ 唯一约束

•    C     检查约束

•    D     默认约束

l  注:存储过程

       sp_tables                   获取数据库中的表和视图

       sp_databases  获取所有数据库

       sp_datatype_info    获取数据的类型

l  如何查看存储过程的实现

            选择可编程性 -> 找到sp_tables(可以删选得到)-> 右键修改

l  可是使用sp_help 表名进行查看

 

14、修改表

l  删除一列

•    alter table 表名 drop column 列名

l  增加一列

•    alter table 表名 add 列名 类型

l  修改数据类型

•    alter table 表名 alter column 列名 类型

 

15、关于外键

l  设计器操作

•     在外键表上右键设计

•     任意右键 -> 关系 -> 添加 -> 设置表和列规范(谁与谁关联)

•     命名规范:FK_外键表_主键表_主键

l  T-SQL

•    alter table 外键表 add constraint 外键名 foreign key(外键) references 主键表(主键)

 

16、数据的检索(查询)

l   检索数据

•     select * from 表名

•     select 字段列表 from 表名

•     select * from 表名 where条件

l   别名

•     字段名 as 别名(可省略as)

•     别名=字段名

l   select的常见使用

•     获得当前时间:select getdate()

•     语句计算结果:select 1+1

 

附:随机练习代码

--练习

--use master

--go

 

--createdatabase School

--on

--(

--  name='School',

--  filename='D:\Files\DataBase\School.mdf',

--  size=3mb,

--  maxsize=1024mb,

--  filegrowth=10%

--)

--log on

--(

--  name='School_Log',

--  filename='D:\Files\DataBase\School_Log.ldf',

--  size=1mb,

--  maxsize=1024mb,

--  filegrowth=10%

--)

--go

 

--创建学生成绩表Score

--scoreId,studentId,english,math

use School

go

create tableT_Score

(

    scoreId int,

    studentId int,

    english int,

    math int

)

 

--创建老师表Teacher

--tId,tName,tSex,tAge,tSalary,tBirthday

create tableT_Teacher

(

    tId int,

    tName nvarchar(10),

    tSex bit,

    tAge int,

    tSalary int,

    tBirthday datetime

)

 

--学生表Student

--studentId  name age

create tableT_Student

(  

    studentId int,

    [name] nvarchar(10),

    age int

)

 

--插入数据

insert intoT_Teacher(tName,tSex, tAge, tSalary,tBirthday) values('赵六',0,25,3500,1988-6-5)

insert intoT_Teacher(tName,tSex, tAge, tSalary,tBirthday) values('赵六c','True',25,3500,'1988-6-5')

 

--select语句查看表内容

select *from T_Teacher;

select tName,tBirthdayfrom T_Teacher;

 

--当插入完整数据的时候,列名可以省略(不推荐使用)

insert intoT_Teacher

values('小五',1,24,4000,'1989-9-28')

 

--当没有做非空约束的时候,可以不给其插入数据

--insertinto可以插入一部分内容

insert intoT_Teacher(tName,tSex)values('兰兰','false')

 

--当数据为空的时候,里面是nullnull表示数据不知道是什么

 

--修改所有的age为岁

update T_Teacherset tAge=25;

--此类操作慎重操作,update使用极少出现全部更改的情况,注意每次使用时都要有where,where表示条件,更新数据满足的要求

update T_Teacherset tAge=30where tSalary>=4500;

 

--将性别为的年龄都改为,工资都改为

update T_Teacherset tAge=20,tSalary=5000where tSex=0;

 

--将男老师的工资都加元

update T_Teacherset tSalary=tSalary+2000where tSex=1;

 

--将工资大于,年龄大于的男老师,名字后面加上小康

update T_Teacherset tName=tName+'_小康'where tAge>25and tSalary>6000and tSex=1;

 

--备份T_Teacher表数据

select *into NewTeacher from T_Teacher;

--这里只备份了数据和自动增长,约束没有跟过来

 

--备份所有的姓名

select *into T_Name from T_Teacher wheretAge>=25;

 

--备份表结构

select *into T_NewTeacherfrom T_Teacher where 1>2;

 

--插入金条数据

insert into表名(字段名)--values()

select *from 源表名

 

insert intoT_NewTeacher

select *from T_Teacher

 

--删除T_T_NewTeacher中所有的数据

delete fromT_NewTeacher

 

--删除T_T_NewTeacher中某些数据

delete fromT_NewTeacher wheretAge<18;

 

--truncate删除表(重置自动增长字段的索引)

truncate table T_NewTeacher

--truncate要慎用,因为它不将数据记录日志文件,一旦被干掉,就无法恢复

 

--直接删除表,就是表没了,不仅仅是数据没了

drop tableT_NewTeacher

 

use School

go

--查看数据

select *from MyStudent

 

--练习:给studentId是的英语成绩加分

update MyStudentset FEnglish=FEnglish+10where FId=1

--练习:考试题偏难,所有人的成绩加分

update MyStudentset FMath=FMath+5,FEnglish=FEnglish+5;

--练习:所有女学生的年龄减岁

update MyStudentset FAge=FAge-1where FGender=''and FAge>=2;

 

--==外键约束===

--首先插入分数,使用一个学生

use School

go

select *from T_Student;

select *from T_Score;

 

--插入分数

insert intoT_Score(studentId,english, math)values(1,100,100)

 

--删除一条学生ID等于的记录

delete fromT_Student where studentId=1;

--此时会报错

 

--如果非要删除学生信息就需要将外键表中的引用全部删除

delete fromT_Score where studentId=1; --删除外键表引用

delete fromT_Student where studentId=1; --删除主键表数据

--即使是主键表,如果数据没有被引用,删除不会受到影响

 

--T-SQL添加外键

--alter table 外键表addconstraint外键名foreign key(外键) references主键表(主键)

alter tableT_Score add constraint Fk_T_Score_T_Student_studentIdforeignkey(studentId)references T_Student(studentId);

 

--==T-SQL添加约束===

--重新创建两张表,来实现修改表结构,添加约束

use School

go

create tableStudent

(

    studentId int identity(1,1)primary key,

    [name] nvarchar(10),

    age int

)

--修改表结构添加约束

--er table 表名addconstraint约束名约束类型与条件

 

--添加一个唯一约束

alter tableStudent add constraint UQ_Studnet_nameunique([name]);

 

--添加数据检查

insert intoStudent values('张三',18);

 

--添加检查约束

--年龄要求在岁到岁之间

alter tableStudent add constraint CK_Student_agecheck(age>=18and age<=40);

 

--添加一个数据

insert intoStudent values('李四',41);

 

--添加一个默认约束,默认年龄都是岁

alter tableStudent add constraint DF_Student_agedefault(20)for age;

insert intoStudent([name])values('王五');

 

--一次添加多个约束

alter tableStudent

add

constraint UQ_Studnet_name unique([name]),

constraint CK_Student_age check(age>=18and age<=40),

constraint DF_Student_age default(20)for age;

 

--删除约束

--alter table 表名dropconstraint约束名

alter tableStudent drop constraint UQ_Studnet_name;

--一次删除多条约束

alter tableStudent

drop

constraint UQ_Studnet_name,

constraint CK_Student_age ,

constraint DF_Student_age ;

 

--==建表时添加约束==

create tableStudentInfo

(  

    studentId int identity(1,1)primary key,

    [name] nvarchar(10)unique not null,

    age intcheck(age>=18and age<=40)default(20)

)

 

--查看系统表数据

select *from sys.objects

sp_help StudentInfo

 

--==修改表==

create tableTT

(  

    studentId int identity(1,1)primary key,

    [name] nvarchar(10),

    age int

)

--添加一个性别的字段

alter tableTT add gender bit,mathint,englishint;

alter tableTT add isDel bit default('false');

 

--删除一个字段

alter tableTT drop column math,english;

 

--修改字段类型

alter tableTT alter column gender nvarchar(10);

 

--==约束练习==

--Teacher表中

--tSex  控制只能是男女,默认男

--tAge  -40之间默认

--方法

create tableTeacher

(

    tSex nvarchar(10)default('')check(tSex=''or tSex=''),

    tAge intcheck(tAge>=30and tAge<=40)default(30)

)

insert intoTeacher(tAge)values(40);

insert intoTeacher(tSex)values('');

select *from Teacher;

--方法

create tableTeacher1

(

    tSex nvarchar(10),

    tAge int

)

alter tableTeacher1

add

constraint CK_Teacher1_tSex check(tSex=''or tSex=''),

constraint DF_Teacher1_tSex default('')for tSex,

constraint CK_Teacher1_tAge check(tAge>=30and tAge<=40),

constraint DF_Teacher1_tAge default(30)for tAge

insert intoTeacher1(tAge)values(50);

insert intoTeacher1(tSex)values('female');

select *from Teacher1;

 

--Score表中

--studentId 是外键  先要把Student表中的sId设置为主键

--测试:在学生表(主表)中删除在成绩表中被引用的学生记录。

--测试:成绩表中添加一条新成绩,studentId在学生表中没有。

create tableScore1

(  

    id intidentity(1,1)primary key,

    [sId] int,

    english intcheck(english>=0and english<=150),

    math intcheck(math>=0and math<=150)

);

go

create tableStudent1

(

    id intidentity(1,1),

    [name] nvarchar(10),

    age int,

    gender nvarchar(10)

);

go

alter tableStudent1

add constraintPK_Student1_id primarykey(id);

 

alter tableScore1

add constraintFK_Score1_sid

foreign key([sid])references Student1(id);

 

insert intoStudent1 values('上三',18,'');

insert intoStudent1 values('李四',20,'');

 

insert intoScore1([sId],math,english)values(1,150,150);

 

select *from Student1;

select *from Score1;

 

delete fromStudent1 where id=1;   --报错

delete fromStudent1 where id=2;   --可删除

 

delete fromScore1 where [sId]=1;

delete fromStudent1 where id=1;

 

--==检索==

select *from MyStudent;

--测试的时候使用*可以,在真实的项目中全部将字段写出

Select Fid,FName, FAge, FGender,FMath, FEnglish from MyStudent;

Select --显示

    Fid as这是ID,

    FName 这是姓名,

    这是年龄=FAge,

    FGender,FMath,FEnglish,

    FMath+FEnglishas 总分

from MyStudent

where FGender=''and FAge<20;

 

select GETDATE();

select 1+1;

 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值