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 <索引名>
删除索引


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


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

目录
相关文章
|
3月前
|
Java
【Azure 事件中心】向Event Hub发送数据异常 : partitionId[null]: Sending messages timed out
【Azure 事件中心】向Event Hub发送数据异常 : partitionId[null]: Sending messages timed out
|
3月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
1月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
34 1
|
3月前
|
存储 Python
set() 和 freezeset() 之间有什么区别?
【8月更文挑战第29天】
28 6
|
3月前
|
Python
python中set和frozenset方法和区别
python中set和frozenset方法和区别
|
3月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
2月前
|
存储 JavaScript 前端开发
|
3月前
|
SQL 数据库