2.5 修改删除表
2.5.1 修改
-- 修改表名alter TABLE TABLENAME_old RENAME as TABLENAME_new
alter TABLE teacher RENAME as teachers
-- 增加表字段alter TABLE TABLENAME ADD 字段名 列类型
alter TABLE teachers ADD sex CHAR(2)
-- 修改表字段 (重命名、修改约束)
-- ALTER TABLE TABLENAME MODIFY 字段名 列类型[]
ALTER TABLE teachers MODIFY sex VARCHAR(2) -- 修改列类型
-- ALTER TABLE TABLENAME CHANGE 字段名_旧 字段名_新 列类型[]
ALTER TABLE teachers CHANGE sex sexs VARCHAR(10) -- 修改列类型
-- 删除表字段ALTER TABLE TABLENAME DROP 字段名
ALTER TABLE teachers DROP sexs
- 用change可以修改字段类型和约束,要加上新字段名,新字段名可以和原来一样,modify只能修改字段类型
2.5.2 删除
-- 删除表(若存在则删除)不加可能会报错
DROP TABLE if EXISTS teachers
- 所有的创建和删除操作尽量加上判断,以免报错
- 字段名,使用飘包裹
- sql关键字大小写不敏感,建议小写
- 所有符号用英文
3. mysql数据管理
3.1 外键
- 创建表的时候,增加外键约束,进行物理上的关联,数据库级别的外键不建议使用。表操作时(删除、更新)存在干扰。
-- 定义外键key
-- 给这个外键添加约束CONSTRAINT(执行引用) REFERENCES
CREATE TABLE `student` (
`id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '学员ID',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '姓名',
`age` int(3) unsigned DEFAULT NULL COMMENT '年龄',
`user` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
`addr` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',
`gardeid` int(11) NOT NULL COMMENT '年级外键',
PRIMARY KEY (`id`),
key `FK_gardeid`(`id`), --本表那个列是外键
CONSTRAINT `FK_gardeid` FOREIGN key(`id`) REFERENCES `grade` (`id`)
-- 对本表的列加外键约束
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci AVG_ROW_LENGTH=3 KEY_BLOCK_SIZE=4
CREATE TABLE `grade` (
`id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
- 存在外键的表,先删除具有外键的表,在删除外键指向的表
- 创建表的时候,不加外键约束,创建完之后在添加
ALTER TABLE `student` ADD CONSTRAINT `FK_gardeid` FOREIGN key(`gardeid`) REFERENCES `grade` (`gid`);
-- ALTER TABLE TABLENAME ADD CONSTRAINT `外键名` FOREIGN key(`本表外键列`) REFERENCES `从表表名` (`从表外键列`);
3.2 DML语言
- 数据库意义:数据存储、数据管理
3.3 添加
insert INTO `TABLENAME`([字段1,字段2]) VALUES (值1,值2)
- 不写表字段,值会从第一列开始一一匹配,即使是id字段也会匹配,所以字段全不写值中要加ID值
- 一般写 添加语句,要将数据和字段匹配
-- 插入多行的值
insert INTO `grade`(`name`) VALUES ('初一'),('初二'),('初三');
insert INTO `student`(`name`, `gardeid`) VALUES ('王一',1),('王二',2),('王三',3);
- 字段之间用英文逗号隔开
- 字段可以省略,但要将数据值和字段匹配
- 可以同时插入多条数据,value后面多个小括号用英文逗号隔开
3.4 修改
- 修改数据一定要保证走索引,否则事务未提交的话会是表级锁
-- UPDATE `TABLENAME` set `COLUMN`='value' WHERE 条件;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ucI3vmuF-1651401070755)(E:\zkNote\typora-user-images\image-20220423185339670.png)]
- BETWEEN 条件 and 条件 //闭合区间
- 修改的数据库列尽量带上飘`
- value可以是函数或变量
UPDATE `student` set `user`=SYSDATE() ;
UPDATE `student` set `user`=CURRENT_DATE
3.5 删除
- delete:此命令是条件删除
-- DELETE FROM `TABLENAME` WHERE 条件
- TRUNCATE:此命令完全清空数据表,表结构和索引不会变
TRUNCATE `TABLENAME`
-
区别
-
相同点:都能删除数据,不会删除表结构
-
delete是dml语言,truncate是ddl语言(共性)truncate 清空表不能写条件
-
truncate是删除原表,并重新建立一张同样的无数据的新表,delete是逐条删除原表中的数据
-
truncate重新设置自增列,计数归0
-
truncate不会影响事物
-
delete删除问题,重启mysql服务,现象 存在在5.7 之前
-
innoDB:自增列会从1开始(存在内存中,断电即失)
-
MyISAM 继续从上个增量开始(存在文件中,不会丢失)
mysql表级查询操作见本专栏下篇
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123966.html