MySQL语法篇

1. SQL语句的分类

SQL语句可分为三类,分别是:

DDL—数据定义语言(Data Define Language):create(创建),alter(修改),drop(删除),TRUNCATE(截断),RENAME(重命名);
DML—数据操纵语言(Data Manipulation Language):select(查询),delete(删除),update(更新),insert(新增);
DCL—数据控制语言(Data Control Language):grant(添加权限),revoke(回收权限);

2. 数据库操作

注意:使用DDL语言时,必须在动词后跟上数据库对象名词(例如:TABLE、VIEW、INDEX、SCHEMA、TRIGGER等)

数据库的链接

# mysql -h 127.0.0.1 -u root -p

常用的参数解释

-A 不预读数据库信息,提高连接和切换数据库速度,使用--disable-auto-rehash代替
--default-character-set 使用的默认字符集
-e 执行命令并退出
-h 主机地址
-p 连接到服务器时使用的密码
-P 连接的端口号

创建数据库:

create database test

查看数据库:

show databases;

选择数据库:

use mysql;

删除数据库:

drop database test1;

3. 表操作

创建表:

create table student(
id int auto_increment primary key,
name varchar(50),
sex varchar(20),
date varchar(50),
content varchar(100)
)default charset=utf8;

语法解析(下文MySQL列属性单独解析):
如果不想字段为NULL可以设置字段的属性为NOT NUL,在操作数据库时如果输入该字段的数据为NULL,就会报错.
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1.
PRIMARY KEY关键字用于定义列为主键.可以使用多列来定义主键,列间以逗号分隔.
ENGINE 设置存储引擎,CHARSET 设置编码, comment 备注信息.

查看表的创建语句

show create table 表名;

查看表的结构

desc 表名;

删除数据表(删)

drop table [if exists] 表名;
例如: drop table if exists test;

alter 修改表名(改)

alter table 旧表名 rename to 新表名;

增加表字段

alter table 表名 add 新列名 字段类型 [字段选项];
例如: alter table test add name char(10) not null default '' comment '名字';

修改字段类型

alter table 表名 modify 字段名 新的字段类型 [新的字段选项];
例如: alter table test modify name varchar(100) not null default 'admin' comment '修改后名字';

change 重命名字段

alter table 表名 change 原字段名 新字段名 新的字段类型 [新的字段选项];
例如: alter table test change name username varchar(50) not null default '' comment '用户名字';

修改字段排序

/*关键字:first 修改字段排序,把某个字段放在最前面*/
alter table 表名 modify 字段名 字段类型 [字段选项] first;
例如: alter table test modify name varchar(100) not null default 'admin' comment '最前面' first;

/*关键字:after 修改字段排序,字段名1放在字段名2的后面*/
alter table 表名 modify 字段名1 字段类型 [字段选项] after 字段名2;
例如: alter table test modify name varchar(100) not null default 'admin' comment 'time字段后面' after time;

4. 数据操作

插入数据(增)

insert into 表名(字段列表) values(值列表);
例如:
insert into user(id,name,age) values(1,'admin_a',50);
insert into user(name) values('admin_b');

查询数据(查)

select name from user where age>0;--查name字段,age大于0

删除数据(删)

delete from 表名[删除条件];
例如: delete from user where age<1;--删除age小于1数据

修改数据(改)

update 表名 set 字段1=新值1,字段n=新值n [修改条件];
例如: update user set age=100 where name='admin_a';

排序

select * from user order by age ;
select * from user order by age asc;
select * from user order by age desc,id desc;

限制记录数

select * from emp limit 100;//查询100条数据
select * from emp limit 100,10;//查询从第100条数据之后的10条数据

聚合

select count(id) from emp ; //count():记录数
select sum(sal) from emp ; //sum(总和)
select max(sal) from emp ; //max():最大值
select min(sal) from emp ; //min():最小值
select avg(字段名) from 数据表 ; //avg():平均值

group by分组

select count(name) as count,sex from user group by sex;//按性别分组,并列出性别和数量

//having 对分组结果二次过滤
select count(name) as count,sex from user group by sex having count > 1;

5. 表连接

  • left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录;
  • right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录;
  • inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行;
  • full join:外连接,返回两个表中的行:left join + right join;
  • cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

内连接
只返回两个表中连接字段相等的行

select * from user as A , tb_account as B where A.id=B.id;

查询结果
此处输入图片的描述

左外连接
包含左表中所有的记录以及右表中连接字段相等的记录

select * from user as A left join tb_account as B on A.id=B.id;

查询结果
此处输入图片的描述

右外连接
包含右表中所有的记录以及左表中连接字段相等的记录

select * from user as A right join tb_account as B on A.id=B.id;

此处输入图片的描述

嵌套查询

//in, not in 
//当需要使用里面的结果集的时候必须用in();
select * from user where id in (select id from tb_account);
select * from user where id not in (select id from tb_account);

//exists , not exists
//当需要判断后面的查询结果是否存在时使用exists();
select * from user where exists (select id from tb_account where username='niran');
select * from user where not exists (select id from tb_account where username='niran');

记录联合

//union:返回去重之后的结果
select * from user union select * from user where name='2';

//union all:返回所有结果
select * from user union all select * from user where name='2';
-------------本文结束感谢您的阅读-------------