//文章浅显,大神勿怪,欢迎讨论
//未完待续之前我们说到数据库像一个异世界的图书馆,我们是其中的管理员(对,就是那位man),管理着图书馆里的所有资源,如书架(Databases),里面装着书(Database),书里面是一张张布满数据的纸(Table)。
在日常生活中,我们用MySQL就是来存放与操作数据的,问题有两个,一是数据从何而来(数据的定义与类型请看前两话),二是数据存放在哪。
关于第二个问题,数据存放的地方已经在前面说的很清楚了,就存放在Databases中的Database中的Table中。
那第一个问题呢,数据从何而来,数据的来源有两个,一个是自己从零开始建,先建一个数据库,然后在数据库中建一张表,表中就可以存入自己想要的各种各样的数据了。另一个则是从外部导入数据。然后直接拿来用。
首先讲第一个,如何从零开始建。
在存放数据之前,我们得知道那张表是什么格式的,它有什么样的规则。正如上帝它并不直接创造世界,它只创造世界的法则,之后的一切,便自然而然的出现了。不同的规则只能存放不同的数据,正如鱼只能在水中,绵羊只能在地面。
所以我们首先要定义一张表,它是什么,它有什么限定。在表的定义中,叫做字段的属性,我们可以创建多个字段,每个字段有不同的属性。适用于不同的规则。so,先直接开始从一段语句开始吧,言从法随。
create table test
(
id int(11) primary key,
name varchar(30) not null,
code int unique,
salary float default 5000.00
);
读懂语言等于学会语言的一半了,那么我们先来读一下,创建一张表,它的名字叫做test,它里面有字段id,name,code,和salary,就跟Excel中的那些第一行,是来说明各列的属性的,其中id列,它的属性要求有,int(11),只能是数字整型,只显现11位数,primary key主键,主键是一种约束,它能使该列数据唯一,且不能为空。同时也可以与另一张表建立联系。(建立什么联系看下文)
name列它要求列必须是varchar(30)字符型,not null意味着该字段不能为空值。
code列,它要求是整型,同时unique,代表着该字段的数据不能重复。
salary列,它要求是float型,default为默认值,默认值为5000.00
(ps:上面的SQL语句只接受英语字符)
在日常中,我们不可能只用一张表就可以解决所有问题,通常都是多张表一起用的,比如说员工表与部门表,如果我们要同时用到两张表,那么我们就要将两张表一同建立联系,才能使用。如员工工号,是两张表都共有的,但员工表中,员工工号是来识别员工区别的主要手段,而部门表识别区别的往往是部门编号,而不是员工编号。那么我们可以说,在员工表中,员工工号是主键,而在部门表中则是外键。
所谓,外键,其实就是在一张表中的字段充当主键,在另一张表中没有的字段。
那么如何建立外键呢?
creat table test_1
(
department_id int(12) primary key auto_increment
member_id int(11)
constraint fk_test foreign key(member_id) reference test(id)
);
这里,我们建立了一张表,它的名字叫做test1,里面有部门字段department_id,它是主键,同时能自动增加1,如1,2,3,4·······这样的好处在于我们不用亲自去输。
同时,设置成员id字段,它的类型是Int,
最后我们设置约束条件constraint,这个约束名叫做fktest(为foreign key的缩写,自己随便命名没关系,只要方便自己记忆,这个叫做fktest的约束,它的具体形式是foreign key(member_id)reference test(id)。读起来就是将member_id设置为一个外键,它参照test表中的id字段。
从这个例子我们也可以得知,建立约束条件,不仅仅可以字段直接在后面加,而且可以在最后的最后加。如下面例子。
creat table test_2
(
department_id int(12) primary key
member_id int(11)
constraint auto_test auto_increment(department_id)
);
好了,如何建立表结构这期已经说完,然而还有几个问题,如果这个表结构建的不够满意,但它已经建立好了,怎么办。另外如果我们想在这张表增加一些新的东西的话,怎么办?这是下期的内容了,Byeby。