继续问一个关于数据库的问题

来源:百度知道 编辑:UC知道 时间:2024/07/03 03:58:09
请高手们帮忙解答一下。是这样的,在数据库中用CREATE TABLE语句创建一个表,由数据定义语言,其中的有些属性是被定义为NOT NULL的,而有些却没有,没有时系统默认是为NULL的,而接下来我就要把具体的实例用VALUES关键字做插入(INSERT INTO ),而这时候我当初没被定义为NOT NULL的项也有内容要插入,这样就会出错对吗?因为定义表的时候是没有说明不为空的,系统默认为空的。这是一个问题。另一个我不明白的问题是,一个表中的某项属性被定义为外键,参照了另外一个表(中主键),现在我想把被参照了的表中的某项值删掉,当然了由数据库参照完整性约束,这个操作是会被拒绝的,因为参照表中有删除的引用,这时候用级联策略是可以完成删除的操作的。还有一种方法就是将参照表中的引用了被参照表中欲删除项的那个分量值置空(set null),这时候删除主表中删除的操作是不被被系统拒绝的,但是我的问题就是这时候如果那项被置空了,也即为NULL,这与原来这项不能为空时的定义又矛盾了?其实我想知道的就是在创建表的时候,如果被定义为NULL就不能做插入对吗?如果是这样的话,我觉得应该是这样的,就是在创建表的时候是应该定义好的,这是第一步,然后做插入操作是在此基础上的具体化。再接下来如果做相应操作的时候DBMS是应该是在以上的东西做完后的操作,因为不可能连一个像样的东西都没有就拿它做操作,所以DBMS会把它当成接下来做的事情,就是尽管原来定义了那样的东西,但是呢,现在要做改变了,这应该是一种时间上的先后问题,可是尽管逻辑上讲通了,但又出现了新的问题,那就是用户原来定义的表与实际情况不相符了,所以这里很迷惑,还请高手为我指点迷津
我觉得我又突然想通了,其实这个过程应该很简单:就是把原来不为空的东西设置成了空,这个设置在DML语言中体现了出来,尽管DDL语言中有那样的定义,但是DML中的相应语句已经说明了将那个不为空的设置为空了,这样我们看到时也就明白了,哈哈,这样的话逻辑上就通顺了,应该是这样的,我自己帮了自己,哈哈

而这时候我当初没被定义为NOT NULL的项也有内容要插入,这样就会出错对吗?
-不会出错,没有定义为not null只是意味着可以为空,而不是必须为空.

但是我的问题就是这时候如果那项被置空了,也即为NULL,这与原来这项不能为空时的定义又矛盾了?
-对啊,所以这时置空也会被系统拒绝.

其实我想知道的就是在创建表的时候,如果被定义为NULL就不能做插入对吗?
-没有"定义为null"这一说,如果你是指"默认为null",那还是可以插入,并且插入任何值都可以.