数据库笔记(1)

sql server
MSSQLServer
microsoft sql server;
Catalog分类(又叫数据库dataBase/表空间TableSpac),卜同磊的数据应该放到不同的数据库中。
便于对哥各个Catatlog进行个性化管理
避免命名冲突
安全性更高
Table表:数都放到书架上,碗都放到橱柜中,不同类型的资料放到不同的格子中,将这种区域叫做表。不同的表根据放的数据不同进行空间的优化,找起来也方便。
 
列column 字段field
 
主键就是数据行的唯一标示,不会重复的列才能当主键。一个表可以没有主键,但是
2003年5月入职,是产品开发部的,姓名马小虎
王二下,技术
 
主键(PrimaryKey)
工号 姓名 部门 入职时间
 001 凤姐 员工培训部 2010年7月5日
002 瘦瘦 公关部 2010年8月2日
003 憨憨 开发部 2009年3月5日
 
 
主键就是数据行的唯一标识。不会重复的列才能当主键。一个表可以没有主键,但是会非常难处理,因此没有特殊理由表都是要设定主键
 
主键有两种选用策略:业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号、银行账号等;逻辑主键是使用没有任何业务意义的字段做主键。完全给程序看的,业务人员不会看的数据。因为很难保证业务主键不会重复,(身份证号重复不会变化,(账号升位),因此推荐用逻辑主键。
 
 
表间关联、外键(ForeignKey)
商品名 价格 生产厂家 厂家地址 厂家电话
太太香瓜子 5.00 太太食品厂 恰恰
大大开心果
苦咖啡
随便
sql server的两种验证方式:用户名验证和Windows验证,开发时用Windows验证就行。
开发人员关注点在开发上,而不是配置、备份等之上,那是DBA做的事情。
创建数据库,创建表,设置主键
常用字段类型:bit(可选值0、1)、datetime、int、varchar/nvarchar(可能含有中文用nvarchar)
Nvarchar(50)/Nvarchar(MAX)
varchar/nvarchar和char(n)的区别:char(n)不足长度n的部分用空格填充
 
Var:variable,可变性。
 
SQL语句是和DBMD交谈专用的语句,不同DBMS都认SQL语句。
SQL语句中字符串用单引号。
sql语句是大小写不敏感的,不敏感指的是sql关键字,字符串值还是大小写敏感的,
创建表、删除表不仅可以手工完成,还可以执行sql语句完成,在自动化部署、数据导入中用的很多,create table_Person(ld int NOT NULL.Name nvarchar(50).Age int NULL)、Drop table T_Person1
简单的Insert语句。INSERT INTO T_Person(ld.Name.Age)
VALUES(1,'Jim',20) //字符串用单引号。
SQL主要分DDL(数据定义语言)和DML(数据操作语言)两类。
Creat Table 、Drop Table等属于DDL ,Select ,Insert等属于DML
 
create table T_Person3(Id int NOT NULL,Name nvarchar(50),Age int NULL)
drop table T_Person3
 
insert into Person1(Number,Name,Age,NickName) values(3,'狗蛋儿',30,'aaa')
 
 
主键选择
sqlServer中两种常用的主键数据类型:int(或者bigint)+标识列(又称自动增长字段):uniqueidentifier(又称Guid/UUID)
用标示符实现字段自增可以避免并发等问题,不要开发人员控制自增。用标示列的字段在Insert的时候不用指定主键的值。
 
 
将字段的"是标示列"设置为"是",一个表只能有一个标识列。
 
Guid算法是一种可以产生唯一标示的高效算法,它使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复,无论是同一个计算机上还是不同的计算机。在公元3400年以前产生的GUID与任何其他产生过的GUID都不相同。sqlserver中生成guid的函数newid(),.Net中生成Guid的方法:Guid的优点:高效率、数据导入导出方便;缺点占用空间大、不易读。
select newid()
业界主流倾向于使用Guid.
microsoft visual studio 2010中怎么产生guid
Guid id=Guid.NewGuid();
Console.WriteLine(id);
 
insert
1 abc 20
2 tom 20
3 jim 25
 
Id int zhujian
Name nvarchar(50) NUll
Age int NULL
 
insert into Person3 values ('lily',22)
insert into Person3(Name,Age) values('lily',33)
insert into Person4(Id,Name,Age) values(newid(),'tom',30)
 
 
Insert语句可以省略表名后的列名,但不推荐
如果插入的行中有些字段的值不确定,那么Insert的时候不指定那些列即可。
给可以给字段默认值,如果Guid类型主键的默认值设定为newid()就会自动生成。
很少这么干
 
 
主键
 
9:16
 
Insert语句可以省略表名后的列名,但是不推荐
 
如果插入的行中有些字段的值不确定,那么
insert的时候不指定那些列即可。
给可以给字段默认值,如果Guid类型主键的默认值设定为newid()就会
 
更新一个列:UPDATE T_Person Set Age=30
更新多个列:UPDATE T_Person Set Age=30,Name='tom'
更新一部分数据:UPDATE T_Person Set Age=30 where Name='tom',用where语句表示只更新Name是'tom'的行,注意
sql中等于判断用单个=,而不是==.
Where中还可以使用复杂的逻辑判断UPDATE T_Person Set Age=30 where Name='tom' or Age<25,or相当于C#中的||(或者)
Where中可以使用的其他逻辑运算符:or,and,not,<,>,>=,<=,!=(或<>)等
 
update person1 set Age=30;
update person1 set Age=40,Name='tom';
update person1 set Age=Age+1;
 
update person1 set NickName=N'青年人'
where Age>=23
 
update person1 set NickName=N'二十二岁'
where Age=22;
//在sql语句中等于判断就是一个等号,不是两个等号。
 
在sql中怎么加注释。
update person1 set NickName='二十1岁'
where Age<>22;
update person1 set NickName='二十1岁'
where Age=22 or Age=23;
 
删除表中全部数据:DELETE FROM T_Person.
Delete只是删除数据,表还在,和Drop Table不同。
Delete也可以带where子句来删除一部分数据:DELETE FROM
T_Person WHERE FAge>20;
 
delete from person1 where Age>33;
 
 
数据检索
执行备注中的代码创建测试数据表。‘
简单的数据检索:select * from T_Employee
只检索需要的列:select FNumber from T_Employee/
select FName,FAge from T_Employee
列别名:select FNumber AS 编号,FName AS 姓名,FAge AS
Age111 FROM T_Employee
使用where检索符合条件的数据:select FName from T_Employee
where FSalary<5000.故事:新员工的数据检索噩梦。
还可以检索不与任何表关联的数据:select 1+1;
select newid();select getdate();
 
 
 
sql server登陆之前需要启动的所有服务个代表什么意思?
 
怎么没有办法在表格中插入列项,我发现少了一列,想插入列项。
 
iT002 Smith 28 3900
iT002 27 2800
 
 
SELECT * FROM T_Employee;
SELECT FName from T_Employee
where FSalary<5000
select FName as 姓名,FAge as 年龄,Fsalary as 月薪 from T_Employee
select NEWID();
select 1+2;
select getdate();
select @@VERSION;
select 1+2 as lie1,GETDATE() as riqi,NEWID() as bianhao;
select FName as 姓名,FAge as 年龄,Fsalary+1000 as 月薪 from T_Employeeanhao;
select FName as 姓名,FAge as 年龄,Fsalary as 月薪,GETDATE() as 当前日期 from T_Employee
 
select COUNT(*) from T_Employee;
 
select MAX(FSalary) from T_Employee;
select MIN(FSalary) from T_Employee;
select AVG(FSalary) from T_Employee;
select SUM(FAge) from T_Employee;
 
原文地址:https://www.cnblogs.com/fanhongshuo/p/3812176.html