Mysql数据管理
一、外键(了解即可)
- 方式一,创建表的时候增加约束(麻烦,比较复杂)
create table `grade`(
`gradeid` int(10) not null auto_increment comment '年级id',
`gradename` varchar(50) not null comment '年纪名称',
primary key(`gradeid`)
)
--学生表的gradeid字段要去应用年级表的gradeid
-- 1.定义外键key
-- 2.给这个外键添加约束
create table if not exists student(
`id` int(4) not null auto_increment comment '学号',
`name` varchar(20) 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`),
key `FK_gradeid` (`gradeid`),
constraint `FK_gradeid` foreign key(`gradeid`) REFERENCES `grade`(`gradeid`)
)engine = innodb default charset=utf8
- 方式二,创建表成功后添加外键约束
--创建表的时候没有外键关系
create table if not exists student(
`id` int(4) not null auto_increment comment '学号',
`name` varchar(20) 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`)
)engine = innodb default charset=utf8
-- 修改表,添加外键约束
alter table `student`
add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);
--通用结构:
--alter table 表名
--add constraint 约束名 foreign key(作为外键的列) references 那个表(那个字段);
以上操作都是物理外键(数据库级别的外键),不建议使用,避免数据库过多造成困扰
最佳实践:
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键最好用程序实现
删除有外键关系的表,必须先删除从表(引用别人的表),再删除主表(被引用的表)
二、DML语言(重点)
数据库意义:数据存储,数据管理
DML语言:数据操作语言
- insert
- update
- delete
1.添加
语法:insert into 表名(字段1,字段2…) values(值1,值2…);
insert into 表名(字段1,字段2...) values(值1,值2...);
-- 主键自增,故省略主键插入
-- 若不写表的字段,就会按照列的顺序一一匹配
-- 写插入语句,一定要数据和字段一一对应
insert into `grade`(`gradename`) values('大四');
-- 插入多个字段
insert into `grade`(`gradename`) values('大一'),('大二');
insert into `student`(`name`) values('张三'),('李四');
insert into `student`(`name`,`sex`) values('张三','男'),('李四','女');
注意事项:
- 字段和字段之间使用英文逗号隔开
- 字段可以省略,但是values里面的值必须一一对应
- 可以同时插入多条数据,values后面的值用英文逗号和括号隔开即可values(),(),()…
2.修改
语法:update 表名 set col = value where 条件
-- 修改学员名字
update `student` set `name`='djq' where id=1;
-- 若不指定条件会改动所有表
update `student` set `name`='djq';
-- 修改多个属性,逗号隔开
update `student` set `name` = 'dj',`email` ='[email protected]' where id= 2;
where子句运算符:
操作符 | 含义 | 示例 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5!=6 | true |
<,>,>=,<= | 小于,大于,大于等于,小于等于 | – | – |
between…and… | 闭合区间 | [2,5] | – |
and | 和 | 5>1 and 4>2 | true |
or | 或 | 5>1 or 5>6 | true |
3.删除
语法:delete from 表名 [where条件];
-- 避免删除全部数据,删完赶紧跑路
delete from student ;
-- 删除数据
delete from student where id = 1;
TRUNCATE命令:完全清空一个数据表,表的结构和索引不会变。
用法:TRUNCATE 表名
TRUNCATE与delete的比较:
相同点:都能删除数据,且都不会删除表结构
不同点:
- TRUNCATE会重新设置自增列,计数器会归零
- TRUNCATE不会影响事物
了解即可:delete删除的问题,重启数据库后:
- innodb:自增列会从1开始(存在内存当中,断电即失)
- myisam:继续从上一个自增量开始(存在文件中的,不会丢失)