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.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 表名 删除表, 不保留表结构