外键(了解即可)
方式一:在创建表的时候,增加约束(麻烦,比较复杂)
-- 外键约束
-- 建表classinfo
create table classinfo(
class_id int primary key auto_increment,
class_name varchar(10)
);
insert into classinfo(class_name) values ('火箭班'),('一班'),('三班'),('四班');
-- 建表
create table student_info(
s_id int primary key auto_increment,
s_name varchar(10),
c_id int,
-- 外键关联
foreign key(c_id) references classinfo(class_id)
);
insert into student_info(s_name,c_id) values ('赵日天',1),('王诛魔',2),('刘斩仙',3),('Lily',1);
select * from student_info;
select * from classinfo;
-- 课程表
create table course(
cou_id int primary key auto_increment,
cou_name varchar(10)
);
insert into course(cou_name) values ('语文'),('英语'),('数学'),('物理'),('化学'),('生物'),('历史'),('地理'),('政治');
-- 学生,课程中间表
create table stu_course(
stu_c_id int primary key auto_increment,
c_id int,
c_l_id int,
-- 外键关联
foreign key(c_id) references student_info(s_id),
foreign key(c_l_id) references course(cou_id)
);
insert into stu_course(c_id,c_l_id) values(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6);
删除有外键关系的表时,必须先删除引用引用别人的表(从表),再删除被引用的表(主表)
方式二:通过图形化页面添加外键,或者使用sql语句追加
alter table `student`
add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);
以上操作都是物理外键,是数据库级别的,真实开发场景中很少使用! 也不推荐使用(避免表过多造成维护困扰)
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 如果想多张表关联使用,想使用外键(通过程序实现)
DML语言(重点)
数据库的意义: 数据存储 数据管理
DML语言:
- insert
- update
- delete
添加
语法
insert into 表名([字段名1],[字段名2]....) values ('值1','值2',.....);
如果设置了主键自增可以省略手动插入操作(如果不写表的字段,系统会一一匹配)
一般写插入语句,一定要确保数据和字段一一对应
注意事项:
- 字段和字段之间使用英文逗号隔开
- 字段是可以省略的,但是后面的值需要一一对应
- 可以同时插入多条数据,values后面的值使用
,隔开即可
修改
语法
-- 指定条件修改
update 表名 set 字段1='新的值',字段2='新的值' ...... where [条件]
-- 如果不指定条件 会修改所有的表
| 操作符 | 含义 | 范围 | 结果 |
|---|---|---|---|
| = | 等于 | 5=6 | false |
| <>或!= | 不等于 | 5<>6 | true |
| >. | 大于 | 2>1 | true |
| < | 小于 | 2<1 | false |
| <= | 小于等于 | 1<=1 | true |
| >= | 大于等于 | 2>=1 | true |
| between..and.. | [] | 在某个范围内 | 闭合区间 |
| and | && | 5>1 and 1>2 | false |
| or | 或 管道符 | 6>1 or 1>2 | true |
注意事项:
- 字段是数据表对应的列 尽量带上``
- 条件,筛选的条件如果没有指定会修改所有的列
- value,可以是一个变量,也可以是一个具体的值
- 多个设置的属性之间,英文
,隔开
删除
delete命令
delete语法
delete from 表 where 条件
- 删除数据(避免写法)
delete from 表名(删库) - 删除指定的数据
delete from 表名 where 条件(必须写法)
truncate
作用: 清空表
truncate语法
truncate table 表名
- 相同点: 都能删除数据,都不会删除表结构
- 不同
- truncate 重新设置自增列 计数器会归零
- truncate 不会影响事务