连接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(); }
}