MySQL 8.0 语法记录

SQL又杂又烦,记不住,网上搜到的语句还未必正确。这里做一个Record

基本操作

数据库操作

数据表操作

create index [索引名] on [表名]([列名]);				/* 以选定列为索引信息,建立普通索引 */

create view [视图名] as [select子句];				/* 建立视图 */
	-- 语法上有点类似于使用临时派生表, select出的东西当作一个视图

数据行操作

insert into [表名] values ([对应数据]) 				/* 插入数据(对应数据需按顺序全部填写) */
insert into [表名]([列名]) values ([对应数据]) 			/* 插入数据(部分列数据) */

update [表名] set [待修改列名]=[修改值] where [条件,where子句选择行]	/* 更新行中某数据 */

delete from [表名] where [条件,where子句选择行]			/* 删除行数据 */

数据列操作

desc [表名];							/* 查看列 */
alter table [表名] add [列名+完整描述] [具体位置]; 			/* 插入列 */
alter table [表名] drop [列名]; 					/* 删除列 */
alter table [表名] modify [列名+完整描述] [具体位置];		/* 移动列的位置 */
	-- e.g.
	-- alter table user_account modify Permission tinyint not null unsigned after CodeName;
alter table [表名] modify [列名] [新描述];			/* 修改列属性 */
alter table [表名] change [列名] [新列名] [新描述];		/* 修改列名字+属性 */
	-- 列中数据不会被重置(不管是改名字、属性还是约束)

alter table [表名] add unique([列名]);		/* 给已有表某列添加约束 */
/* 解释 */
[具体位置] : after [列名] | first
[列名+完整描述] : 完整描述包括:类型、约束等,例如 Permission tinyint not null unsigned
在操作(如 add drop)后也可再多写一个 column

进阶操作

一些非直接的选择操作

1.获取表c_table中a字段最大的两个数字: 可以排序后限制输出,使用order by和limit

select a from `c_table` order by a desc limit 2;

2.使用临时派生表(记得,必须提供别名Every derived table must have its own alias

3.update操作的条件又对目标表进行了select,则需要将该select外包一层才行

设置变量

触发器

delimiter $$
create trigger [触发器名] /* 命名规则trig_[表名]_[属性名]_[触发含义]_[触发行为],如trig_teacher_age_lowest_i */
[before/after] [insert/update/delete] on [表名]
[for each row]	/* 行级:sql影响的每一行都会执行; 语句级:单条sql一次 */
begin
	statement
end $$
delimiter ;

常用搭配语句:异常报错

signal sqlstate [异常编解码,字符串] set message_text=[异常信息,字符串]

存储过程

posted @ 2022-10-15 19:41  Xlucidator  阅读(155)  评论(0编辑  收藏  举报