3.1 外键
方式一 在创建表的时候,增加约束(麻烦,复杂)
create table `grade`(
`gradeid` int(11) not null auto_increment commit '学号',
`gradename` varchar(255) not null commit '名字',
primary key (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
-- 学生表的gradeid字段,要去饮用年级表中的gradeid字段
-- 定义外键key
-- 给这个外键添加约束(执行引用) references 引用
create table `student`(
`id` int(4) not null auto_increment commit '学号',
`name` varchar(255) not null commit '名字',
`gradeid` int(11) not null commit '学号',
primary key (`id`),
KEY `FK_grade` (`gradeid`),
CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
删除有外键关系的表的时候,必须先删除引用别人的表(从表),在删除被引用的表(主表)
方式二 添加表成功后,添加外键约束
create table `grade`(
`gradeid` int(11) not null auto_increment commit '学号',
`gradename` varchar(255) not null commit '名字',
primary key (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
create table `student`(
`id` int(4) not null auto_increment commit '学号',
`name` varchar(255) not null commit '名字',
`gradeid` int(11) not null commit '学号',
primary key (`id`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
-- 创建表的时候没有外键约束
alter table `student`
add CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
-- alter table 表 add CONSTRAINT 约束名 FOREING key(作为外键的列)REFERENCES 约束的表(表里的字段)
以上的操作是数据库的物理外键,数据库级别的外键,我们不建议使用!
最佳实践
-
数据库就是单纯的表,只用来存储数据,只有行(数据)和列(字段)
-
我们想使用多张表的数据,使用逻辑外键(代码里实现)
3.2 DML 语言
本质:存储数据,操作数据
语法:
-
insert
-
update
-
delete
3.3 添加
insert
-- 插入语句(添加)
-- insert into 表名([字段名,字段名,字段名]) values([值1,值2...])
insert into `grade` (`gradeName`) values ('name');
-- 由于主键自增,我们可以省略(如果不写表的字段,他就会一一对应)
insert into `grade` values ('name');
-- 一般写插入字段,我们一定要数据和字段一一对应
-- 插入多个字段
insert into `grade` values ('name'),('name1');
insert into `student`(sex) values ('男');
insert into `student`(name,sex,age) values ('zz','男',10);
语法:-- insert into 表名([字段名,字段名,字段名]) values([值1,值2...])
注意事项:
-
字段和字段之间用英文逗号隔开
-
字段是可以省略的,不过需要全部一一对应
-
字段可以同时插入多条数据,只要valuse后面的用逗号隔开即可。
3.4 修改
update
-- 修改学员名字
update `student` set `name`='aa' where id = 1;
-- 不指定条件下,会改动整个表
update `student` set `name`='aa'
-- 修改多个属性,逗号隔开
update `student` set `name`='aa',sex = '男' where id = 1;
-- 语法:
update 表名 set column = value ,[column = value,column = value....] where [条件]
-- 通过多条件进行定位
update `student` set `name`='宝贝' where `name`='aa',sex = '男';
-- 变量
update `student` set `Birthday` = CURRENT_TIME where `name`='aa',sex = '男';
语法:update 表名 set column = value ,[column = value,column = value....] where [条件]
注意事项:
-
column 是数据库上的列,尽量带上``
-
条件,如果不添加上条件,则是修改所有的数据库
-
value 可能是一个具体的值,也可以是一个变量
-
多个设置属性之间,用逗号隔开
3.5 删除
delete
语法:delete from 表名 where [条件]
-- 删除数据
delete from `student`;
-- 根据条件删除数据
delete from `student` where id = 1;
TRUNCATE
作用:完全清空一个数据库的表,表的结构和索引约束不会变!
-- 清空数据库的一张表
TRUNCATE `student`;
Delete 和 TRUNCATE 的区别
-
相同点 : 都可以删除清空数据
-
不同点:
-
TRUNCATE 重新设置自增列进行自增
-
TRUNCATE 不会影响事务
-