Prechádzať zdrojové kódy

修改SQL库表操作培训文件

ywq11 3 rokov pred
rodič
commit
6d36e79472
1 zmenil súbory, kde vykonal 299 pridanie a 4 odobranie
  1. 299 4
      sql/02.db&table.md

+ 299 - 4
sql/02.db&table.md

@@ -1,22 +1,317 @@
 # 库表操作
 
-## 数据库操作
+## 一、数据库操作
 
+### 1.新建数据库
 
+#### (1)可视化创建
 
+​	右键服务器下的数据库节点,在弹出的窗口中设置新建数据库的属性。
 
+![image-20210413113532790](D:\软件安装目录\Typora\images\image-20210413113532790.png)
 
+#### (2)查询语句创建
 
+​	在查询编辑器中执行查询语句新建数据库,执行后在对象资源管理器中刷新即可选择新建的数据库。
 
+```sql
+create database testDb1
+(
+    name = testDb1_data,
+	filename = '从盘符开始的物理文件路径\testDb1.ss' --设置数据库主文件的文件名和物理路径,自动创建文件
+    
+    /* 有需要可以设置更多属性,比如下面几个 */
+    size = 1mb, --系统创建数据库时,给主文件分配的初始空间大小
+	maxsize = 64mb, --主文件的最大空间
+	filegrowth = 15% --文件自动增长的幅度
+)
+```
 
+### 2.修改数据库属性
 
-## 表操作
+#### (1)可视化修改
 
+​	右键数据库,选择属性,在弹窗里设置数据库的属性。
 
+![image-20210413133804325](D:\软件安装目录\Typora\images\image-20210413133804325.png)
 
-## 主键
+#### (2)查询语句修改
 
+1. 更改数据库排序规则
 
+   ```sql
+   alter database testDb1 collate Chinese_PRC_CI_AS --数据库按中文排序
+   ```
 
-## 约束
+2. 添加/删除数据库文件
+
+   ```sql
+   /* 添加数据库日志文件 */
+   alter database testDb1
+   add log file
+   (
+   	name = 'testDb1_log', --日志文件逻辑文件名
+   	filename = 'D:\testDb1_log.ldf', --日志文件物理文件名
+   	size = 5mb, --日志文件初始大小
+   	maxsize = 500mb, --日志文件最大大小
+   	filegrowth = 5 --启动自动增长
+   )
+   
+   /* 删除日志文件 */
+   alter database testDb1
+   remove file testDb1_log
+   ```
+
+3. 增加数据库容量
+
+   ```sql
+   alter database testDb1 modify file 
+   (
+   	name = 'testDb1_data', --通过修改数据库文件,增加数据库容量
+   	maxsize = 128mb
+   )
+   ```
+
+### 3.删除数据库
+
+#### (1)可视化删除
+
+​	右键数据库,选择删除,在弹出的对话框中判断是否删除备份。
+
+![image-20210413140449378](D:\软件安装目录\Typora\images\image-20210413140449378.png)
+
+#### (2)查询语句删除
+
+```sql
+/* 方法一 */
+drop database testDb1
+
+/* 方法二:当直接删除报错时,尝试下面的语句 */
+declare @dbname sysname 
+set @dbname = 'testDb1' --填写无法删除的数据库名称
+
+declare @s nvarchar(1000) 
+declare tb cursor local 
+for 
+select s = 'kill ' + cast(spid as varchar) 
+from master.dbo.sysprocesses 
+where dbid = DB_ID(@dbname) 
+
+open tb 
+fetch next from tb into @s 
+while @@fetch_status = 0 
+begin 
+exec (@s) 
+fetch next from tb into @s 
+end 
+close tb 
+deallocate tb 
+
+exec ('drop database [' + @dbname + ']')
+```
+
+## 二、表操作
+
+### 1.新建表
+
+#### (1)可视化新建
+
+​	右键数据库下的表节点,在表设计器中填写列名、数据类型、是否为空以及其他属性。
+
+![image-20210413142822540](D:\软件安装目录\Typora\images\image-20210413142822540.png)
+
+#### (2)查询语句新建
+
+```sql
+create table testTable1
+(
+	id varchar(10) not null primary key,
+	name nvarchar(50) not null,
+	age int not null,
+	joindate date null,
+	note nvarchar(50) null
+)
+```
+
+### 2.修改表结构
+
+#### (1)可视化修改
+
+​	右键要修改的表,选择设计,在窗口中增/删/改列,设置索引等。
+
+![image-20210413143323789](D:\软件安装目录\Typora\images\image-20210413143323789.png)
+
+#### (2)查询语句修改
+
+```sql
+/* 添加列 */
+alter table testTable1 add data float null
+
+/* 修改列 */
+alter table testTable1 alter column data decimal null
+
+/* 删除列 */
+alter table testTable1 drop column data
+```
+
+### 3.删除表
+
+#### (1)可视化删除
+
+​	右键要删除的表,选择删除。删除之前,确定所有的依赖都已经被删除之后,点击确认删除。
+
+![image-20210413145055186](D:\软件安装目录\Typora\images\image-20210413145055186.png)
+
+#### (2)查询语句删除
+
+```sql
+/* 删除数据表中的全部数据 */
+delete from t01
+
+/* 删除数据库表 */
+drop table t01
+```
+
+## 三、主键
+
+### 1.主键的特点
+
+- 主键列的值不可重复,
+- 可以根据主键唯一确定数据库表中的一条数据,
+- 值不能为null,
+- 主键约束可以是一列,也可以是多列,
+
+### 2.设置主键
+
+#### (1)可视化设置
+
+​	右键要修改的表,选择设计,右键要设置为主键的列,选择设置主键。
+
+![image-20210413145647514](D:\软件安装目录\Typora\images\image-20210413145647514.png)
+
+​	右键要修改的表,选择设计,右键主键列,选择删除主键。
+
+![image-20210413145803880](D:\软件安装目录\Typora\images\image-20210413145803880.png)
+
+#### (2)查询语句设置
+
+```sql
+/* 创建表时设置主键 */
+create table testTable1
+(
+	id varchar(10) not null primary key, --primary key 标识此列为主键,但修改和删除主键时比较麻烦
+	name nvarchar(50) not null,
+	age int not null,
+	joindate date null,
+	note nvarchar(50) null
+)
+
+/* 单独设置主键 */
+alter table testTable1 add constraint PK_testTable1_name_age  primary key (name, age) --设置主键约束的名称为PK_testTable1_name_age,方便后续修改和删除
+
+/* 修改主键 */
+--先删除原有主键
+alter table testTable1 drop constraint PK_testTable1_name_age
+--再新建主键
+alter table testTable1 add constraint PK_testTable1_id primary key (id)
+```
+
+
+
+## 四、约束
+
+### 1.约束的种类
+
+1. 主键约束**(PRIMARY KEY)**:定义数据库表的主键,主键的所有列都不能为null
+
+   1. 一个表中只能有一个主键约束;
+   2. 主键的值不重复,且不为null;
+   3. 主键可以设置一列或多列;
+
+   ```sql
+   constraint constraint_name 
+   primary key (column_name[,…n]) 
+   ```
+
+2. 惟一性约束**(UNIQUE)**:用于限制某一列或某几列的组合值惟一
+
+   1. 一个表中只能有一个主键约束,但可以有多个唯一约束;
+   2. 唯一约束允许值为null;
+   3. 对于同一列,不能同时定义主键约束和唯一约束;
+
+   ```sql
+   constraint constraint_name 
+   unique (column_name[,…n]) 
+   ```
+
+3. 检查约束**(CHECK)**:为某一列或整个表中的值设置限制条件
+
+   1. 一个表中可以有多个检查约束;
+   2. 检查约束分为**列级检查约束**和**表级检查约束**;
+   3. 表中的每个字段最多只能定义一个检查约束;
+   4. 对多个字段进行检查,则必须将约束定义为表级约束;
+   5. 检查约束中不能包含子查询;
+
+   ```sql
+   constraint constraint_name 
+   check (logical_expressions) 
+   ```
+
+4. 默认值约束**(DEFAULT)**:若执行插入操作时没有提供该列的值,系统自动插入默认值
+
+   1. 默认追可以为常量、**函数、不带变量的内置函数、空值**等;
+   2. 每个字段只能定义一个默认约束;
+   3. 默认约束**不能**加在带有**IDENTITY属性**或**数据类型为timestamp(时间戳)字段**上;
+   4. 若默认值的长度超过字段的允许长度,则插入时默认值会被切断;
+
+   ```sql
+   constraint  constraint_name
+   default constraint_expression [for column_name]
+   ```
+
+5. 外键约束**(FOREIGN KEY)**:用于建立和加群两个表数据之间的关联
+
+### 2.设置约束
+
+#### (1)可视化设置
+
+​	右键要设置约束的表,选择设计,右键要设置索引的列,选择“索引/键”或“CHECK约束”。在弹出的窗口中添加或删除索引。
+
+![image-20210413152432569](D:\软件安装目录\Typora\images\image-20210413152432569.png)
+
+![image-20210413152705820](D:\软件安装目录\Typora\images\image-20210413152705820.png)
+
+
+
+#### (2)查询语句设置
+
+```sql
+/* 创建表时设置约束 */
+create table testTable2
+(
+	id varchar(10) not null 
+    	constraint PK_testTable1 primary key,
+	name nvarchar(50) not null 
+    	constraint UK_testTable1_name unique,
+	age int not null 
+    	constraint CHK_testTable1_age check (age > 0),
+	joindate date null 
+    	constraint DF_testTable1_date default getdate(),
+	note nvarchar(50) null
+)
+
+/* 单独设置约束 */
+alter table testTable1 add constraint PK_testTable1_name_age primary key (id)
+alter table testTable1 add constraint UK_testTable1_name unique (name)
+alter table testTable1 add constraint CHK_testTable1_age check (age > 0)
+alter table testTable1 add constraint DF_testTable1_date default getdate()
+
+/* 修改约束 */
+--先删除约束
+alter table testTable1 drop constraint CHK_testTable1_age
+alter table testTable1 drop constraint DF_testTable1_date
+--再添加约束
+alter table testTable1 add constraint CHK_testTable1_age check (age > 0 and age < 100)
+alter table testTable1 add constraint DF_testTable1_date default null
+```