microsoft-sql-server一瞥

主要内容

  • mssql的配套工具及改进的地方
  • mssql的与mysql的不同地方
  • microsoft 变得更新开放

mssql配套工具

以前大学学习 mssql,在自己的电脑上安装mssql,感觉特别笨重,情况好一两小时可以装完,情况不好都要装一天。

如今云技术未飞速发展,也基本不用在自己电脑上mssql,在云端新建一个库,在自己电脑上安装个SQL Server Management Studio就可以玩转mssql。

为方便用命令行操作数据库,ms也提供了命令行的操作终端sqlcmd,可以说也能轻量级的来操作mssql。

如果需要在本地上安装mssql,但又不想配置那繁琐的安装步骤,ms也提供了docker方式的mssql。

可谓选择有越来越多的多样性。

SQL Server Management Studio 17

SSMS 是一种集成环境,用于管理从 SQL Server 到 SQL 数据库的任何 SQL 基础结构。 SSMS 提供用于配置、监视和管理 SQL 实例的工具。 使用 SSMS 部署、监视和升级应用程序使用的数据层组件,以及生成查询和脚本。

使用 SQL Server Management Studio (SSMS) 在本地计算机或云端查询、设计和管理数据库和数据仓库,无论它们位于何处。

SSMS 是免费的!

下载地址:
https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms

802M,安装完也要1个小时。

sqlcmd

安装

以安装在Ubuntu16.04上为例:

  • 导入公公仓库的GPG密钥

    1
    curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
  • 注册MS Ubuntu的仓库

    1
    curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
  • 更新源列表,运行安装命令,安装unixODBC开发包

    1
    2
    sudo apt-get update 
    sudo apt-get install mssql-tools unixodbc-dev
  • 增加/opt/mssql-tools/bin/到环境变量中

    1
    2
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    source ~/.bashrc

更多详细见:
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools

使用

可以参考
https://docs.microsoft.com/en-us/sql/relational-databases/scripting/sqlcmd-use-the-utility

基本用法
sqlcmd -S tcp:xxx.yyy.zzz.cn,1433 -d dbname -U sa -P sa

和mysql的客户端工具不一样,

  • 端口没有参数单独指定,要在-S后面用逗号分隔,然后端口号。
  • 不能用-H来指定host,不起作用。
  • 要把查询结果保存到文件中,则要用-Q用来执行命令,比如这样sqlcmd -Q "select * from xx" > res.txt
  • 进行sqlcmd命令内部之后,不是用;回车,来执行的,终结符是GO

docker 安装 mssql

安装条件

  • Docker Engin 1.8+
  • 内存2G以上。(个人感觉在开一个实例也只占了800M)
  • 需要设置ACCEPT_EULA=YSA_PASSWORD=<your_strong_password>环境变量。(ACCEPT_EULA为同意用户协议)

如何使用

  • 启动一个实例

    1
    docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d microsoft/mssql-server-linux:2017-latest
  • 容器中内置了sqlcmd工具,可以直接连接

1
docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password>

更多参见:
https://hub.docker.com/r/microsoft/mssql-server-linux/

mssql 与 mysql的差异

知乎上一个调侃性的概述

Oracle 创一代+高富帅
Sqlserver 富二代
Mysql 屌丝创业青年

在这里我只用接触到的操作层面来说

mssql用户的概概念与mysql中的很不一样。
登录名与数据库用户是两个不同概念。
登录名必须映射到数据库用户。
数据库用户必须与登录名绑定后,才能登录。

详见:https://docs.microsoft.com/zh-cn/sql/relational-databases/security/authentication-access/create-a-database-user
http://blog.51cto.com/281816327/1597666

语法层面

查看所有的库

  • mssql -> SELECT name, database_id, create_date FROM sys.databases
  • mysql -> show databases

查看库中的所有表

  • mssql -> select a.name as '表名',b.rows as '表数据行数' from sysobjects a inner join sysindexes b on a.id = b.id where a.type = 'u' and b.indid in (0,1)
  • mysql -> show tables

查看表结构

  • mssql -> sp_help table_a 或者 sp_columns table_b
  • mysql -> desc table_a

查看用户

  • mssql -> select a.uid as uid,a.status as uStatus,a.name as uName, b.uid as rId,b.status as rStatus,b.name as rName from sysusers a left join sysmembers m on m.memberuid = a.uid left join sysusers b on b.gid = m.groupuid where a.issqluser =1 ;
  • mysql -> select Host,User from mysql.user;

microsoft 变得更新开放