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 继续从上一个自增量开始(存在文件中,不会丢失)
posted @ 2020-08-25 09:11  DannyBoy~  阅读(133)  评论(0编辑  收藏  举报