MySQL—常用查询语法

1.元数据查询

show databases;
show tables;
show create table table_name;

2.DDL语句

  • 建库建表
//建库
cretae database db_name;
//建表
 create table table_name(field1 field_type comment 'describe1', field2 field_type comment 'describe2');
//复制表
create table table_name select * from table_name2;
  • 表结构修改(alter)
//-------添加字段(alter table ... add ...)
			
//末尾追加字段
alter tabe table_name add field field_type;			
//首位添加字段
alter tabe table_name add field field_type first;			
//field2字段后添加字段
alter tabe table_name add field1 field_type after field2;

		
//--------修改字段(alter table ...modify|change ...)
			
//修改字段类型及位置
alter table table_name modify field field_type [after field2];
//修改字段名称和类型
alter table table_name change old_field new_field field_type;

		
//---------销毁字段(alter table ... drop ...)
alter table table_name drop field;

  • 表库销毁(drop)
//销毁字段(alter table ... drop ...)
alter table table_name drop field;
//表库销毁(drop)
库销毁: drop database db_name;
表销毁: drop table table_name;
表重命名: rename table old_name to new_name;

3.DML语句

  • insert(插入数据)
//单条插入
insert into table_name[(field1,field2)] values(v1,v2);
//批量插入
insert into table_name[(field1,field2)] values(v1,v2),(v3,v4);
//复制表数据插入
insert into table_name select * from table_name2;
  • delete(删除数据)
//删除数据
delete from table_name where ...
//清空表
truncate table table_name;
  • update(修改数据)
//更新字段值
update table_name set field=v1, field=v2 where ...

4.​​​​​DQL语句

  • 语句: select ... from ...  where ... group by ...  having ... order by ...  limit ...
    • sql逻辑执行顺序
      • from: 数据源,即来自那个表
      • on: join的关联逻辑
      • join: 连接表源
      • where: 过滤表数据
      • group by: 根据字段值分组
      • having: 根据分组后的聚合值过滤结果集
      • select: 查询
      • order by: 对结果集排序
      • limit: 截断结果集
    • 查询其他关键字
      • distinct: 去重
      • between: 在某个范围之间
      • in: 在某个集合中
      • union: 连接两个结果集(去重)
      • union all: 连接两个结果集
      • is not null: 匹配非空null值
      • and: 同时满足
      • or: 满足其一
  • 模糊查询: %通配符,_占位符
select * from table_name where field like '%tree%'
  • 关联查询
//内连接
select * from table_name1 t1, table_name2 t2 where t1.field = t2.field

select * from table_name1 t1 inner join table_name2 t2 on t1.field = t2.field where ...

//using(field)关联字段名必须相同
select * from table_name1 t1 inner join table_name2 using(field) where ...
 

外连接
select * from table_name t1 left join table_name t2 on t1.field = t2.field where ...

  • 嵌套查询
//in: 子查询结果集与主查询结果集做笛卡尔积后根据条件筛选
select * from table_name where field in (select field from table_name2)
//exists: 主查询遍历表每条记录去对子查询进行匹配,匹配上立即返回
select * from table_name t1 where exists (select field from table_name2 t2 where t1.field = t2.field)) )

5.数据完整性

  • 主键(primary key)
//创建表时指定主键
create table table_name(field1 field_type, field2 field_type, primary key(field) [auto_increment])
//添加主键约束
alter table table_name add primary key [PK_name] (field);
//添加主键约束
alter table table_name modify field field_type primary key [auto_increment];
//删除主键(主键自增先删除自增)
alter table table_name drop primary key;
  • 唯一键(unique)
//创建表时指定唯一约束
create table table_name(field1 field_type unique, field2 field_type )
//添加唯一键约束
alter table table_name add unique [UK_name] (field);
//添加唯一键约束
alter table table_name modify field field_type unique;
//删除唯一约束
alter table table_name drop index UK_name;
  • 外键约束(foregin key)
//----------添加外键约束
//创建表时指定外键
create table table_name(field1 field_typec, field2 field_type, cconstraint FK_field foreign key(field1) references ref_table(field2));
//添加外键
alter table table_name add foreign key [FK_name] (field1) references ref_table(field2);

//-----------删除外键约束
alter table table_name drop foreign key FK_name;
  • 非空约束(not null)
​​​​​​
//创建表指定非空约束
create table table_name(field1 field_type not null, field2 field_type)
//添加非空约束
alter table table_name modify field field_type not null;
//删除非空约束
alter table table_name modify field field_type;
  • 区别
    • 主键一张表只能有一个,可以作为其他表的外键,当然也可以创建联合主键,主键字段唯一,不可以为null
    • 唯一键时针对列的,一个表可以有多个唯一键,唯一键的列值不重复

6.存储过程(类似于开发语言中的方法)

  • 定义存储过程
// 参数int: 接受的输入参数, out:将查询结果通过into关键字赋给此参数,类似于返回结果
create procedure procedure_test(in in_id int, out out_name varchar(32))
begin
    select name from person where id = in_id
    into out_name;
end;
  • 调用存储过程
//参数列表必须对应, 输入参数传入具体的值, 对应的输出参数传入变量接收返回结果,且变量必须以@开头
call procedure_test(1, @name);
// 通过输处参数获取存储过程返回的结果
select @name;
  • 销毁存储过程
drop procedure procedure_name;

7.触发器

  • 定义触发器
// 触发器类型: insert,delete,update,一个触发器只能定义一种类型
// 触发时机: after,before,更新操作前或后
// NEW可代替虚拟表访问被插入的行.OLD可代替被虚拟表访问被删除的行,update使用OLD虚拟表访问更新前的数据,NEW虚拟表访问更新后的数据
create trigger trigger_name after|before insert|delete|update on table_name [for each row] select ...

//案例
create trigger trigger_test after insert on person for each row select new.id into @out
  • 销毁触发器
drop trigger trigger_name;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值