*SQL语言分类:1、DDL(定义数据库的对象:数据库、表、列 等)2、DML(表格的增删改)3、DQL(表格查询)4、DCL(定义数据库的访问权限和安全级别)
================================================================================================
DDL:
1.操作数据库:CRUD
a、C(create):创建
*创建一个数据库:
create database [if not exists] 数据库名称 ;
*创建一个数据库并制定字符集utf8:
create database [if not exists] 数据库名称 character set utf8;
b、R(retrieve):查询
*查询所有数据库名称:
show databases ;
*查看某个数据库的字符集(查询某个数据库的创建语句):
show create database 数据库名称 ;
c、U(update):修改
*修改数据库字符集:
alter databases 数据库名称 character set 字符集名称 ;
d、D(delete):删除
*删除某个数据库:
drop database [if not exists] 数据库名称 ;
e、使用数据库
*查询正在使用的数据库的名称:
select database() ;
*使用数据库:
use 数据库名称 ;
2.操作表和列:CRUD
a、C(create):创建
*创建一个表
create table 表名称(
列名1 数据类型1,
列名1 数据类型2,
...
);
/
数据类型:int 整数类型
double 小数类型
date 日期 yyyy-mm--dd
datetime 日期加时间 yyyy-mm-dd HH:mm:ss
timestamp 时间错类型 yyyy-mm-dd HH:mm:ss 如果不赋值,默认值为null,默认使用当前系统时间
varchar 字符串类型 varchar(n) n代表最多几个字节,多余n会报错
///
*复制一个表
create table 表名称 like 被复制的表名称;
b、R(retrieve):查询
*查看某个数据库中所有的表
show tables;
*查看某个表的结构
desc 表名称;
c、U(update):修改
*修改表的名称
alter table 表名称 rename to 新的表名称;
*修改表的字符集
alter table 表名称 character set 字符集名称;
*添加一列
alter table 表名称 add 列名称 数据类型 ;
*修改列名称 类型
alter table 表名称 change 列名称 新的列名 数据类型;
alter table 表名称 modify 列名称 新的数据类型 ;
*删除一列
alter table 表名称 drop 列名称 ;
d、D(delete):删除
*删除某个表:
drop table [if exists] 表名称;
================================================================================================
DML:
1.添加数据:
insert into 表名称(列名1,列名2...列名n)values(值1,值2...值n);
注:如果不定义列名,默认给所有列添加值。
2.删除数据:
delete from 表名 where 条件 ;
注:如果不写条件,就删除表中所有数据;
如果要删除操作,建议使用:truncate table 表名称; 效率高,先删除表,然后创意一张一样的空表。
3.修改数据:
update 表名 set 列名1 = 值1 ,列名2 = 值2 ,... where 条件 ;
注:如果不写条件,则修改表中所有数据。
================================================================================================
DQL:
1.基础查询
* 查询表中的记录
select
列名称1,列名称2,... 列名称n (*)
from 表名称
where 条件
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定;
注:如果想查看表所有记录,可以用*代替列名称: select * from 表名称 ;
* 去除查询结果中的重复值
select distinct 列名称 from 表名称 ;
* 替换null内容(举例替换成0)
select ifnull(列名称,0) from 表名称 ;
* 起别名
select 列名称 (as) 别名 from 表名称 ;
注:as可以省略
1.2.条件查询
* where 子句后跟的条件
*运算符
>、<、<=、>=、=、<>
between...and...
in(集合)
like :模糊查询 _表示任意字符 %表示多个字符
is null
and 或 &&
or 或 ||
not 或 !
1.3.排序查询
select *from 表名称 where order by 排序字段1 排序方式1 ,排序字段2 排序方式2 ... ;
注:排序方式两种:ASC(升序) 和 DESC (降序)
如果不写默认升序;
如果有多个排序字段,只有当第一个字段结果相同的部分,才会执行第二个字段进行排序。
1.4.聚合函数:将一列数据作为一个整体,进行纵向计算
count :计算个数
max: 计算最大值
min:计算最小值
sum: 计算和
avg: 计算平均值
注:语法—— select 聚合函数名(列名称)from 表名称;
聚合函数计算会排除null值
1.5.分组查询
语法:select 聚合函数名(列名称) from 表名称 group by 分组字段 ;
1.6.分页查询
语法:select * from 表名称 limit 开始的索引 , 每页查询的条数;
注:开始的索引 = (当前页码-1)* 每页查询的条数
分页操作是一个“方言”,不同类型的数据库,表达方式不用
1.7.约束:对表中的数据进行规定,保证数据的正确性和完整性。
* 主键约束 : primary key
注:主键非空且唯一
创建表时添加约束:create table 表名称(id int primary key,name varchar(20));
创建表结束后添加约束:alter table 表名称 modify int id primary key ;
删除主键约束:alter table 表名称 drop primary key;
* 自动增长 :auto_increment
创建表时添加自动增长:create table 表名称(id int auto_increment,name varchar(20));
创建表结束后添加约束:alter table 表名称 modify int id auto_increment;
删除自动增长:alter table 表名称 modify int id ;
* 非空约束 : not null
创建表时添加约束:create table 表名称(id int not null,name varchar(20));
创建表结束后添加约束:alter table 表名称 modify int id not null ;
删除非空约束:alter table 表名称 modify int id ;
* 唯一约束 : unique
创建表时添加约束:create table 表名称(id int unique,name varchar(20));
创建表结束后添加约束:alter table 表名称 modify int id unique ;
删除唯一约束:alter table 表名称 drop index id ;
* 外键约束 : foregin key
创建表时添加约束:
create table 表名称(
...
外键列名称 数据类型,
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
创建表结束后添加约束:
alter table 表名称 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称);
删除外键约束:alter table 表名称 drop forigen key 外键名称 ;
*级联操作
1.添加级联操作:
create table 表名称(
...
外键列名称 数据类型,
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)on update cascade on delete cascade ;
);
2.分类
级联更新:on update cascade
级联删除:on delete cascase
2.多表查询
2.1 查询语法:
select
列名列表
from
表名列表
where
条件
*笛卡尔积:有两个集合A,B。取这两个集合的所有组成情况。要完成多表查询,需要消除无用数据。
2.2 内连接查询
*隐式内连接:使用where条件消除无用数据
*显式内连接:
select 字段列表 from 表名1 [inner] join 表名2 on 条件
2.3 外连接查询
*左外链接:select 字段列表 from 表1 left [outer] join 表2 on 条件;
查询的是左表所有的数据及其交集部分
*右外链接:select 字段列表 from 表1 right [outer] join 表2 on 条件;
查询的是左表所有的数据及其交集部分
3.事务
3.1事务的基本介绍
*概念:如果多个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
*操作步骤:
1.开启事务:start transaction;
2.回滚:rollback;
3.提交:commit;
注意:MySQL中一条SML会自动提交一次事务,如果手动谢了开启事务,必须写提交,才会提交事务
Oracle数据库是默认需要手动提交的
*查看事务的默认提交方式:select @@autocommit; -- 1 代表自动提交 --0 代表手动提交
*修改默认提交方法:set @@autocommit = 0;
3.2事务的四大特征:
a 、原子性:是不可分割的最小单位,要么同时成功,要么同时失败。
b、持久性:当事务提交或者回滚后,数据库会持久化的保存数据。
c、隔离性:多个事务之间,相互独立。
d、一致性:事务操作前后,数据总量不变
================================================================================================
DCL:
1.管理用户
*添加用户: create user '用户名'@'主机名' identified by '密码';
*删除用户:drop user '用户名'@‘主机名’;
*修改用户密码:set passward for '用户名'@‘主机名’=password('新密码');
*查询用户:use mysql; -- 切换到mysql数据库
select *from user; -- 查询USER表
注:通配符 % 表示可以在任意主机访问使用数据库
2.权限管理
*查询权限:show grants for '用户名'@‘主机名’;
*授予权限:grant 权限列表 on 数据库名.表名 to '用户名'@‘主机名’;
*撤销权限: revoke 权限列表 on 数据库名.表名 to '用户名'@‘主机名’;