方式一,在创建表的时候,增加约束(麻烦,比较复杂)
CREATE TABLE `grade`(
`id` INT(2) NOT NULL AUTO_INCREMENT COMMENT ‘年级id‘,
`gradeName` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB CHARSET=utf8
--学生表的gradeid,要引用年级表的id
--定义外键key
--给这个外键添加约束(执行引用),REFERENCES 引用
CREATE TABLE `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号‘,
`name` VARCHAR(8) NOT NULL DEFAULT ‘匿名‘ COMMENT ‘姓名‘,
`pwd` INT(6) NOT NULL DEFAULT ‘123456‘ COMMENT ‘密码‘,
`sex` VARCHAR(2) NOT NULL DEFAULT ‘女‘ COMMENT ‘性别‘,
`birthday` DATETIME DEFAULT NULL COMMENT ‘出生日期‘,
`gradeid` INT(2) NOT NULL COMMENT ‘年级id‘,
`email` VARCHAR(20) DEFAULT NULL COMMENT ‘邮箱‘,
PRIMARY KEY(`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`id`)
)ENGINE=INNODB CHARSET=utf8
删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)
方式二:创建表成功后,添加外键约束
CREATE TABLE `grade`(
`id` INT(2) NOT NULL AUTO_INCREMENT COMMENT ‘年级id‘,
`gradeName` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB CHARSET=utf8
--学生表的gradeid,要引用年级表的id
--定义外键key
--给这个外键添加约束(执行引用),REFERENCES 引用
CREATE TABLE `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号‘,
`name` VARCHAR(8) NOT NULL DEFAULT ‘匿名‘ COMMENT ‘姓名‘,
`pwd` INT(6) NOT NULL DEFAULT ‘123456‘ COMMENT ‘密码‘,
`sex` VARCHAR(2) NOT NULL DEFAULT ‘女‘ COMMENT ‘性别‘,
`birthday` DATETIME DEFAULT NULL COMMENT ‘出生日期‘,
`gradeid` INT(2) NOT NULL COMMENT ‘年级id‘,
`email` VARCHAR(20) DEFAULT NULL COMMENT ‘邮箱‘,
PRIMARY KEY(`id`)
)ENGINE=INNODB CHARSET=utf8
--创建表的时候,没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`id`)
--ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (作为外键的列) REFERENCES 哪个表(哪个字段)
以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰,这里了解即可)
最佳实践
数据库意义:存储数据,数据管理
DML语言:数据管理操作语言
insert
--insert插入语句
--由于主键自增,可以省略(如果不写表的字段,要一一对应)
INSERT INTO `grade`(`gradeName`)VALUES(‘大一‘)
--一般写插入语句,一定要将数据和字段一一对应
--插入多个字段
INSERT INTO `grade`(`gradeName`)VALUES(‘大二‘),(‘大三‘),(‘大四‘)
语法:INSERT INTO 表名([字段1],[字段2],[字段3]...)VALUES(‘值1‘,‘值2‘,‘值3‘...),(‘值1‘,‘值2‘,‘值3‘...),(‘值1‘,‘值2‘,‘值3‘...)...
注意事项:
update
--修改班级名,带了条件
UPDATE `grade` SET `gradeName` = ‘大五‘ WHERE `id` = 1
--修改班级名,不带条件,会改动表中该列所有数据
UPDATE `grade` SET `gradeName` = ‘大六‘
--修改多个属性,中间用,隔开
UPDATE `student` SET `name` = ‘张三‘ , `pwd` = ‘aaaaa‘ ,`sex` = ‘女‘ WHERE `id` = 1
--语法
--UPDATE 表名 SET colnum_name = value , [colnum_name = value,.... ] where [条件]
条件:where子句 中的运算符
操作符会返回 布尔值
操作符 | 含义 |
---|---|
= | 等于 |
<>或!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
BETWEEN.....AND.... | 在某个范围内,闭区间 |
AND | 并且 |
OR | 或者 |
--通过多个条件定位数据
UPDATE `student` SET `name` =‘武松‘ WHERE `id` BETWEEN 1 AND 3 AND `sex` =‘男‘
--语法
--UPDATE 表名 SET colnum_name = value , [colnum_name = value,.... ] where [条件]
注意:
UPDATE `student` SET `name` =‘武松‘ ,`birthday`=CURRENT_TIME WHERE `id` BETWEEN 1 AND 3 AND `sex` =‘男‘
delete
语法:DELETE FROM 表名 [WHERE 条件]
--删除数据(避免这样写,会全部删除)
DELETE FROM `student`
--删除指定数据
DELETE FROM `student` WHERE `id` = 3
TRUNCATE命令
作用:完全清空一个数据库的表中的数据,表的结构和索引约束不会变
--清空表
TRUNCATE `student`
DELETE FROM `student`--也能清空表
delete和TRUNCATE清空表的区别
了解即可:delete删除数据库表之后,重启数据库,会出现以下现象
原文:https://www.cnblogs.com/zgmzbhqa/p/13557835.html