MySql语法概述

数据库概述

数据库就是存储和管理数据的仓库。
常见的数据库有关系型数据库和非关系型数据库。
关系型数据库就是平常使用的数据库,例如Oracle,Mysql等
非关系型数据库是使用键值对来存储数据,例如redis

MySql数据库

连接MySql数据库服务器

mysql -uroot -proot -h127.0.0.1 -P3306
-u 用户名
-p 密码
-h 连接的数据库ip
-P 连接的数据库端口

MySql数据库的增删查

1)新增数据库

create database if not exists mydb1 charset utf-8;  --创建mydb1数据库

2)删除数据库

drop database if exists mydb1;  --删除mydb1数据库

3)查询数据库

show databases;  --查看数据库服务器中的所有数据库
select database();  --查看已经进入的数据库
show create database mydb1;   --查看mydb1数据库的建库语句

MySql数据库对表的增删改查

1)新增user表

create table user(
	id int primary key,
	name varchar(20),
	addr varchar(40)
);

补充:新建表时会添加一些字段约束
1.主键约束(primary_key)
如果一个列添加了主键约束,那么这一列就是主键,主键的特点就是唯一且不能为空。
且一张表中只能有一列作为主键。
主键还经常与主键自增一同使用,主键自增(auto_increment)
2.非空约束(not null)
如果为一列添加了非空约束,那么这个列的值就不能为空,但可以重复。
3.唯一约束(unique)
如果为一列添加了唯一约束,那么这个列的指就必须唯一(即不能重复),但是可以为空。
4.外键约束
外键其实就是用于通知数据库中两张表中数据关系的列。这样数据库就会帮我们维护两张表中数据之间的关系
2)删除user表

drop table if exists user;

3)修改user表

--新增一列
alter table user add salary double;
--删除一列
alter table user drop salary;
--修改一列
alter table user modify name varchar(80);

补充:对表中的约束进行增删改

alter table user modify name varchar(40) not null;--在修改列时增删改
--但是在删除主键约束时有些不同
--若主键有自增,则需先删除主键自增
alter table user modify id int primary key;
alter table user drop primary key;

--对外键的新增,删除也需特殊操作
--新增外键
alter table user add constraint fk_user_emp foreign key(id) references emp(id); --fk_user_emp是为外键起的名称
--constraint fk_user_emp语句也可删除,mysql会自动为外键分配一个名字
--删除外键
show create table user;--首先查看user表的建表语句,找到外键的名称
alter table drop foreign key fk_user_emp;

4)查询表
1.查询表结构

desc user;

2.查询建表语句

show create table user;


MySql对表记录的增删改查

1)增加一条表记录
语法:insert into stu (列名1,列名2,列名3)value(值1,值2,值3);
当插入所有列时,列名可省略不写,但是值的个数及顺序必须与列名一致
2)删除表记录

delete from emp;

3)修改表记录

update emp set name='1111'

查询表记录

1)基础查询

select * from emp;

2)where语句查询

select * from emp where id=1;
select * from emp where id >1;
select * from emp where id<1;
select * from emp where id<>1;--不等于
select * from emp where id !=1;--不等于
select * from emp where id>=1;
select * from emp where id <=1;
select * from emp where id between 1 and 10;--区间查询,两边都是闭区间
select * from emp where name like '%杨%';--模糊查询

3)多行函数查询
常用多行函数
count(列名) 一列记录的数量
max(列名) 一列的最大值
min(列名) 一列的最小值
sum(列名) 一列值的总和
avg(列名) 一列值的平均值
补充:
1.多行函数不能用于where子句中。
2.多行函数与是否分组有关,分组与否会直接影响多行函数的结果。
3.多行函数在统计时会自动过滤null值
注意:

  • 多行函数和是否分组有关,如果查询结果中的数据没有经过分组,默认整个查询结果是一个组,多行函数就会默认统计当前这一个组的数据。产生的结果只有一个。

  • 如果查询结果中的数据经过分组(分的组不止一个),多行函数会根据分的组进行统计,有多少个组,就会统计出多少个结果


4)分组查询
group by

select max(salary) from emp group by gender; --按照姓别分组,并查询出每组薪资的最大值

5)排序查询
order by

select * from emp order by id;--按照id进行排序  asc升序(由低到高),desc降序(由高到低)

6)分页查询
limit (查询页数-1)*每页查询笔数,每页查询笔数(MySql特有的分页查询方式)

select * from emp limit 0,3;----每页查询3条,显示第一页
select * from emp limit 3,3;----每页查询3条,显示第二页
select * from emp limit 6,3;----每页查询3条,显示第三页

7)多表查询

select * from dept inner join emp on dept_id=dept.id;-------内连接查询
select * from dept left join emp on dept_id=dept.id;--------左外连接查询
select * from dept right join emp on dept_id=dept.id;-------右外连接查询
--三者的区别
--内连接查询,会去除两表中多余的值
--左外连接查询,以左边表为准,即使右边表没有对应的记录,也会查询出来
--右外连接查询,以右边表为准,即使左边表没有对应的记录,也会查询出来

8)子查询
将一张表中查询出来的结果做为另一张表的查询条件

补充内容:where和having的区别
1)where是在分组前对记录进行筛选,并且where子句中不能使用多行函数且不能使用列别名,但是可以使用表别名
2)having是在分组后对记录进行筛选,并且having子句中可以使用多行函数,列别名,表别名

注意:
SQL语句的书写顺序

select * | 列名   --要查询哪些列
from 表名         --要查询哪些表
where 条件        --筛选条件
group by 列名     --按照哪一列分组
having 条件       --分组后筛选
order by 列名     --排序
limit  起始笔数,查询笔数   --分页

sql语句的执行顺序

from 表名    --确认要查询哪些表
where 条件   --通过条件进行筛选
select * | 列名  --确定要查询哪些列
group by 列名    --确定根据哪些列进行分组
having 条件       --分组后再进行筛选
order by 列名     --排序
limit  起始笔数,查询笔数   --分页

补充:其他常见函数
curdate() 获取当前日期,格式为年月日
curtime() 获取当前时间,格式为时分秒
sysdate()/now 获取当前日期+时间,格式为年月日时分秒
year(date) 年
month(date) 月
day(date) 日
hour(date) 时
minute(date) 分
second(date) 秒
concat(s1,s2) 将两个字符串连接成一个字符串
concat(x,s1,s2) 将两个字符串连接成一个字符串,并在两个字符串中插入字符x



MySql数据类型

数值类型

1)tinyint 占用1个字节,相当于byte
2)smallint 占用2个字节,相当于short
3)int 占用4个字节
4)bigint 占用8个字节,相当于long
5)float 占用4个字节
6)double 占用8个字节


字符类型

1)char(n)定长字符串,最长255个字符。
特点:即使插入字符不足n个字符,也会占用n个字符,浪费空间,但是存储速度较快。适合存储定长的数据
2)varchar(n)变长自符串,最长不超过65535个字节,但是一般超过255个字符,就会使用text字符
3)text,大文本类型


日期类型

1)date 年月日
2) time 时分秒
3)timestamp 时间戳

原文地址:https://www.cnblogs.com/planted/p/15186943.html