版本:xxx
安装流程按照指引即可,此处只列重要步骤,截图如下:
安装SQL Server时,会自动创建4个系统数据库:
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字符,防止乱码。
COLLATE可以针对整个数据库更改排序规则,也可以单独修改某一个表或者某一个字段的排序规则,指定排序规则很有用,比如用户管理表,需要验证输入的用户名和密码的正确性,一般是要区分大小写的。
COLLATE Chinese_PRC_CI_AS
Chinese_PRC指的是中国大陆地区,如果是台湾地区则为Chinese_Taiwan
CI指定不区分大小写,如果要在查询时区分输入的大小写则改为CS
AS指定区分重音,同样如果不需要区分重音,则改为AI
登录名:仅作为登录来使用,与用户绑定后,才可查看用户下的数据库,否则只起到连接数据库的作用;
用户:
角色:默认9种角色。
数据库:数据库分为系统数据库和用户数据库。
描述 | 字段 | 描述 | 字段 |
---|---|---|---|
小数值 | 字符 | ||
大数值 | 时间戳 | ||
小数 | 日期 | ||
字符串 | 文本 |
建表时的兼容情况:
表名:;
字段名:;
字段值:;
注意大小写和分号问题!!!
登录:
无
-- 示例:在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;
-- 查询用户
-- 创建表:
CREATE TABLE [dbo].[Test]
(
[ID] [numeric](19, 0) NOT NULL,
[ACCOUNT] [varchar](30) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
-- 删除表:
-- 查询表空间里的表
-- 创建索引:
-- 删除索引:
-- 查询登录名信息
select * from sys.syslogins;
select * from sys.syslogins where name = 'login_user';
-- 查询指定用户的信息
-- 查询指定表空间的信息
语法:
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]
}
创建一个名为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
语法:
-- =========================================
-- 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]
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
创建主键索引:
-- 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
唯一索引、普通索引:
--
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
查询所有数据库:
-- 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