前言
本系列记录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不会影响事务