1.1 从Hello World说起

我们学习一种编程语言的时候,一般都是从Hello World开始的。这个程序看起来很简单,但是简单的事物背后往往又蕴涵着复杂的机制,比如C语言编写的Hello World程序:

#include <stdio.h>

int main()
{
printf(“Hello World\n”);
return 0;
}

一些问题:

程序为什么要被编译器编译了之后才可以运行?

编译器在把C语言程序转换成可执行的机器码的过程中做了什么,怎么做的?

最后编译出来的可执行文件里面是什么?除了机器码还有什么?它们怎么存放的?怎么组织的?

#<stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的?

不同的编译器(VC、GCC)和不同的硬件平台(x86、ARM)以及不同的操作系统(Windows、Linux),最终编译出来的结果一样吗?为什么?

Hello World程序是怎么运行起来的?操作系统是怎么装载它的?它从哪开始执行,到哪儿结束?main函数之前发生了什么?main函数结束以后又发生了什么?

如果没有操作系统,Hello World程序可以运行吗?如果要在一台没有操作系统的机器上运行Hello World需要什么?应该怎么实现?

printf是怎么实现的?它为什么可以有不定数量的参数?为什么它能够在终端上输出字符串?

Hello World程序在运行时,它在内存中是什么样子的?

设置字段是否可以为空

设置字段非空

在设置之前首先要确保该字段存在数据。

Oracle:

ALTER TABLE TABLE_NAME MODIFY FIELD_NAME NOT NULL;

DB2:

ALTER TABLE TABLE_NAME ALTER COLUMN FIELD_NAME SET NOT NULL;

设置字段可以为空

Oracle:

ALTER TABLE TABLE_NAME MODIFY FIELD_NAME NULL;

DB2:

ALTER TABLE TABLE_NAME ALTER COLUMN FIELD_NAME DROP NOT NULL;

设置字段默认值

设置默认值为空,即没有默认值

Oracle:

ALTER TABLE TABLE_NAME MODIFY FILED_NAME DEFAULT NULL;

DB2:

ALTER TABLE TABLE_NAME ALTER COLUMN FILED_NAME DROP DEFAULT;

设置一个默认值

Oracle:

ALTER TABLE TABLE_NAME MODIFY FILED_NAME DEFAULT VALUE;

DB2:

ALTER TABLE TABLE_NAME ALTER COLUMN FILED_NAME SET DEFAULT 0;

删除主键约束同时删除同名的索引

删除主键约束的同时是否会删除同名的索引,取决于该同名的索引是创建主键约束时自动创建的,还是创建主键约束前手动创建的。

当我们用如下语句创建主键约束时,会自动创建同名的索引:

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME PRIMARY KEY (FIELD1, FIELD2, FIELD3);

这个索引在主键约束被删除时会自动被删除:

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

如果换一种方式:

1. 先创建主键索引

CREATE UNIQUE INDEX CONSTRAINT_NAME ON TABLE_NAME (FIELD1, FIELD2, FIELD3);

2. 再创建主键约束

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME PRIMARY KEY (FIELD1, FIELD2, FIELD3);

这时,再通过

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

无法删除索引,只能删除主键约束。经测试,这个在Oracle和DB2下面表现是一致的。

在Oracle数据库下,可以通过如下语句把主键约束和索引一起删除:

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME CASCADE DROP INDEX;

DB2下暂时不知道用什么简单的语句,用存储过程是可以实现的。