MySQL自娱—4.DML语言

数据操作语言DML——Data Manipulation Language

用于数据存储和数据管理,主要有INSERT,UPDATE,DELETE


插入语句 insert

- 语法
| insert into 表名(字段名1,字段名2) values (值1,值2);
| insert into 表名(字段名1,字段名2) values (名1值1,名2值1),varlues(名1值2,名2值2);

- 注意事项:
| 字段和字段之间使用英文逗号隔开
| 字段是可以省略的,但是后面的值必须要一一对应,不能少
| 可以同时插入多条数据,values后面的值需要使用","隔开(语句2)

修改语句 update

- 语法
| update 表名 set 列名1=新值1,列名2=新值2 where 条件;

- 注意事项:
| colnum_name是数据库的列,尽量带上``

删除语句 delete

- delete from 表名 where 条件;

清除命令 truncate

- 注意:truncate是DDL语言

- truncate 表名;   // delete 表名; 都是清除一张表的操作

- delete和truncate相同点
| 都能删除数据,都不会删除表结构

- delete和truncate不同点
| truncate 重新设置自增列 自增归0
| truncate 不会影响失误
| truncate 是删除原表,并创建一张同样结构的空表;delete是逐条删除原表中数据

- delete不会影响自增,但无法重置;mysql8里delete会重置。

- delete删除后,重启数据库:
| InnoDB 自增列会从1开始 (存在内存当中的,断电即失)
| MyISAM 继续从上一个自增量开始 (存在文件中的,不会丢失)

拓展:外键

--- 实际工作中推荐使用设计范式+反范式。外键不好维护,不推荐使用。---

- 创建一个年级表
| mysql> 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;

- 删除上一篇创建的student表
| drop table if exists student;

- 重新创建student表,添加外键约束
| mysql> CREATE TABLE IF NOT EXISTS `student` (
|      > `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
|      > `passwd` VARCHAR(20) NOT NULL COMMENT '密码',
|      > `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
|      > `sex` CHAR(1) NOT NULL DEFAULT '女' COMMENT '性别',
|      > `birthday` DATETIME DEFAULT NULL COMMENT '生日',
|      > `gradeid` INT(10) NOT NULL COMMENT '学生id',
|      > `address` VARCHAR(100) DEFAULT NULL COMMENT '住址',
|      > `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
|      > PRIMARY KEY (`id`),
|      > KEY `FK_dradeid` (`gradeid`),
|      > CONSTRAINT `FK_gradeid` foreign key (`gradeid`) references `grade` (`gradeid`)
|      > )ENGINE=INNODB DEFAULT CHARSET=utf8;
|
| # constraint 约束(后边应该跟的是约束名,自己起)
| # foreign key 设置外键
| # references 表名(字段名);关联哪个表
| # 这种方式增加外键过于麻烦

- 另外一种方式在图形化界面直接在创建好的表添加外键关系

- 主键pk_,唯一键uk_,外键fk_

- 给没有外键的表添加外键约束
| mysql> alter table `student` 
|      > add constraint `fk_gradeid` foreign key(`gradeid`) 
|      > references `grade` (`grdeid`);
| 

- 公式:
|  mysql> alter table 表 
|       > add constraint 约束名 foreign key(作为外键的列) 
|       > references 被引用的表(被引用表的引用字段)

# 以上的操作都是物理外键,数据库级别的外键,不推荐使用!
# 除了维护麻烦,物理外键还可能导致死锁、性能下降
# 数据库最佳方式就是单纯的表,只用来存数据,只有数据和字段
# 想使用多张表,想使用外键用程序去实现

- 我就觉得我一直提倡的方式是正确的
posted @ 2022-01-07 20:07  梵高de画笔  阅读(36)  评论(0)    收藏  举报