3、MySQL的数据管理
3、MySQL的数据管理
3.1外键(了解即可)
方式一,在创建表的时候,增加约束(麻烦,比较复杂)
CREATE TABLE `grade`(
`id` INT(2) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradeName` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB CHARSET=utf8
--学生表的gradeid,要引用年级表的id
--定义外键key
--给这个外键添加约束(执行引用),REFERENCES 引用
CREATE TABLE `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(8) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` INT(6) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(2) NOT NULL COMMENT '年级id',
`email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`id`)
)ENGINE=INNODB CHARSET=utf8
删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)
方式二:创建表成功后,添加外键约束
CREATE TABLE `grade`(
`id` INT(2) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradeName` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB CHARSET=utf8
--学生表的gradeid,要引用年级表的id
--定义外键key
--给这个外键添加约束(执行引用),REFERENCES 引用
CREATE TABLE `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(8) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` INT(6) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(2) NOT NULL COMMENT '年级id',
`email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB CHARSET=utf8
--创建表的时候,没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`id`)
--ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (作为外键的列) REFERENCES 哪个表(哪个字段)
以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰,这里了解即可)
最佳实践
- 数据库就是单纯的表,只用爱存数据,只有行(数据)和列(字段)
- 我们像使用多张表的数据,相使用外键(需要程序去实现,在应用层去实现,要用java代码去写)
3.2DML语言(全部记住)数据库管理语言
数据库意义:存储数据,数据管理
DML语言:数据管理操作语言
- insert
- update
- delete
3.3、添加
insert
--insert插入语句
--由于主键自增,可以省略(如果不写表的字段,要一一对应)
INSERT INTO `grade`(`gradeName`)VALUES('大一')
--一般写插入语句,一定要将数据和字段一一对应
--插入多个字段
INSERT INTO `grade`(`gradeName`)VALUES('大二'),('大三'),('大四')
语法:INSERT INTO 表名([字段1],[字段2],[字段3]...)VALUES('值1','值2','值3'...),('值1','值2','值3'...),('值1','值2','值3'...)...
注意事项:
- 字段与字段之间使用 英文逗号 隔开
- 字段是可以省略的,但是后面的值必须要一一对应,不能少
- 可以同时插入多条数据,VALUES后面的值使用,隔开即可 VALUES(),(),()....
3.4、修改
update
--修改班级名,带了条件
UPDATE `grade` SET `gradeName` = '大五' WHERE `id` = 1
--修改班级名,不带条件,会改动表中该列所有数据
UPDATE `grade` SET `gradeName` = '大六'
--修改多个属性,中间用,隔开
UPDATE `student` SET `name` = '张三' , `pwd` = 'aaaaa' ,`sex` = '女' WHERE `id` = 1
--语法
--UPDATE 表名 SET colnum_name = value , [colnum_name = value,.... ] where [条件]
条件:where子句 中的运算符
操作符会返回 布尔值
操作符 | 含义 |
---|---|
= | 等于 |
<>或!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
BETWEEN.....AND.... | 在某个范围内,闭区间 |
AND | 并且 |
OR | 或者 |
--通过多个条件定位数据
UPDATE `student` SET `name` ='武松' WHERE `id` BETWEEN 1 AND 3 AND `sex` ='男'
--语法
--UPDATE 表名 SET colnum_name = value , [colnum_name = value,.... ] where [条件]
注意:
- colnum_name 是数据库的列,尽量带上``
- 条件,筛选的条件,如果没有指定,则会修改所有的列
- value,可以是一个具体的值,也可以是一个变量(一般是时间遍历)
- 多个设置的属性,中间用英文逗号隔开
UPDATE `student` SET `name` ='武松' ,`birthday`=CURRENT_TIME WHERE `id` BETWEEN 1 AND 3 AND `sex` ='男'
3.5、删除
delete
语法:DELETE FROM 表名 [WHERE 条件]
--删除数据(避免这样写,会全部删除)
DELETE FROM `student`
--删除指定数据
DELETE FROM `student` WHERE `id` = 3
TRUNCATE命令
作用:完全清空一个数据库的表中的数据,表的结构和索引约束不会变
--清空表
TRUNCATE `student`
DELETE FROM `student`--也能清空表
delete和TRUNCATE清空表的区别
- 相同点:都能删除数据,都不会删除表结构
- 不同:
- TRUNCATE 重新设置自增列,计数器会归零
- TRUNCATE 不会影响事务
了解即可:delete删除数据库表之后,重启数据库,会出现以下现象
- 如果引擎是InnoDB 自增列会从1开始(存在内存中,断电即失)
- 如果引擎设置为MyISAM 继续从上一个自增量开始(存在文件中,不会丢失)