字段属性&外键

1.null/not null

如果一个字段中没有指定DEFAULT修饰符,MySQL会依据这个字段是NULL还是NOT NULL自动设置默认值。如果指定字段可以为NULL,则MySQL为其设置默认值为NULL。如果是NOT NULL字段,MySQL对于数值类型插入0,字符串类型插入空字符串,时间戳类型插入当前日期和时间,ENUM类型插入枚举组的第一条。
create table t1(col1 int not null, col2 int);

2.default value

create table t1(col1 int not null default 0, 
col2 int);

3.primary key

创建主健方法1:
create table t1(
id int primary key, 
name varchar(5) //primary key/unique key
);

创建主健方法2:
create table t1(
id int;
name varchar(5),
primary key(id), //用这种方法可以定义组合主健
//primary key(id, name)
);

删除主健
alter table t1 drop primary key; //主健是针对table的所以不需要指定字段。
alter table t1 add primary key(id, name); //id 和 name两个字段同时构成主健。

4.auto_increment

每次插入数据时,将该字段值+1,通常用于primary key id。增加auto_increment的前提,整型,索引列。
create table t1 ( id int primary key auto_increment);

设置auto_increment的值
alter table t1 auto_increment 10;//这个值必须大于当前的最大编号,小于的情况也不会报错,但无效果,下次在插入时就会从10开始。如果新建表时设置的话,则初期值就是10啦。

自动增长的主健可以update,可以insert设置,只要不重复就可以。
如果自动增长的记录被删除,则该id同样不存在,可以再次插入被删除了的id的记录。

5.unique key

UNIQUED 可空,可以在一个表里的一个或多个字段定义
PRIMARY KEY 不可空不可重复,在一个表里可以定义联合主键,默认是索引

6.comment

可以定义列的时候加上这个,作为注释。
create table class( id int comment “编号信息“);

7.关系

一对一:两个表中的主健相等
比如一个人的信息有很多,则不常用的信息单独建立一个表,常用表,不常用表,这两个表的id相同。
实际开发中字段过多的表尽量分开。这种优化方法成为垂直风格(垂直拆分)

一对多:
一般的操作是在多的一方添加一个字段,指向唯一的那方。
比如一个班级有多个学生,一般在学生的属性中添加 班级 字段,内容为班级的主健。

多对多:
创建一个新的关系表。把多对多的关系,分解成2个一对多的关系。

8.外键

对于PHP程序员来说,一般不用外键,进场通过其他的方式来实现。比如on delete cascade的动作,可以通过先删除主表内记录,然后删除字表记录。
create table class(
class_id int primary key auto_increment, 
class_name varchar(10)
/* primary key (class_id) */
) character set utf8;

drop table if exists student;
create table student(
student_id int primary key auto_increment, 
student_name varchar(10), 
class_id int comment “外键,学生称之为字表,班级称之为父表”,
foreign key(class_id) references class(class_id) /*foreign key必须在单独的一行指定 不能像primary一样*/
)character set utf8;
被指向的称为主实体(主表),也叫父实体(父表)。
负责指向的实体,称之为从实体(从表), 也叫子实体(子表)

也可以通过alter添加,注意删除外键时,需要通过show create table student,先找到外键对应的名称,然后删除该名称。
alter table student drop foreign key student_ibfk_1; /* ib 是 InnoDB的缩写,只有InnoDB数据引擎支持外键 */

alter table student add foreign key(class_id) references class(class_id);

9.references

创建外键时需要用该关键字指定外键指向的是哪个表。
建立外键关系后,如果删除父表中的记录,必须先删除子表中referfences到该表中的记录。

10.级联(cascade)操作,关联动作

主表更新 on update 
主表被删除 on delete

1)set null当主表被删除或者主健更新时,从表设置为null。
 alter table student add foreign key (class_id)  references class(class_id) on delete set null;
alter table student add foreign key (class_id) references class(class_id) on update set null;

2)cascade 级连。当主表记录被删除或主健更新时,字表中记录被删除或者级联更新。
alter table student add foreign key (class_id)  references class(class_id) on delete cascade;
alter table student add foreign key (class_id) references class(class_id) on update cascade;
*on update cascade好像不好用,但是一般也不会有人用到这项,因为主表的主键被更新本身操作就很奇怪。

3)restrict 拒绝主表执行删除动作。
alter table student add foreign key (class_id) references class(class_id) on update restrict;

4)注意可以同时设置多个约束,此时出现冲突时,比如同时设置了set null,cascade,则相同内容时前面的有效。

<完>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值