1. MySQL数据管理
1.1 外键(了解)
方式1:创建表时增加约束
CREATE TABLE IF NOT EXISTS `grade` (
`gradeid` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(30) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
CREATE TABLE IF NOT EXISTS `students` (
`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(2) NOT NULL DEFAULT '男' COMMENT '性别',
`gradeid` int(4) not null comment '学生年级',
PRIMARY KEY (`id`),
-- 学生表的gradeid字段引用年级表的
key `FK_gradeid` (`gradeid`),-- 定义外键key
constraint `FK_gradeid` foreign key (`gradeid`) references `grade`(`gradeid`)
-- 给外键添加约束(执行引用)
)ENGINE=INNODB DEFAULT CHARSET=utf8
删除有外键的表时,要先删除引用别人的表(从表)
方式2 先创建表后,在添加外键:
CREATE TABLE IF NOT EXISTS `grade` (
`gradeid` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(30) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
CREATE TABLE IF NOT EXISTS `students` (
`id` INT(4) NOT NULL COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`gradeid` INT(4) NOT NULL COMMENT '学生年级',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 创建表时没有外键
ALTER TABLE `students`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
以上都是数据库级别外键(物理外键),不建议使用,避免数据库过多出现问题,一般用程序实现外键(在应用层实现),以此来使用多张表的数据。
1.2 DML语言(数据操作语言)
1.2.1 添加数据(INSERT)
-- INSERT INTO `表名`([`字段1`,`字段2`,`字段3`]) VALUES('值1','值2','值3'),(下一行);
-- 字段和值一一对应,注意格式
INSERT INTO `grade`(`gradename`) VALUES('大二');
INSERT INTO `grade`(`gradename`) VALUES('大四'),('大三'); -- 主键为自增。可同时添加多行数据
INSERT INTO `students`(`id`,`name`,`gradeid`) VALUES('1','kk','2'); -- 添加同一行的列数据
INSERT INTO `students` VALUES('2','kk','123','男','2'); -- 字段可以省略,但值要一一对应
1.2.2 修改数据(UPDATE)
-- UPDATE `表名` SET `字段`=val,`字段1`=value... [WHERE _字段=_val(条件)];
-- 将字段名为_val的 `字段`值改为val。不加WHERE条件则会全部修改
UPDATE `students` SET `sex`='女' WHERE `id`=1;
UPDATE `students` SET `pwd`='qdfr',`gradeid`=1 WHERE `id`=1;
UPDATE `students` SET `pwd`='qdfr',`gradeid`=1 WHERE `id` BETWEEN 2 AND 3;-- [2,3] 闭合区间
UPDATE `students` SET `sex`='女' WHERE `id`=1 AND `name`='kk';
update `students` set `pwd`='qdfr',`gradeid`=1 WHERE id=1 AND `gradeid` between 1 and 2;-- 多个条件
UPDATE `students` SET `datetime`=CURRENT_TIME WHERE `id`=1 AND `name`='kk'; -- 可使用内置变量(时间)修改值
条件:where子句(操作符),可使用多个判断语句定位数据
操作符 | 作用 |
---|---|
= 、<>或!=、>等比较运算符 | 满足条件会返回布尔值并执行前面的修改语句 |
字段 BETWEEN from AND to | 在[from,to]闭区间内的值会执行修改语句 |
AND | 类似于&&运算符 |
OR | 类似于‘或’运算符 |
1.2.3 删除数据(DELETE)
-- DELETE FROM `表名` [WHERE语句]。不加where语句会全部删除
DELETE FROM `students` WHERE `id`=1;
清空数据库表(TRUNCATE)
-- 清空表,但表的结构和索引约束不会变
TRUNCATE `表名`;
- 相同点:都能删除数据,且不会改变表的结构
- 不同点:TRUNCATE 会重置所有设置,自增列、计数器等会归零 ;且不会影响事务