持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
今天先补充一个知识点——外键,然后就是DML的增删改。查询后面会单独拿出来讲
外键
create table `grade` (
`gradeid` int(10) not null auto_increment comment '年级id',
`gradename` varchar(50) not null comment '年级名称',
primary key(`gradeid`)
)engine = innodb default charset = utf8
设置外键的语法:
[constraint 约束名] foreign key(作为外键的列) references 另一个表(字段名)
注意:一个表的外键必须是另一个表的主键
在创建表的时候,添加外键
create table if not exists `student` (
`id` int(4) not null auto_increment comment '学号',
`name` varchar(30) not null default '匿名' comment '姓名',
`pwd` varchar(20) not null default '123456' comment '密码',
`sex` varchar(2) not null default '女' comment '性别',
`birthday` datetime default null comment '出生日期',
`address` varchar(100) default null comment '家庭住址',
`email` varchar(50) default null comment '邮箱',
`gradeid` int(10) not null comment '学生的年级'
primary key(`id`);
constraint `gradeid` foreign key(`gradeid`) references `grade`(`gradeid`)
) engine=innodb default charset=utf-8
删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)
在外面添加外键
alter table `student`
add constraint `gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);
以上操作都是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰)
外键可能形成闭环,使我们无法删除任何一个表
最佳实践:
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序实现)
DML语言
数据库的意义:数据存储,数据管理
DML语言:数据操作语言
- insert 增加
- update 修改
- delete 删除
添加
语法:
insert into 表名([字段名1, 字段2, 字段3]) values('值1'), ('值2'),( '值3')...
样例:
--插入一个值
insert into `grade`(`gradename`) values('大二');
--插入多个值
insert into `grade`(`gradename`) values('大一'), ('大二');
--一般写插入语句,一定要数据和字段一一对应
--插入多个字段值
insert into `student`(`name`, `pwd`, `sex`) values ('张三', 'aaaaa', '男');
注意:
- 字段和字段之间使用英文逗号隔开
- 字段是可以省略的,但后面的值必须要一一对应
- 可以同时插入多条数据,values后面的值需要使用逗号隔开
修改
语法:
update 表名 set 需要修改的内容 where [条件]
样例:
--修改学员名字
update `student` set `name` = '狂神' where id = 1;
--不指定条件会改变所有项
--修改多个属性,逗号隔开
update `student` set `name` = '张三', `email` = '12345654' where `id` = 1;
注意:
- 条件是筛选的条件,如果没有指定,则会修改所有的列
- 修改的内容可以是一个具体的值,也可以是一个变量
- 设置多个属性时,要用逗号隔开
删除
delete命令
语法:
delete from 表名 [where 条件]
样例:
--删除数据(会全部删除)
delete from `student`;
--删除指定数据
delete from `student` where id = 1;
truncate命令
作用:完全清空一个数据库表,表的结构和索引约束不会变
truncate `student`;
delete 和 truncate 的区别
-
相同点:都能删除数据,都不会删除表结构
-
不同:
- truncate 重新设置自增列,计数器会归零
- truncate 不会影响事务
delete 和 truncate,重启数据库后引擎的现象
- innodb 自增列会从1开始(存在内存当中,断电即失)
- myisam 继续从上一个自增量开始(存在文件中,不会丢失)