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
2sudo apt-get update
sudo apt-get install mssql-tools unixodbc-dev增加
/opt/mssql-tools/bin/
到环境变量中1
2echo '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=Y
和SA_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 |
|
更多参见:
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;