【MySQL知识】MySQL的外键和DML语言

前言

本系列记录MySQL从入门开始的知识点,本文介绍:MySQL的外键以及DML语言。


一、外键(了解即可)

  • 创建外键方式1:
-- 给student表添加外键,grade中的gradeid
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(2) NOT NULL DEFAULT '女' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) 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 `grade`(
	`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
	`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
	PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

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

  • 创建外键方式2:
    • 首先正常创建两张表:
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(2) NOT NULL DEFAULT '女' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE `grade`(
	`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
	`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
	PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
  • 然后用alter语句添加外键
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
ALTER TABLE `表名` ADD CONSTRAINT `约束名` FOREIGN KEY(`作为外键的列`) REFERENCES `外键所在的表`(`外键所在的字段`)

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

  • 数据库就是单纯的表,就好只用来存数据;
  • 以后要是想实现外键的关系,可以用程序去实现。

二、DML语言

1. 插入语句

  • 语法规则
INSERT INTO `表名`([字段名1,字段名2,...]) VALUES('值1'),(`值2`),(`值3`),......

INSERT INTO `grade`(`gradename`) VALUES('大四') --插入一条记录

INSERT INTO `grade`(`gradename`) VALUES('大三'),('大二')   --插入两条记录

INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES ('张三','aaaaaa','男')  --给不同字段插入一条数据

INSERT INTO `student`(`name`,`pwd`,`sex`) 
VALUES ('李四','aaaaddaa','男'),('王五','aadadaa','女')      --给不同字段插入多条数据
  • 注意事项:
    • 字段名是可以省略的,但是后面的值要一一对应;
    • 可以同时插入多条数据,VALUES后面的值需要使用逗号隔开VALUES (),()

2.修改语句

  • 语法规则
UPDATE 表名 SET=WHERE 条件
UPDATE `student` SET `name`='fanafan' WHERE `id`=1
UPDATE `student` SET `name`='王五',`email`='1456875@qq.com' WHERE id=2
  • 条件操作符
操作符含义
=,>,<,<=,>=与常规相同
!=,<>不等于
between…and…在某个范围(闭区间)
and.条件与
or条件或
UPDATE `student` SET `birthday`=CURRENT_TIME WHERE `name`='王五' AND sex='女'

3.删除语句

  • 语法规则
-- 删除数据,避免这样写,会全部删除
DELETE FROM `student1`
-- 删除指定数据
DELETE FROM `student` WHERE id=1
  • 如果想要清空表,使用下面的语句
TRUNCATE TABLE test

DELETE和TRUNCATE的异同
* 都能删除数据,不会删除表结构
* TRUNCATE会重新设置自增列,计数器归零;DELETE不会重置
* TRUNCATE不会影响事务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值