发布新日志

  • 常用数据库操作命令(SQL)

    2008-02-02 11:07:45

    1.--数据操作

      SELECT --从数据库表中检索数据行和列  

    select * from table order by oid desc limit 0,5; 查表中最后5条记录

      INSERT --向数据库表添加新数据行

      DELETE --从数据库表中删除数据行

      UPDATE --更新数据库表中的数据

      --数据定义

      CREATE TABLE --创建一个数据库表

      DROP TABLE --从数据库中删除表

      ALTER TABLE --修改数据库表结构

      CREATE VIEW --创建一个视图

      DROP VIEW --从数据库中删除视图

      CREATE INDEX --为数据库表创建一个索引

      DROP INDEX --从数据库中删除索引

      CREATE PROCEDURE --创建一个存储过程

      DROP PROCEDURE --从数据库中删除存储过程

      CREATE TRIGGER --创建一个触发器

      DROP TRIGGER --从数据库中删除触发器

      CREATE SCHEMA --向数据库添加一个新模式

      DROP SCHEMA --从数据库中删除一个模式

      CREATE DOMAIN --创建一个数据值域

      ALTER DOMAIN --改变域定义

      DROP DOMAIN --从数据库中删除一个域

    --数据控制

      GRANT --授予用户访问权限

      DENY --拒绝用户访问

      REVOKE --解除用户访问权限

      --事务控制

      COMMIT --结束当前事务

      ROLLBACK --中止当前事务

      SET TRANSACTION --定义当前事务数据访问特征

      --程序化SQL

      DECLARE --为查询设定游标

      EXPLAN --为查询描述数据访问计划

      OPEN --检索查询结果打开一个游标

      FETCH --检索一行查询结果

      CLOSE --关闭游标

      PREPARE --为动态执行准备SQL 语句

      EXECUTE --动态地执行SQL 语句

      DESCRIBE --描述准备好的查询

      ---局部变量

      declare @id char(10)

      --set @id = '10010001'

      select @id = '10010001'

    2.常用加实用的: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
    DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
    DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  
    首先,简要介绍基础语句:  
    1、说明:创建数据库CREATE DATABASE database-name   
    2、说明:删除数据库drop database dbname  
    3、说明:备份sql server  
    --- 创建 备份数据的 deviceUSE master
    EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'  
    --- 开始 备份BACKUP DATABASE pubs TO testBack   
    4、说明:
    创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)  
    根据已有的表创建新表:
    A:create table tab_new like tab_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2… from tab_old definition only  
    5、说明:  
    删除新表:drop table tabname   
    6、说明:  
    增加一个列:Alter table tabname add column col type  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。  
    7、说明:
      添加主键:Alter table tabname add primary key(col)
      说明:
      删除主键:Alter table tabname drop primary key(col)  
    8、说明:
      创建索引:create [unique] index idxname on tabname(col….)
      删除索引:drop index idxname  注:索引是不可更改的,想更改必须删除重新建。  
    9、说明:
      创建视图:create view viewname as select statement
      删除视图:drop view viewname  
    10、说明:几个简单的基本的sql语句
      选择:select * from table1 where 范围
      插入:insert into table1(field1,field2) values(value1,value2)
      删除:delete from table1 where 范围
      更新:update table1 set field1=value1 where 范围
      查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
      排序:select * from table1 order by field1,field2 [desc]
      总数:select count * as totalcount from table1
      求和:select sum(field1) as sumvalue from table1
      平均:select avg(field1) as avgvalue from table1
      最大:select max(field1) as maxvalue from table1
      最小:select min(field1) as minvalue from table1  
    11、说明:几个高级查询运算词
      A: UNION 运算符
      UNION 运算符通过组合
    其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
      B: EXCEPT 运算符
      EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
      C: INTERSECT 运算符
      INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。  注:使用运算词的几个查询结果行必须是一致的。  

    12、说明:使用外连接
      A、left outer join:
      左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
      B:right outer join:
      右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
      C:full outer join:
      全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

    3.SQL复制的基本元素包括

            出版服务器、订阅服务器、分发服务器、出版物、文章。

    SQL复制的工作原理

            SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器。

    SQL SERVER复制技术类型

            SQL SERVER提供了三种复制技术,分别是:

            1、快照复制(呆会我们就使用这个)

            2、事务复制

            3、合并复制

            只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。

    一:先来配置出版服务器

            (1)选中指定[服务器]节点。

            (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令。


            (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。


            (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)。

    二:创建出版物

            (1)选中指定的服务器。

            (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框。

            (3)选择要创建出版物的数据库,然后单击[创建发布]。

            (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)。

            (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器

            (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表。

            (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。

    三:设计订阅


            (1)选中指定的订阅服务器。


            (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]。


            (3)按照单击[下一步]操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。然后[下一步]直到操作完。

    4.1>、sysobjects

      系统对象表。 保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等

      sysobjects 重要字段解释:

    sysObjects (
      Name sysname,      --object 名称
      id   int,          --object id
      xtype char(2),     -- object 类型 
      type  char(2),     -- Object 类型(与xtype 似乎一模一样? 有点郁闷…)
      uid   smallint,     -- object 所有者的ID
      ...                --其他的字段不常用到。 
    )

    注:需要解释的是 xtype 和type 是一模一样的,他的数据为:

    C = CHECK 约束
    D = 默认值或 DEFAULT 约束
    F = FOREIGN KEY 约束
    FN = 标量函数
    IF = 内嵌表函数
    K = PRIMARY KEY 或 UNIQUE 约束
    L = 日志
    P = 存储过程
    R = 规则
    RF = 复制筛选存储过程
    S = 系统表
    TF = 表函数
    TR = 触发器
    U = 用户表
    V = 视图
    X = 扩展存储过程

      该表中包含该数据库中的所有对象,如有那些表 存储过程 视图  等信息
     

    2、sysColumns   数据库字段表。 当前数据库的所有字段都保留在里面。

    重要字段解释:

    sysColumns (
      name     sysname,   --字段名称
      id       int,        --该字段所属的表的ID
      xtype    tinyInt,    --该字段类型,关联sysTypes表
      length   smallint,   --该字段物理存储长度
      ...
    )


      比如要查询某一个张表的有那些字段和这些字段的长度
           3、sysUsers

      当前数据库的系统组,以及用户。

    sysUsers(
      uid smallint,       --用户id
      name smallint ,     --名称
      uid  varbinary(85) , --属于一个登陆
      ....
    )

      对数据库的用户进行管理

    4、sysdenpends
      当前数据库的依赖关系。   比如 我要修改某一张的结构时,怕修改后会影响到
    其它的视图 函数 存储过程 ,这是在修改之前可以查询一下.那些视图 函数 存储过程调用了这个表的
      这样在修改后就可以修改的视图 函数 存储过程,


      一般程序员用到的系统表,基本也就这几个 其他的特殊的系统表(主要都在master 或者 tempdb )里面了


     


  • SQL Server 基本函数

    2008-02-02 10:57:10

    1.字符串函数
    长度与分析用

    datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格

    substring(expression,start,length) 不多说了,取子串

    right(char_expr,int_expr) 返回字符串右边int_expr个字符

    字符操作类

    upper(char_expr) 转为大写

    lower(char_expr) 转为小写

    space(int_expr) 生成int_expr个空格

    replicate(char_expr,int_expr)复制字符串int_expr次

    reverse(char_expr) 反转字符串

    stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从

    start开始的length个字符用char_expr2代替

    ltrim(char_expr) rtrim(char_expr) 取掉空格

    ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符

    字符串查找

    charindex(char_expr,expression) 返回char_expr的起始位置

    patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0

    2.数学函数

    abs(numeric_expr) 求绝对值

    ceiling(numeric_expr) 取大于等于指定值的最小整数

    exp(float_expr) 取指数

    floor(numeric_expr) 小于等于指定值得最大整数

    pi() 3.1415926.........

    power(numeric_expr,power) 返回power次方

    rand([int_expr]) 随机数产生器

    round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入

    sign(int_expr) 根据正数,0,负数,,返回+1,0,-1

    sqrt(float_expr) 平方根

    3.日期函数

    getdate() 返回日期

    datename(datepart,date_expr) 返回名称如 June

    datepart(datepart,date_expr) 取日期一部份

    datediff(datepart,date_expr1.dateexpr2) 日期差

    dateadd(datepart,number,date_expr) 返回日期加上 number

    上述函数中datepart的

    写法 取值和意义

    yy 1753-9999 年份

    qq 1-4 刻

    mm 1-12 月

    dy 1-366 日

    dd 1-31 日

    wk 1-54 周

    dw 1-7 周几

    hh 0-23 小时

    mi 0-59 分钟

    ss 0-59 秒

    ms 0-999 毫秒

    日期转换

    convert()

    4.系统函数 

    suser_name() 用户登录名

    user_name() 用户在数据库中的名字

    user 用户在数据库中的名字

    show_role() 对当前用户起作用的规则

    db_name() 数据库名

    object_name(obj_id) 数据库对象名

    col_name(obj_id,col_id) 列名

    col_length(objname,colname) 列长度

    valid_name(char_expr) 是否是有效标识符

    APP_NAME() --函数返回当前执行的应用程序的名称

    select app_name()
    COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值
    COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值
    COL_NAME(, ) --函数返回表中指定字段的名称即列名
    DATALENGTH() --函数返回数据表达式的数据的实际长度
    DB_ID(['database_name']) --函数返回数据库的编号
    DB_NAME(database_id) --函数返回数据库的名称
    HOST_ID() --函数返回服务器端计算机的名称
    HOST_NAME() --函数返回服务器端计算机的名称

    select host_name()
    IDENTITY([, seed increment]) [AS column_name])
    --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
    /*select identity(int, 1, 1) as column_name
    into newtable
    from oldtable*/
    ISDATE() --函数判断所给定的表达式是否为合理日期
    ISNULL(, ) --函数将表达式中的NULL 值用指定值替换
    ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
    NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
    NULLIF(, )
    --NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值


Open Toolbar