1. 物理外键
物理外键通过设置约束将多表关联起来,但是现在已经不常用了对容易造成错误,性能也不行。阿里提出的数据库规范都在应用层用逻辑外键解决数据库外键关联的问题,尽量避免使用物理外键。
alter table 表名
add constraint 外键名称
foreign key(本表字段
) references 哪个表
(哪个字段
)
alter table `student
` add constraint foreign key (`gradeid
`) references `grade
`(`gradeid
`)
2. insert语句
insert into 表名 values (字段值1,字段值2,字段值3…);这种语句要求必须一一和数据库的表字段按照顺序匹配,而且必须所有字段值都要写否则就会报错至少是个警告,有些字段数据可能会丢失因此不建议使用。举个栗子,数据表顺序如上图。
insert into grade
values (1, 'aaa', 30);
insert into grade
values (2, 30, 'bbb');
insert into grade values(第一条数据字段值1,第一条字段值2,第一条字段值3…),values(第二条数据字段值1,第二条字段值2,第二条字段值3…)… 这种语句是第一种的变种,它的用处和第一种一样只是可以同时插入n条数据,但是同样要注意数据字段的一一对应。
insert into grade
value (1,'aaa',20), (2,'aaa',30), (3,'ban',29)
insert into grade (某字段1,某字段2,某字段3…) values (字段1的值,字段2的值,字段3的值…);这种格式的语句好处就是可以指定特定的字段插入数据,对于一些自增的属性字段可以不指定,SQL内部会自行增长。但是还是建议把所有的字段都写全,可以不按顺序写字段,但是后面的数据一定要和前面字段的保持相对顺序。
insert into grade
(`id
`,`name
`,`age
`) values (1,'aaa',20)
insert into grade
(`age
`,`name
`) values (25, 'bbb');
insert into grade (某字段1,某字段2,某字段3…) values (第一条字段1的值,第一条字段2的值,第一条字段3的值…), (第二条字段1的值,第二条字段2的值,第二条字段3的值…)…和第三种情况一样也可以同时插入多条数据,实际开发这种情况使用比较多。
insert into grade
(`id
`,`name
`,`age
`) values
(1,'aaa',20),
(2,'bbb',25),
(3,'aba',36)
3. update语句
update 表名 set 字段名 = value值 where 条件;这是最常见的情况,翻译出来的意思就是将满足所有条件的数据的字段值更改为value值。条件一定要写否则就将当前表的所有数据都改了,抓紧准备跑路吧。
update `grade
` set `name
` = 'test' where `id
` = 1;
update 表名 set 字段1 = 值1,字段2 = 值2,… where 条件;这种写法就是将满足所有条件的数据的多个字段值修改。
update `grade
` set `name
` = 'test', age
= 99 where `id
` = 1;
update就这两种写法严格来说就一种,但是后面的条件比较多。下面列举一下常见的条件。
这些操作符和C语言的操作符大致相同没什么区别。
4. Delete 和 truncate语句
delete from 表名 where 条件。一定要写上条件,否则数据全删掉了抓紧跑路吧。
delete from `grade
`;
delete from `grade
` where `id
` = 1;
Truncate table 表名;也是直接删除所有的数据。
Truncate table `grade
`;
Truncate 和 delete的区别:
a. 两者都可以用来清空数据库,但是truncate速度比delete快一点。
b. truncate不支持事务回滚,delete支持事务回滚。
c. truncate会重置自增键值从1开始,delete不会还是会从上一个键值自增,但是重启数据库之后delete也会从1开始。如下测试
d. delete是可以加条件的DML语句,truncate是不可以加条件的DDL语言。
5. 总结
insert语句就是四种固定的写法;但是update的写法比较多因为可以加上多个条件;Delete写法是基本上固定的就看条件了。
对于 表名 和 字段尽量用反引号括起来
对于update语句 和 delete语句 条件的一定要指定否则遭殃的就是自己。
update语句更新的值value可以是一个常量也可以是变量,但是常量是最常见的,只有一些注册功能的时候可能需要带上注册之间可以获取数据库的时间current_time。