数据定义2 定义表
AUTO_INCREMENT
将字段设置为自增属性可以给记录一个唯一而又容易确定的ID号,该字段可以唯一标识表中的每条记录。在MySQL中,使用关键字AUTO_INCREMENT为列设置自增属性,只有整型列才能设置此属性。AUTO_INCREMENT默认的初始值为1,当往一个定义为AUTO_INCREMENT的列中插入NULL值或数字为0时,该列的值会被设置为value+1(默认为加1递增),其中value是当前表中该列的最大值。每个表只能定义一个AUTO_INCREMENT列,并且必须在该列上定义主键约束(PRIMARY KEY)或候选键约束(UNIQUE)。
mysql> create table tb_student1
-> (
-> studentNo int(10) not null unique auto_increment,
-> studentName VARCHAR(20) not null,
-> sex CHAR(2) ,
-> birthday DATE ,
-> native VARCHAR(20) ,
-> nation VARCHAR(10) ,
-> classNo CHAR(6)
-> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.06 sec)
上述语句执行成功后,会创建一个名为tb_student1的数据表。当往表中插入记录时,字段studentNo的值会自动增加,初始值为1,每插入一条新记录,该值自动加1。
注意:当一个列被指定为AUTO_INCREMENT后,其值是可以覆盖的,即可以简单地在数据插入语句(INSERT语句)中为该列指定一个值,只要该值是唯一的(至今尚未使用过),那么这个值将被用来替代系统自动生成的值,并且后续的增量将基于该手工插入的值。
DEFAULT
默认值是指在向数据表中插入数据时,如果没有明确给出某个字段所对应的值,则DBMS此时允许为此字段指定一个值。例如,如果汉族同学比较多,那么在学生表tb_student中可将字段“民族”设置默认值“汉”。当插入一条新的记录时,如没有给这个字段赋值,那么系统会自动给该字段赋值为“汉”。
在MySQL中,默认值使用DEFAULT关键字来指定。在下表的定义中,若要给字段“民族(nation)”定义默认值“汉”,则对应的SQL语句如下:
mysql> create table tb_student2
-> (
-> studentNo int(10) not null unique,
-> studentName VARCHAR(20) not null,
-> sex CHAR(2) ,
-> birthday DATE ,
-> native VARCHAR(20) ,
-> nation VARCHAR(10) DEFAULT '汉',
-> classNo CHAR(6)
-> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.09 sec)
上述语句执行成功后,表tb_student2上的nation字段则拥有了一个默认值“汉”。新插入的记录如果没有指定学生的民族,则该列的值将默认为"汉"族。
需要注意的是,如果没有为字段指定默认值,MySQL会自动地为其分配一个,即如果字段可以取NULL值,则默认值就是NULL,而如果字段被声明NOT NULL,那么默认值就取决于字段的类型:
·对于没有声明AUTO_INCREMENT属性的数值类型,默认值是0;对于一个AUTO_INCREMENT列,默认值是在顺序中的下一个值。
·对于除TIMESTAMP以外的日期和时间类型,默认值是该类型适当的“零"值;对于表中第一个TIMESTAMP列,默认值是当前的日期和时间。