SQLServer数据库

1 安装

1.1 前提

1.2 安装

版本:xxx

安装流程按照指引即可,此处只列重要步骤,截图如下:

1.3 遇到的问题

2 建数据库

2.1 自带工具创建

2.2 Dbeaver连接

SQLServer数据库_第1张图片

4. 基础知识

4.1 架构及思想

4.1.1 架构图

4.1.2 安装时的默认情况

安装SQL Server时,会自动创建4个系统数据库:

  • master:记录了系统级信息,包括所有数据库信息,所有登录账密,等等…
    • 表sysdatabases:保存DBMS中数据库信息
    • 表sysobjects:保存数据库中数据表信息
    • 表syscolumns:保存数据表的列信息
  • model
  • msdb
  • tempdb

4.1.3 设计思想

SQLServer2005提倡的"用户与构架分离"的概念,表的调用格式如下:“数据库名.构架名.表名”,同一个用户可以被授权访问多个构架,也可以被禁止访问某个或多个构架。
在2005中,如果在创建表时没有指定构架(schema),那么系统默认该表的构架是dbo,所以会出现很多表名前自动加上dbo.字符样式。

为了向后兼容,dbo也是默认用户,
在2000中DataBaseName.dbo.TableName解释为:数据库名.用户名.表名
在2005中DataBaseName.dbo.TableName解释为:数据库名.架构名.表名

在SQLServer的每个数据库内都有一个系统表sysobjects,里面存储了数据库各个对象的信息,每个对象都有一个唯一的id号进行标识。
object_id就是根据对象名称返回该对象的id。
select object_id(对象名)等同于:
select id from sysobjects where name=对象名

在SQL里字符串前面经常见到N,N是显式的将非unicode字符转成unicode字符,防止乱码。

4.1.4 排序规则

COLLATE可以针对整个数据库更改排序规则,也可以单独修改某一个表或者某一个字段的排序规则,指定排序规则很有用,比如用户管理表,需要验证输入的用户名和密码的正确性,一般是要区分大小写的。

COLLATE Chinese_PRC_CI_AS
Chinese_PRC指的是中国大陆地区,如果是台湾地区则为Chinese_Taiwan
CI指定不区分大小写,如果要在查询时区分输入的大小写则改为CS
AS指定区分重音,同样如果不需要区分重音,则改为AI

登录名、用户、角色、数据库等关系

登录名:仅作为登录来使用,与用户绑定后,才可查看用户下的数据库,否则只起到连接数据库的作用;

用户:

  • 用户可以有多个数据库,用户可以拥有多种角色;
  • 创建用户时不指定角色,则默认为public角色;
  • 创建用户时不指定数据库,则只能查看和操作master数据库。

角色:默认9种角色。

  • public:只有连接权;
    SQLServer数据库_第2张图片

数据库:数据库分为系统数据库和用户数据库。

  • 用户数据库可以有多个用户,只有映射到该数据库的用户才可查看和操作;

4.2 字段定义

4.2.1 所有

4.2.2 常用的

描述 字段 描述 字段
小数值 字符
大数值 时间戳
小数 日期
字符串 文本

4.2.3 兼容情况

建表时的兼容情况:

4.2.4 敏感情况

表名:;
字段名:;
字段值:;

4.3 常见命令

4.3.1 命令行操作

注意大小写和分号问题!!!
登录:

4.3.2 SQL

4.3.2.1 表空间:

4.3.2.2 用户:
-- 示例:在newdb下创建用户login_user,并授予mydb库的访问权限

-- 创建用户并授权:
use newdb;

create login login_user with password = 'login_user'
go
create user user_name for login login_user with default_schema=dbo;-- 在use newdb下执行,默认此用户可访问newdb数据库
exec sp_addrolemember 'db_owner','user_name';

-- 用户授权其他数据库访问权限:
-- login_user登录,默认只能访问newdb,现在创建新库mydb,并授予访问权限
use mydb;
create user user_name for login login_user with default_schema=dbo;
exec sp_addrolemember 'db_owner','user_name';
go

-- 修改密码:


-- 删除用户

-- 查询当前库下有哪些用户
select * from sysusers;

-- 查询用户

4.3.2.3 表:
-- 创建表:
CREATE TABLE [dbo].[Test]
(
	[ID]					[numeric](19, 0)	NOT NULL,
	[ACCOUNT]				[varchar](30) 		COLLATE Chinese_PRC_CI_AS	NOT NULL
) ON [PRIMARY]
GO

-- 删除表:

-- 查询表空间里的表

4.3.2.4 索引:
-- 创建索引:

-- 删除索引:
4.3.2.5 查询类:
-- 查询登录名信息
select * from sys.syslogins;
select * from sys.syslogins where name = 'login_user';

-- 查询指定用户的信息


-- 查询指定表空间的信息

4.4 版本

5 语法及示例

5.1 建库

5.1.1 语法

语法:

  • [ ]:表示可选项;
  • <>:表示必选;
  • { }:必须从{}里选择一个;
CREATE DATABASE database_name
ON [PRIMARY] 
[
	<filespec>[,...n]
	[ LOG ON { <filespec>[,...n] } ]
]

<filespec>::{
(
	NAME = 'logical_file_name',
	FILENAME = 'os_file_name'
	[ ,SIZE = size[KB|MB|GB|TB] ]
	[ ,MAXSIZE = {UNLIMITED | max_size[KB|MB|GB|TB] } ]
	[ ,FILEGROWTH = growth_increment[KB|MB|GB|TB|%] ]
)[,...n]
}

5.1.2 示例

创建一个名为myfirestdata1010的数据库,数据存储在xxx.mdf,日志存储在xxx.ldf。
==注:路径需存在,windows上必须用==

CREATE DATABASE myfirestdata1010
on PRIMARY
(
    name = 'myfirestdata1010',
    FILENAME = 'E:\SQL Data\myfirestdata1010.mdf'
)
log ON
(
    name = 'myfirestdata1010_log',
    FILENAME = 'E:\SQL Data\myfirestdata1010_log.ldf'
)
GO

5.2 建表

5.2.1 语法

语法:

-- =========================================
-- Create FileTable template
-- =========================================
USE <database, sysname, AdventureWorks>
GO

IF OBJECT_ID('.', 'U') IS NOT NULL
  DROP TABLE <schema_name, sysname, dbo>.<table_name, sysname, sample_filetable>
GO

CREATE TABLE <schema_name, sysname, dbo>.<table_name, sysname, sample_filetable> AS FILETABLE
  WITH
  (
    FILETABLE_DIRECTORY = '',
    FILETABLE_COLLATE_FILENAME = <file_table_filename_collation, sysname, database_default>
  )
GO
create table [database_name]table_name
{
( col_name col_property col_constraint)
}[,...n]

5.2.1 示例

use newdb;

CREATE TABLE students
(
    stu_id 		INT 			PRIMARY key,
    stu_name 	VARCHAR(50) 	NOT NULL,
    stu_age 	INT 			NOT NULL, 
    stu_sex 	CHAR(2) 		NOT NULL,
    stu_address VARCHAR(50) 	NOT NULL,
    stu_email 	VARCHAR(50) 	NOT NULL
);
GO

5.3 建索引

5.3.1 主键索引

创建主键索引:

-- mysql方式1
create table table_name
(
	ID bigint not null,
	primary key(ID)
);


-- sqlserver方式1:指定多列,索引名字自动生成
create table table_name
(
	ID bigint not null primary key
);
-- sqlserver方式2:可指定多列,索引名字自动生成
create table table_name
(
	ID bigint not null,
	primary key(ID)
);
-- sqlserver方式3:可指定多列,指定索引名
create table table_name
(
	ID bigint not null,
	constraint PK_ID PRIMARY KEY (ID)
);
-- sqlserver方式4:建表后创建,不指定索引名
ALTER TABLE dbo.table_name WITH NOCHECK 
ADD PRIMARY KEY(ID)
GO
-- sqlserver方式5:建表后创建,指定索引名
ALTER TABLE dbo.table_name WITH NOCHECK 
ADD CONSTRAINT PK_ID PRIMARY KEY(ID)
GO

5.3.1 唯一索引、普通索引

唯一索引、普通索引:

--
CREATE UNIQUE INDEX U_SEAL_USER ON SEAL_USER(ACCOUNT);
CREATE INDEX N_SEAL_USER ON SEAL_USER(CREATE_TIME);

--

ALTER TABLE dbo.SEAL_USER WITH NOCHECK 
ADD CONSTRAINT U_SEAL_USER UNIQUE(ACCOUNT);
GO
-- 或者
CREATE UNIQUE INDEX N_SEAL_USER ON dbo.SEAL_USER(CREATE_TIME);

CREATE INDEX N_SEAL_USER ON dbo.SEAL_USER(CREATE_TIME);
GO

5.4 查询

查询所有数据库:

-- mysql
show databases;

-- sqlserver
select name from master.dbo.sysdatabases;
-- 等同于 select name from sysdatabases; 但省略数据库和架构,会影响效率,不建议。

查询数据库中的所有表:

-- mysql
use dbtest;
show tables;

-- sqlserver
use [db_name];
select name from sysobjects where xtype='u';

如果表存在,则删除

-- mysql
drop table if exists table_name;


-- sqlserver
if exists (select * from dbo.sysobjects where id = object_id(N'dbo.table_name') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table dbo.table_name
GO

你可能感兴趣的:(数据库,sqlserver)