DML 数据管理-笔记
DML 数据管理
外键

学生的grade列引用年级表的id(约束)
方法一:创建表时建立外键关系
CREATE TABLE IF NOT EXISTS `grade`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
`name` VARCHAR(30) NOT NULL DEFAULT '未定义' COMMENT '年级',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 学生的表的gradeid字段,要去引用年级表的gradeid
-- 定义外键key
-- 给外键添加约束条件(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`age` INT(3) NOT NULL DEFAULT '3' COMMENT '年龄',
`gradeid` INT(4) NOT NULL COMMENT '年级编号',
PRIMARY KEY(`id`),
--创建外键
KEY `KF_gradeid` (`gradeid`),
--创建外键约束
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade` (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除主表。
方法二:创建好表的时候没有外键关系,创建好之后添加。
--正常创建两张表
CREATE TABLE IF NOT EXISTS `grade`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
`name` VARCHAR(30) NOT NULL DEFAULT '未定义' COMMENT '年级',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`age` INT(3) NOT NULL DEFAULT '3' COMMENT '年龄',
`gradeid` INT(4) NOT NULL COMMENT '年级编号',
PRIMARY KEY(`id`),
)ENGINE=INNODB DEFAULT CHARSET=utf8;
--创建表成功后,通过修改表方式,添加外键关系
ALTER TABLE `student` ADD CONSTRAINT `KF_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`id`)
以上操作全是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰),了解即可。
最佳实践方式
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序去实现)
DML
数据库意义:数据存储,数据管理
DML:数据操作语言
insert添加delete删除update修改
添加
语法
``insert into 表名([字段1,字段2,字段3...]) value[s] (值11,值12...),(值2,值22...)...`
-- INSERT 插入语句(添加)
-- INSERT INTO 表名 ([字段1] [字段2] [字段3]) value('值1','值1','值1',... )
--由于主键自增我们可以省略。
INSERT INTO `grade`(`name`) VALUE('大四');
--如果不写表字段,他就会一一匹配。
--INSERT INTO `grade` VALUE('大三')
--相当于INSERT INTO `grade`(`id`,`name`) VALUE('大三',NULL); 会报错
INSERT INTO `grade` VALUE(NULL,'大三');
-- 一般写插入语句,我们一定要数据和字段一一对应
--插入多个值,value后跟多个(),用逗号隔开。
INSERT INTO `grade`(`name`) VALUE('大二'),('大一');

学生表添加类似,示例:
-- 学生表插入示例
INSERT INTO `student`(`name`,`age`,`gradeid`) VALUE('张三','18',4),('李四','19',3),('王五','21',1);

注意事项
-
字段与字段之间用 英文逗号 隔开。
-
字段时可以省略的,但是后面的值必须从头开始一一对应,不能少,顺序不能错。
-
可以同时插入多条数据,VALUES 后面的值,每一条数据需要使用()包裹,用英文逗号隔开。
values(),(),()......
修改
语法
update 表名 set colnum_name = value WHERE 条件1 = 条件值
--修改示例:将id为1的数据名字改成 大川
UPDATE `student` SET `name`='大川' WHERE id = 1;
--如果不设置条件,则会把表中那一列全部修改为新的值,千万注意不要这么干!!
UPDATE `student` SET `name`='大川';
--修改多个属性,逗号隔开
UPDATE `student` SET `name`='张三',`age`='22',`gradeid`='1' WHERE `id`='1';
--修改时有多个条件,用or、and连接
UPDATE `student` SET `name`='李四',`age`='21',`gradeid`='2' WHERE `id`='2' AND `name`='大川';
带条件的示例结果:

不带条件的错误示例:

条件语句
条件:运算符 大于、等于、在某个区间
| 操作符 | 含义 | 范围 | 结果 |
|---|---|---|---|
= |
等于 | 5=6 | false |
<>或!= |
不等于 | 5<>6 | true |
| > | 大于 | 5>6 | false |
| >= | 大于等于 | 6>=6 | true |
| < | 小于 | 5<6 | true |
| <= | 小于等于 | 5<=6 | true |
| BETWEEN ...AND ... | 在某个区间,包含头尾 | 5 [2-5] | true |
| AND | 相当于java中&&,与 |
2者true,则为true,否则false | |
| OR | 相当于java中` | `,或 |
注意事项
- colnum_name是数据库的列,尽量带上``
- 条件若没有带上,默认修改所有该列存储的数据
- value,是一个具体的值,也可以是变量
- 多个设置的属性之间,使用英文逗号隔开
删除
语法
delete from 表名 [where] 条件
-- 删除数据
DELETE FROM `student` WHERE `id` ='1';
--删除全部数据(不加条件即可)
DELETE FROM `student`;
-- 清空数据表
TRUNCATE `student`

DELETE 与 TRUNCATE的区别
- 相同点:都能删除数据,都不会删除表结构
- 不同点:
- TRUNCATE 重新设置自增列 计数器会清0
- DELETE删除后,重启数据库现象
- InnoDB 自增会重新1开始(存在内存中,重启服务内存请了,所以会丢失)
- MyISAM 继续从上一个自增量开始(存在文件中,不会丢失)
- DELETE删除后,重启数据库现象
- TRUNCATE 不会影响事务
- TRUNCATE 重新设置自增列 计数器会清0
以上就是本次学习整理!

浙公网安备 33010602011771号