目录:
引言:以下
SQL
语句均为MySQL
的实例,其他关系型数据的SQL与此会略有区别,请大家注意!😁
如果想要 安装MySQL,可以看这篇帖子👉 https://blog.youkuaiyun.com/SuperCodeZhy/article/details/143773796
零:SQL中的9大核心动词
- 数据定义:
create
、drop
、alter
- 数据查询:
select
- 数据操纵:
insert
、update
、delete
- 数据控制:
grant
、revoke
提示1:下面所有的演示为了方便大家理解,作者使用了部分中文,大家在实际编写
SQL
中,请更换成自己需要的英文。
提示2:以下内容中带有
[ ]
的地方,均表示可以省略的内容;带有|
的地方,均表示或
的意思;#
后面是注释
。
一:数据库 database
-
创建数据库:
create database 数据库名;
-
删除数据库:
drop database 数据库名;
-
查看所有库:
show databases;
-
使用某个库:
use 数据库名;
-
知识点:创建和删除 数据库 时,可以在
数据库名
前面添加if exists
或if not exists
进行判断
二:模式 schema
-
创建模式:
create schema [模式名] authorization 用户名;
# 如果省略模式名,则模式名为用户名 -
删除模式:
drop schema 模式名 cascade | restrict;
# cascade(级联) 和 restrict(限制) 必须2选1
三:表 table
-
创建表:
create table 表名( 字段名 数据类型 [字段约束], ... , [表约束] );
-
删除表:
drop table 表名;
-
查看表结构:
desc | describe 表名;
-
查看所有表:
show tables;
-
创建临时表:
create temporary table 表名 ( 查询语句 );
-
知识点:创建和删除 表 时,可以在 表名 后面添加
if exists
或if not exists
进行判断 -
知识点:约束分为
列级完整性约束
和表级完整性约束
。
若表的主码是由多个属性构成的,则必须作为表级完整性约束进行定义,应写在最后面。
创建表时常用的约束 | 中文释义 |
---|---|
unsigned | 无符号 |
not null | 非空值 |
default | 默认值 |
comment | 字段说明 |
primary key | 主键 |
foreign key | 外键 |
unique | 唯一 |
constraint | 约束 |
references | 引用 |
cascade | 级联 |
restrict | 限制 |
index | 索引 |
using | 使用 |
四:更改 alter
-
修改表名:
alter table 原表名 rename 新表名;
-
添加新列:
alter table 表名 add 新列名 数据类型 [约束];
-
删除旧列:
alter table 表名 drop 列名 [约束];
-
修改旧列:
alter table 表名 change 原列名 新列名 数据类型 [约束];
-
添加主键:
alter table 表名 add primary key(列名);
-
删除主键:
alter table 表名 drop primary key;
# 自增的主键不能删除 -
添加外键:
alter table 外表名 add constraint 外键约束名 foreign key (外键列名) references 主表名 (主键列名);
-
删除外键:
alter table 外表名 drop foreign key 外键约束名;
-
添加复合主键:
alter table 表名 add primary key( 列名1, 列名2, ... );
五:插入 insert
-
插入单条数据:
insert into 表名 (列名1, 列名2, ...) values ( 值1, 值2, ...);
-
插入多条数据:
insert into 表名 (列名1, 列名2, ...) values ( 值1, 值2, ...), ( 值1, 值2, ...), ...;
-
插入或更新数据:
replace into 表名 (列名1, 列名2, ...) values ( 值1, 值2, ...);
-
将查询结果插入到新表中:
create table 表名 ( 查询语句 );
六:删除 delete
-
选择性删除:
delete from 表名 where 条件;
# 自增列不会重新编号 -
无条件删除:
truncate table 表名;
# 自增列会重新编号
七:更新 update
-
无条件修改:
update 表名 set 列名1=值1, 列名2=值2, ...;
# 整个列的数据都会被修改 -
少条件修改:
update 表名 set 列名1=值1, 列名2=值2, ... where 条件;
-
多条件修改:
update 表名 set 列名1=值1, 列名2=值2, ... where 条件1 and 或 or 条件2 ...;
-
数值型修改:
update 表名 set 列名=列名 + 或 - 数值 where 条件 ...;
-
字符型修改:
update 表名 set 列名='字符串' where 条件 ...;
八:查询 select
-
查询所有列:
select * from 表名;
-
条件查询所有列:
select * from 表名 条件...;
-
查询部分列:
select 列名1, 列名2, ... from 表名 条件...;
-
给定列别名查询:
select 列名1 as 别名1, 列名2 as 别名2, ... from 表名 where 条件...;
-
给定表别名查询:
select 新表名.列名1, 新表名.列名2, ... from 表名 as 新表名 where 条件...;
-
in子查询:
select 列名1, 列名2, ... from 表名 where in (select查询语句 或 值1,值2, ... );
-
区间查询:
select 列名1, 列名2, ... from 表名 where 列名 between 值1 and 值2;
-
数值型合并查询:
select 列名1 + 列名2, ... as 新列名 from 表名 where 条件...;
-
空值/非空值查询:
select 列名1, 列名2, ... from 表名 where 列名 is null 或 is not null;
-
将查询结果插入某个表中:
insert into 插入表名(列名1, 列名2, ...) (select列名1, 列名2, ... from 查询表名);
-
综合查询:
select 列名/表达式/函数/常量/* [as 别名] from 表名 [as 别名] where 条件 group by 列名 [having 条件] order by 列名 [asc | desc] limit ...;
-
知识点1:在
select
后面跟distinct
就可以去除重复的查询结果 -
知识点2:
group by
与where
条件语句结合使用时,where
在前,group by
在后 -
知识点3:使用
having
的前提是分组,即having
只能用在group by
后面,对分组后的结果进行筛选 -
知识点4:
where
后的条件表达式里不允许使用聚合函数
,而在having
后可以使用聚合函数
知识点5:当一个查询语句同时出现
where
、group by
、having
、order by
、limit
的时候,执行顺序如下:
① 执行 where ...
对全表数据进行条件筛选,返回 第1个结果集
② 针对 第1个结果集
使用 group by ...
进行分组,返回 第2个结果集
③ 针对 第2个结果集
中的每一组数据进行 select ...
,有几组就执行几次查询,之后返回 第3个结果集
④ 针对 第3个结果集
执行 having ...
进行筛选,选出满足条件的分组,返回 第4个结果集
⑤ 针对 第4个结果集
使用 order by...
进行排序,返回 第5个结果集
⑥ 针对 第5个结果集
进行分页处理,返回 最终结果集
九:事务 transaction
-
开始事务:
begin;
或start transaction;
-
提交事务:
commit;
-
回滚事务:
rollback;
-
知识点1:使用事务应该先关闭自动提交
set autocommit=0;
-
知识点2:查看当前sql语句是否为自动提交
show variables like 'autocommit';
十:视图 view
-
创建视图:
create view 视图名[(列名, ...)] as select查询语句 [with check option];
-
删除视图:
drop view 视图名 [cascade];
-
查看视图:
select 列名... from 视图名;
勾:索引 index
-
创建索引:
create index 索引名 on 表名(列名);
-
删除索引:
drop index 索引名 on 表名;
-
查看索引:
explain select 列名 from 表名;
圈:触发器 trigger
-
查看触发器:
SHOW TRIGGERS;
-
删除触发器:
DROP TRIGGER 触发器名;
凯:创建用户与授权
-
创建用户:
CREATE USER '用户名'@'主机IP' IDENTIFIED BY '密码';
-
删除用户:
DROP USER '用户名'@'主机IP';
-
更改用户密码:
SET PASSWORD FOR '用户名'@'主机IP' = PASSWORD('新密码');
-
查看所有用户及其IP:
select user,host from mysql.user;
-
给某用户授权:
GRANT 权限 ON 数据库名.表名 TO '用户名'@'主机IP';
-
给某用户授权并且该用户也能给别人授权:
GRANT 权限 ON 数据库名.表名 TO '用户名'@'主机IP' WITH GRANT OPTION;
-
撤销用户授权:
REVOKE 权限 ON 数据库名.表名 FROM '用户名'@'主机IP' [cascade | restrict];
-
查看某用户所有权限:
SHOW GRANTS FOR '用户名'@'主机IP';
-
知识点:权限包括
select
、insert
、update
、delete
、all
、create
、drop
等
尖:备份和恢复
-
备份数据库:
mysqldump -u 用户名 -p 数据库名 > 导出路径例如d:\xxx.sql
-
备份数据表:
mysqldump -u 用户名 -p 数据库名 表名 > 导出路径例如d:\xxx.sql
-
注意:上述备份在dos窗口中操作,只需输入密码即可
-
恢复数据库:
mysql -u 用户名 -p 数据库名 < 文件路径例如d:\xxx.sql
-
恢复数据表:
mysql -u 用户名 -p 数据库名 表名 < 文件路径例如d:\xxx.sql
-
注意:上述恢复必须存在要恢复的数据库,且需要
use
这个数据库
王:外键的三种模式
-
RESTRICT
(限制):如果有引用,不允许删除和修改 -
CASCADE
(级联):只要删除父表中的外键值,子表中的外键值所在的记录也会一并删除 -
SET NULL
(设置为NULL):如果有引用,但引用没有设置NOT NULL,那么就允许删除和修改
至此,关于
SQL
在MySQL
中的简单使用就介绍完了。想要了解更多知识或交个朋友,欢迎访问 👉 本人博客 😁😁😁