【数据库】【SQL Server】

连接sql server:
(local)\SQLEXPRESS
.\SQLEXPRESS
CJM\SQLEXPRESS

小型数据库管理系统:
    MS Access 97/93(*.mdb)
    MS Access 2010/12/15(*.accdb)
中型数据库管理系统:
    MS SQL Server 2008(开始支持空间数据)
    (数据库主文件名:*.mdf)
    (数据库日志文件名:*.ldf)
服务器名称三种模式
    a.(local)/localhost, 对应“本地”;
    b.计算器名(如何查看/修改呢?),对应“局域网”;
    c.IP+端口号(如192.168.1.2:1435),对应外网(外网);
6、如何创建数据库表
     数据类型:
          char—单个字符
          char(10)-容许10个字符;如“abc”
          nchar(10)- 固定10个字符;如“abc        ”
          varchar—可变字符(字符串)
          nvarchar—固定不变的字符串;
          date/datetime
          geometry(矢量,即坐标串)/geography(栅格)_空间数据
          numeric(8,7)_ 数值型,如:3.1415926
4、SQL SERVER登陆的身份验证
   A.windows身份(超级用户);
   B.SQL SERVER 身份验证(单独对数据库进行身份验证);
              默认账号和密码:sa(sa,123)

navicat完全地生成脚本的方式:选中架构和数据

架构(Schema)是一组数据库对象的集合,用于分类

schema 是用于 在一个 大项目中的 各个 小项目
每个 小项目的表, 放在 各自的 schema 下面.
这样, 遇到 小项目里面. 有 相同名字的 表的话, 不会发生冲突.

例如一个 公司的 系统.
里面分2个 子系统, 分别为 财务系统 (架构)和 人力资源系统(架构).
这2个 子系统, 共用一个数据库
.
那么 财务系统的表, 可以放在 财务的 schema.
人力资源系统的表,放在 人力资源系统的模式里面。

这2个 子系统, 能够 互相访问 对方的表
但是又不因为 表重名 的问题,影响对方。

体系结构是下面这个样子的
[服务器名称].[数据库名称].[构架名称].[表名]

create database --> 创建一个数据库
create schema --> 创建一个构架

当你在 SQL Server 里面, 使用 create database 创建一个数据库以后。
你可以不必额外的去创建 schema
因为 SQL Server 会 自动的创建一个 名字叫 dbo 的 schema



角色是权限的集合,一个角色是一组权限
用户ID  :  张三、 李四
角色:数据库管理员、 程序员

关系就是: 
    一个用户可以属于多个角色
    一个角色可以由很多人担任。

========================================

目的:
    降低维护成本。

例如:张三原来是 数据库管理员, 有很多的权限,现在他跳槽了,他的任务由原来是程序员的李四来干了。 又来了个王五,来干原来李四的活。

在没有角色的情况下, 需要查询,张三所有的权限列表, 然后把张三的权限,一条一条的  GRANT 给李四。

然后再把李四的权限,一条一条的,通过 GRANT 语句,授权给新来的王五。

===================================================================

在有角色的情况下,是角色拥有权限。

只需要把 数据库管理员这个角色,授权给 李四。
然后,再把程序员这个角色, 授权给 王五。


空间查询
1、网络资源http://msdn.microsoft.com/en-us/library/bb933899(v=sql.100).aspx

2、SQL SERVER->帮助->搜索->输入对应的空间算子如(STAsText(),STTouches());

3、一定要用MakeValid()方法,对geom实例化;
列出country表中所有与美国(USA)相邻的国家名字;

select c2.LONG_NAME AS "Neighbors of CHina",C2.geom
from countries C1,countries C2
where C1.geom.MakeValid().STTouches(C2.geom.MakeValid())=1 and C1.LONG_NAME='China'
//选择国家2的名字,地图	。从国家1,国家2。当第一个的地图,接触到第二个的地图。=1也就是返回ture。

4、SQL Server常见空间算子
.STCrosses ( other_geometry )
.STDistance ( other_geography )
.STDifference ( other_geography )
 找出 River表中所列出的河流流经的国家
select river.LONG_NAME ,country.geom
from MapInportDb.dbo.Rivers river,MapInportDb.dbo.countries country
where river.geom.MakeValid().STCrosses(country.geom.MakeValid())=1
 


存储过程
sql 执行语句是要先编译,然后再执行的。这样如果查询并发大的时候。会浪费很多资源和时间。造成mysql进程占用资源过多,症状就是慢。
但存储过程可以把一些特别的语句封装成一个方法 ,再编译好成一个可以执行的方法,对外只要接收参数就可以了。这样就不用再编译。执行就快了
什么时候会用到?你觉得你数据库因为同时出现太多读写操作而变得慢 ,用了主要用来提升性能

OUT参数例子
#存储过程OUT参数
DELIMITER //
  CREATE PROCEDURE out_param(OUT p_out int)
    BEGIN
      SET p_out=2;
    END;
    //
DELIMITER ;
#调用
SET @p_out=1;
CALL out_param(@p_out);
SELECT @p_out;//输出列@p_out为2


分隔符DELIMITER :MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。

CallableStatement proc = connection.prepareCall("{ ? = call 存储过程名(?) }"); 
proc.registerOutParameter(1, Types.INTEGER); //存储过程返回值的索引和类型,用 int i = proc.getInt(1); 可获取
proc.setString(2, 参数2的值); 
proc.execute(); 
} finally { 
    try { proc.close(); } 
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值