sql数据定义语句(cascade,set,null,no action的区别)

简介: sql数据定义语句(cascade,set,null,no action的区别)

(一)ADD


基本格式:


1. ALTER TABLE <表名>
2. ADD 新属性名 新属性类型


例:alter table s1 add tele char(12):增加一个电话号码(tele)属性


注:


新增的属性不能定义为not null


不论基本表原来是否已有数据,新增加的列一律为空


补充:外键的添加和删除


department为主表,employee为从表,employee的dep_id是外键,对应department的id为主键


添加:

alter table employee add constraint emp_depid_fk
foreign key (dep_id) references department(id);


emp_depid_fk:是外键约束名


删除:


alter table employee drop foreign key emp_depid_fk;


(二)ALTER COLUMN


基本格式


1. ALTER TABLE <表名>
2. ALTER COLUMN 属性名 新属性类型


例:ALTER TABLE student alter Sage INT;


将年龄的数据改为整数

 

(三)DROP删除原有属性


格式


ALTER TABLE 基本表名 DROP 属性名[CASCADE|RESTRICT];


例:


ALTER TABLE Student DROP S_entrance RESTRICT;


在表Student中删除S_entrance属性(没有视图或约束引用S_entrance时才能删除)


ALTER TABLE Student DROP COLUMN Sage CASCADE


在表Student中删除Sage属性,并且将引用该属性的所有视图和约束也一起删除


注:


ALTER TABLE Student DROP COLUMN S_entrance RESTRICT;


sql server不支持删除列时的restrict选项


ALTER TABLE Student DROP COLUMN S_entrance;


不加restrict可以


(cascade同理)


cascade,set,null,no action的区别:


1.首先明确一个概念,假如表A(id,name,foreign_id),表B(foreign_id,name),我们说表A参考了表B的主键作为其外键使用,所以B表示父表,A表是子表

2.删除和更新有四种设置方式

(1)cascade:级联,当父表更新、删除,子表会同步更新和删除

(2)set null:置空,当父表更新、删除的时候,字表会把外键字段变为null,所以这个时候设计表的时候该字段要允许为null,否则会出错

(3)restrict:父表在删除和更新记录的时候,要在子表中检查是否有有关该父表要更新和删除的记录,如果有,则不允许删除个更改

(4)no action:和restrict一样


如果想该语句结构,但是不想破坏旧表,例如:原表为student


select * Into student1 from student


这样新表student1的数据和旧表相同了


(四)DROP删除基本表


格式:


DROP TABLE <表名> [RESTRICT|CASCADE];


CASCADE(级联):有视图依赖于表也能删除


●删除该表没有限制


●再删除基本表的同时,相关的依赖对象一起删除


RESTRICT(限制):有视图依赖于表,则不能删除


●删除表是有限制的


●欲删除基本表不能被其他表的约束所引用


●如果存在依赖该表的对象,则此表不能被删除


例:创建一个视图


create view student1_dept10
as
select sno,sname,sex
from student1
where deptno=10;


在标准SQL中


视图student1_dept10依赖于student1,要删除student1,只能用cascade,不能用restrict


DROP TABLE student1 CASCADE;


发现删除成功


但是在SQL SERVER中


1. DROP TABLE student1 RESTRICT;
2. 
3. DROP TABLE student1 CASCADE;


两个都是删除失败的


只有


DROP TABLE student1;


才能成功删除,删除表后表上所依赖的视图也失效了


总结:


SQL SERVER的DROP TABLE,ALTER TABLE...DROP COLUMN不支持restrict和cascade。


(五)INDEX定义索引


格式:

create [UNIQUE][CLUSTER]INDEX<索引名>
ON<表名>
(
<列名>[<次序>]
[,<列名>[<次序>]]....
);
<表名>:要建立索引的基本表
<次序>:指定索引值的排列次序(DESC,ASC)
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTER:表示建立的索引是聚簇索引


例:


create index jno_index on j(jo);
允许重复
create unique index jno_index on j(jo);
不允许重复


注:


ALTER INDEX <旧索引名> RENAME TO <新索引名>;
修改索引
DROP INDEX <索引名>
删除索引


删除索引时,系统会从数据字典中删去有关该索引的描述


数据字典:是关系数据库管理系统内部的一组系统表,记录了数据库所有定义信息。

相关文章
|
19天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
23 3
|
1天前
|
SQL 关系型数据库 MySQL
|
2天前
|
SQL 数据库
Sql中如何添加数据
Sql中如何添加数据
5 0
|
4天前
|
SQL Java 数据库连接
MyBatis #与$的区别以及动态SQL
MyBatis #与$的区别以及动态SQL
8 0
|
6天前
|
SQL API 数据库
在Python中获取筛选后的SQL数据行数
在Python中获取筛选后的SQL数据行数
17 1
|
7天前
|
SQL 分布式计算 数据可视化
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
|
11天前
|
存储 前端开发 索引
【Web 前端】ES6中,Set和Map的区别 ?
【5月更文挑战第1天】【Web 前端】ES6中,Set和Map的区别 ?
|
12天前
|
SQL 机器学习/深度学习 数据采集
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
|
12天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
13天前
|
SQL Oracle 关系型数据库
利用 SQL 注入提取数据方法总结
利用 SQL 注入提取数据方法总结