SQL分类:
DDL 数据定义语言 用来定义数据库对象(数据库,表,字段)
DML 数据操作语言,用来对数据库表中的数据进行增删改
DQL 数据查询语言,用来查询数据库表中的记录
DCL 数据控制语言,用来创建数据库用户、控制数据库的访问权限
首先:
常用数据类型初识:
链接数据库:
mysql -u root -p
本笔记中[]内的内容为可选项
DDL详解:
一、数据库操作:
1、查询所有数据库:
show detabases;
2、查询当前数据库:
select database();
3、创建数据库:
create database[IF NOT EXISTS]数据库名[DEFAULT CHARSET 字符集】【COLLATE 排序规则】;
4、删除数据库:
drop database[IF EXISTS]数据库名;
5、使用数据库 :
use 数据库名;
二、表操作:
A、查询:
1、查询当前数据库所有表:
show tables;
2、查询表结构:
desc 表名
3、查询指定表的建表语句:
show create table 表名;
B、表创建:
create table 表名(
字段1 字段1类型[comment 字段1注释],
字段2 字段2类型[comment 字段2注释],
字段3 字段3类型[comment 字段3注释]
)[comment 表注释];
DDL数据类型:
主要分三类:数据类型、字符串类型、日期时间类型
其中浮点型需要注意:
double(加上小数点一共出现几位数,小数点的位数)
double (4,1)整体位数4,小数位数1
字符型:
char(10) 当前字符串能存储最多10个字符,未占用补空格
varchar()则不会
所以char()性能高,varchar()低
选数据类型时应该按需求设计
C、表修改:
添加字段:
alter table 表名 add 字段名 类型(长度)[comment 注释][约束];
修改字段:
1、修改数据类型:
alter table 表名 modify 字段名 新数据类型(长度);
2、修改字段名和字段类型:
alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注释][约束];
删除字段:
alter table 表名 drop 字段名;
修改表名:
alter table 表名 rename to 新表名;
删除表:
drop table[if exists] 表名;
删除指定表,并重新创建该表:
truncate table 表名;
DML详解:
1、添加数据(insert)
2、修改数据(update)
3、删除数据(delete)
一、添加数据:
1、给指定字段添加数据
insert into 表名(字段名1,字段名2,...)values(值1,值2,...);
2、给全部字段添加数据
insert into 表名 values(值1,值2,...);
3、批量添加数据
insert into 表名(字段名1,字段名2,...)values(值1,值2,..)(值1,值2,...);
insert into 表名 values(值1,值2,...),(值1,值2,...);
注意:
1、插入数据的时候,指定的字段顺序需要跟值的顺序一一对应
2、字符串和日期型的数据应该包含在引号中
3、插入的数据大小,应该在字段的规定范围内
二、修改数据:
update 表名 set 字段名1=值1,字段名2=值2,...[where 条件];
若是没有条件则全部修改
三、删除数据:
delete from 表名 [where 条件];
delete语句不能删除某一个字段的值
DQL详解:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表
having 分组后条件列表 order by 排序字段列表 limit 分页参数
一、基本查询:
1、查询多个字段:
select 字段1,字段2,字段3...from 表名;
select *from 表名;
2、设置别名
select 字段1[as 别名1],字段2[as 别名2]...from 表名;
select book_id as "id_book" from book;
select book_id "id_book" from book;
3、去除重复记录:
select distinct 字段列表 from 表名;
二、条件查询:
select 字段列表 from 表名 where 条件列表;
三、聚合函数:
将一列数据作为一个整体,进行纵向计算
常见的聚合函数:
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
语法:
select 聚合函数(字段列表) from 表名;
null值不参与所有聚合函数运算
四、分组查询:
语法:
select 字段列表 from 表名[where 条件]group by 分组字段名[having 分组后过滤条件];
where和having的区别:
1、执行的时间不同:where是分组之前进行过滤,不满足where的条件就不参与分组
而having是分组之后对结果进行过滤
2、判断条件不同:where不能对聚合函数进行判断,而having可以
五、排序查询:
语法:
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
六、排序方式:
asc:升序(默认值)
desc:降序
注意:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
七、分页查询:
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
分页查询是数据库方言,不同数据库有不同实现,mysql中是limit
如果查询的是第一页数据,起始索引可以省略,直接简写limit 10
DQL-执行顺序:
DCL详解:
管理用户权限
1、查询用户:
use mysql;
select * from user;
2、创建用户
create user ’用户名‘@’主机名‘ identified by ’密码‘;
3、修改用户密码:
alter user ’用户名‘@’主机名‘ identified with mysql_native_password by '新密码'
4、删除用户:
drop user'用户名‘@’主机名‘
权限控制:
1、查询权限:
show grants for ‘用户名‘@’主机名‘;
2、授予权限:
grant 权限列表 on 数据库名.表名 to ’用户名‘@’主机名‘;
3、撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名‘@’主机名‘;