操作环境:MS SQL Server 2008 R2
- 创建数据库
CREATE DATABASE Library ON PRIMARY(
NAME = 'Library_DB',
FILENAME = 'f:\sql\library.mdf',
SIZE = 5mb,
MAXSIZE = unlimited,
FILEGROWTH = 10%)
LOG ON (
NAME = 'Library_LOG',
FILENAME = 'f:\sql\library.ldf',
SIZE = 5mb)
• on primary表示分组为primary(默认就是,可不写)
• name表示逻辑名,即数据库中显示的名
• filename是物理名,数据库文件保存的名字
• size是初始大小
• maxsize指文件最大容量
• filegrowth是文件大小增长速度
• log on表示开启日志,其他含义同上
- 创建数据表
CREATE TABLE Readers (
CardNum int not null identity(1, 1) primary key,
Name VARCHAR(50) NOT NULL,
Age INT,
Gender BIT NOT NULL,
BorrowNum INT DEFAULT 0)
参考:
CREATE TABLE [表名] ( [字段名] 数据类型 条件/约束 )
PS:以逗号分隔
- NOT NULL表示不允许为空
- identity(1, 1)表示初始值为1,每次自增1
- primary key表示主键约束,不允许本列的值相同
- default 0表示设置默认值为0
- 插入数据(增)
INSERT Readers VALUES('多啦A梦', 7, 'TRUE', 8)
INSERT Readers (Name, Age, Gender, BorrowNum) VALUES('野比大雄', 888, 'TRUE', 0)
参考
#1:INSERT [表名] VALUES (值1, 值2, ···, 值n)
#2:INSERT [表名] (列名1, 列名2, ···, 列名n) VALUES (值1, 值2, ···, 值n)
- 根据已建的Readers表,CardNum为自动增长,所以不需要插值
- 除此之外,其他列全部需要插值,可不指定列名,则代码如#1
- 若指定插入哪几列的值,使用#2
- 给已建表添加约束
约束类型
• 主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空。
• 唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。
• 检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束。
• 默认约束(Default Constraint):某列的默认值,如我们的男性同学较多,性别默认为男。
• 外键约束(Foreign Key):用于在两表之间建立关系需要制定引用主表的哪一列。
插入数据的例子中,有一条插入年龄为888岁的大雄,显然是不太科学的。
表设计时没有添加约束,那么可以在表创建后再对其字段添加约束,如给Age添加范围检查约束
alter table Readers
add constraint CK_ReadersAge check(Age between 6 AND 120)
具体例子来自参考博客
//添加主键约束
alter table stuInfo
add constraint PK_stuNo primary key(stuNo)
//添加唯一键约束
alter table stuInfo
add constraint UQ_stuID unique(stuID)
//添加默认约束
alter table stuInfo
add constraint DF_stuAddress default('地址不详') for stuAddress
//添加检查约束
alter table stuInfo
add constraint CK_stuAge check(stuAge between 15 and 40)
//添加外键约束
alter table stuInfo
add constraint FK_stuNo foreign key(stuNo) references stuInfo(stuNo)
//删除约束
alter table 表名 drop constraint 约束名
参考
alter table [表名]
add constraint [约束名] [约束类型]([字段名] [具体约束说明])
- 使用了check约束检查age的年龄是否超出某个范围
- Age是Readers表中需要约束的字段名
- CK_ReadersAge是自己取的约束名
- 使用between约定值的范围(6,120)
- 删除指定行数据
delete Readers where Name = '野比大雄'
参考
delete [表名] where [字段] = [值]
- where关键字用于指定条件,等同于 如果 Readers表中的Name的值是’野比大雄’,那么删了它。
- 更新指定位置的数据
update Readers set Age = 8, Name = 'harry' WHERE Name = '多啦A梦'
参考
update [表名] set [字段] = [值], [字段] = [值] WHERE [条件字段] = [条件值]
- update更新Readers表
- set设置age的值为8,name的值为harry
- where如果原来的name是多啦A梦的话
- 查询数据
SELECT * FROM Readers
SELECT Name FROM Readers WHERE BorrowNum <> 0
PS:*号表示查询表中所有字段
参考
SELECT [字段名] FROM [表名] WHERE(可选) [条件]
- 查询Readers表中所有字段所有值
- 查询Readers表中BorrowNum的值不为8的读者姓名
END