1.外键(了解)
- 方式一:创建表时添加约束
create table if not exists `grade`(
`gradeid` int(10) not null auto_increment comment '年级id',
`gradename` varchar(50) not null comment '年级名称',
primary key(`gradeid`)
)engine=innodb default charset=utf8
-- 学生表的gradeid字段要去引用年级表的gradeid
-- 定义一个外键的key
--给这个外键添加约束,执行引用
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(3) not null default '女' comment '性别',
`birthday` datetime default null comment '出生日期',
`gradeid` int(10) not null comment '学生年级',
`address` varchar(100) default null comment '家庭住址',
`email` varchar(50) default null comment '邮箱',
primary key(`id`),
key `FK_gradeid` (`gradeid`),
constraint `FK_gradeid` foregin key (`gradeid`) references `grade`(`gradeid`)
)engine=innodb default charset=utf8
- 方式二:建完之后添加约束
alter table `student` add constraint `FK_gradeid` foregin key (`gradeid`) references `grade`(`gradeid`);
-- alter table 表 add constraint 约束名 foreign key(作为外键的列) references 哪个表(哪个字段);
- 以上的操作都是物理外键,数据库级别的外键,不建议使用
- 删除有外键关系的表的时候,要先删除引用的表,再删除被引用的表
最佳实践:
- 数据库就是单纯的表,只是用来存数据,只有行(数据)和列(字段)
- 想要使用多张表或者外键时,使用程序去实现
2.insert添加语句
-
语法:insert into 表名 ([字段名1,字段名2,字段名3]) values(‘值1’),(‘值2’),(‘值3’)
insert into `grade`(`gradename`) values('大四') -- 主键自增可省略 insert into `student`(`name`,`pwd`,`sex`) values('张三','123123','男')
-
如果不写表的字段会一一匹配
insert into `grade` values('大三') --报错error insert into `grade` values(2,'大三') --正确
-
插入多个字段
insert into `grade`(`gradename`) values('大一'),('大二')
-
注意事项:
- 字段和字段之间使用英文逗号隔开
- 字段是可以省略的,但是后面的值必须一一对应
- 可以同时插入多条数据,values后面的值必须使用逗号隔开
3.update修改语句
-
语法:update 表名 set 字段名1=value,字段名2=value,字段名3=value where 条件
update `student` set `name`='小红' where `id`=1 update `student` set `name`='小红',`email`='123123@qq.com' where `id`=1 update `student` set `name`='小红',`email`='123123@qq.com' where `gradeid`=1 and `sex`='女' -- 不指定条件默认修改所有的表 update `student` set `name`='小红' -- 将所有的name改为小红
-
where条件中常见操作符
操作符 含义 = 等于 <>或!= 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 between…and… 在某个闭合区间 and 和 or 或 -
注意事项:
- 字段名尽量带上``
- 筛选的条件如果不指定,则会修改所有的列
- value是一个具体的值,也可以是一个变量
update `student` set `birthday`=current_time where `id`=1
- 多个设置的属性之间使用英文逗号隔开
3.delete删除语句
-
语法:delete from 表名 where 条件
-- 删除指定数据 delete from `student` where `id` = 1 --删除全部数据 delete from `student`
-
完全清空一个数据库表,表结构和索引约束不变
truncate `student`
-
delete和truncate比较
- 相同点:都能删除数据,都不会删除表结构
- 不同点:
- truncate重新设置自增列,计数器会归零
- truncate不会影响事务
- delete删除后,重启数据库服务,INNODB自增列会从1开始(存在内存当中的,断电即失);MYISAM继续从上一个自增量开始(存在文件当中的,不会丢失)