MySQL数据管理

3、MySQL数据管理

3.1、外键(了解)

在创建表的时候,增加约束(麻烦)

CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT  '学号',
`name` VARCHAR(30) NOT NULL DEFAULT  '无名氏' COMMENT  '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(3) NOT NULL DEFAULT '男' COMMENT  '性别',
`birthday` DATETIME DEFAULT NULL COMMENT  '出生日期',
`gradeid` INT(11) NOT NULL COMMENT '学生的年纪id',
`adress` VARCHAR(20) DEFAULT NULL COMMENT  '家庭住址',
`email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT  `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES  `grade`  (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

删除有外键关系的表时侯,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

方式二 创建表成功后,添加外键约束

DROP TABLE student
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT  '学号',
`name` VARCHAR(30) NOT NULL DEFAULT  '无名氏' COMMENT  '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(3) NOT NULL DEFAULT '男' COMMENT  '性别',
`birthday` DATETIME DEFAULT NULL COMMENT  '出生日期',
`gradeid` INT(11) NOT NULL COMMENT '学生的年纪id',
`adress` VARCHAR(20) DEFAULT NULL COMMENT  '家庭住址',
`email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
COMMIT;

-- 创建表的时候没有外键关系
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
-- ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (作为外键的列)  REFERENCES  那个表(表里的那个列)

以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成的困扰,了解即可)

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键(程序去实践)

3.2、DML语言(重点)

数据库意义:数据存储,数据管理

DML语言:数据操作语言

  • insert

  • update

  • delete

3.3、添加

insert

-- 创建表的时候没有外键关系
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
-- ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (作为外键的列)  REFERENCES  那个表(表里的那个列)

-- 插入语句(添加)
-- insert into 表名([字段名1,字段名2,...]) values('值1'),('值2',...);
SELECT * FROM grade
-- 主键自增,可以忽略
INSERT INTO `grade`(gradename) VALUES('大四');
INSERT INTO `grade` VALUES(2,'大三');
-- 一般我们写插入语句,一定要保证字段和数据一一对应!
-- 插入多个字段
INSERT INTO `grade`(`gradename`) VALUES ('大二'),('大一');

语法:insert into 表名([字段名1,字段名2,...]) values('值1'),('值2',...);

注意事项:

  1. 字段与字段之间使用英文逗号隔开;
  2. 字段时可以省略的,但是后面的值必须要一一对应,不能少;
  3. 可以同时插入多条数据,values后面的值,需要使用,隔开即可values (),(),...

3.4、修改

update

-- 带了学员名字,带了条件
UPDATE student SET NAME = '张无忌' WHERE id =1;
-- 不指定条件下灰改动所有表
UPDATE student SET NAME = '张无忌'
-- 修改多个属性用逗号隔开
UPDATE student SET NAME = '韦小宝' , email = '7758520@qq.com' WHERE id =2;

-- 语法
UPDATE 表名 set colnum_name = value[,column_name = value...] where [条件]

条:where子句 运算符 id等于某个值,大于某个值,在某个区间内修改

操作符会返回布尔值

操作符 含义 范围 结果
= 等于 5=6 false
<>或!= 不等于 5<>6 true
>
<
>=
<=
BETWEEN... and ... 在某个范围内 [2,5]
AND 我和你&& 5>1 and 1>2 false
OR 我或你 5>1 or 1>2 true
-- 通过多个条件定位数据
UPDATE student SET NAME = '孙悟空' WHERE NAME ='xx' AND id =4;

语法:UPDATE 表名 set colnum_name = value[,column_name = value...] where [条件]

注意:

  • colnum_name 是数据库的列,尽量带上``
  • 条件,筛选的条件,如果没有指定的列,会修改所有列
  • value可以是一个具体的值,也可以是一个变量
  • 多个设置的属性之间用英文逗号隔开

3.5、删除

delete 命令

语法:delete from 表名 [where 条件]

-- 删除表数据
DELETE FROM `student`

-- 删除指定数据
DELETE FROM `student` WHERE id =1;

TRUNCATE 命令

作用:完全清空一个数据库表,表的结构和索引约束不会变!

-- 清空student表
TRUNCATE `student`

delete 和 TRUNCATE 的区别

  • 相同点:都会删除数据,都不会删除表结构

  • 不同点:

    • TRUNCATE会重新设置自增列 计数器会归零
    • TRUNCATE不会影响事务
-- 测试delete和TRUNCATE
CREATE TABLE `test`(
	`id` INT(12) NOT NULL AUTO_INCREMENT,
	`coll` VARCHAR(10) NOT NULL,
	PRIMARY KEY(`id`)
) ENGINE=INNODB CHARSET=utf8;
-- 新增表数据
INSERT INTO `test`(`coll`) VALUES('a'),('b'),('c');
SELECT  * FROM `test`

-- 测试delete删除表
DELETE FROM `test`         -- 不会影响自增
-- 测试TRUNCATE删除表
TRUNCATE `test`               -- 自增会清零 

了解:delete删除的问题,重启数据库,现象

  • InnoDB 自增列 会从1开始 (存在内存中,断电即失)
  • MyISAM 继续从上一个子增量开始 (存在文件中的,不会丢失)
posted @ 2020-08-31 23:20  小徐学狂  阅读(134)  评论(0编辑  收藏  举报