MySQL(二,三)数据库管理(外键, DML语言)

1.1,外键

方法一: 在创建表的时候增加约束

create table if not EXISTS grade(
	`gradeid` int(10) NOT NULL AUTO_INCREMENT COMMENT '年级',
	`gradename` VARCHAR(20) DEFAULT null COMMENT '年级名称',
	PRIMARY KEY(`gradeid`) 
)ENGINE = INNODB DEFAULT CHARSET=utf8;

DROP TABLE if not EXISTS student;

create table if not EXISTS student(
	`id` int(4) not null AUTO_INCREMENT COMMENT '学号',
	`name` varchar(20) NOT NULL  COMMENT '姓名',
	`sex` varchar(2) DEFAULT '男' COMMENT '性别',
	`gradeid` int(10) NOT NULL COMMENT '年级',
	`birthday` datetime DEFAULT null COMMENT '出生日期',
	PRIMARY KEY(`id`) ,
	KEY `FK_gradeid` (`gradeid`) ,
	CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGINE = INNODB DEFAULT CHARSET=utf8
  • 删除有外键关系的表时, 必须先删除引用其他表的表, 再删除被引用的表

方式二 建表后再添加约束

create table if not EXISTS student(
	`id` int(4) not null AUTO_INCREMENT COMMENT '学号',
	`name` varchar(20) NOT NULL  COMMENT '姓名',
	`sex` varchar(2) DEFAULT '男' COMMENT '性别',
	`gradeid` int(10) NOT NULL COMMENT '年级',
	`birthday` datetime DEFAULT null COMMENT '出生日期',
	PRIMARY KEY(`id`) 
)ENGINE = INNODB DEFAULT CHARSET=utf8

ALTER TABLE `student` 
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)

以上操作都是物理外键, 数据库级别的外键, 不建议使用

  • 用程序实现

1.2,DML语言

DML语言: 数据库操作语言

  • insert
  • delete
  • update

1.3,添加

-- 插入语句 insert into 表名 {[字段1],[2]..} values ('值1'),('2'),(...)
INSERT into `grade` (`gradename`) VALUES ('大一');
-- 主键自增可以省略 , 不写表字段会按顺序匹配
INSERT into `grade` VALUES ('大一');

-- 插入多个字段
insert into `grade` (`gradename`) VALUES ('大二'),('大三');

insert into `student` (`name`,`sex`) VALUES ('张三',11),('李四',22);

insert into `student` VALUES (3,'小二','男',1,'2022-02-02'); -- 字段可以省略, 后面的值要和表一一对应

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

注意:

  1. 字段和字段之间使用逗号隔开
  2. 字段可以省略, 后面的值要和表一一对应
  3. 可以同时插入多条数据

1.4,修改

update 修改 UPDATE 表名 SET 字段=修改的值,… WHERE 条件1 AND 条件2

-- 修改ID为1 的name
UPDATE `student` SET `name` = '小明' WHERE `id` = 1;

-- 不加条件是修改表所有的数据
UPDATE `student` SET name = '小米';
-- 修改多个值
UPDATE `student` SET `name` = '小明', `sex` = '女' WHERE `id` = 1;

1.5,删除

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

-- 删除ID为1 的数据
delete from `student` where id = 1;
-- 删除表全部数据
delete from `student` 

TRUNCATE 清空表, 保留表结构

-- 情况student表
TRUNCATE `student`;

delete和truncate区别

  • 相同点: 都能删除数据, 保留表结构
  • 不同点:
    • truncate会重置自增数 计数器归零 , 不会影响事物

delete删除的问题

重启数据库的现象:

  • innodb 自增列会重1开始(存在内存中的, 断电即失)
  • MYISAM 继续从上一个自增量开始(存在文件中, 不会丢失)

drop table 表名 删除表, 不保留表结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值