简单介绍各种sql语句DDL, DML, DQL, DCL(mysql)

前言:mysql以’;'为一条语句的结束符

注释格式:

-- <注释内容>						单行注释	注意:空格必须有
#<注释内容>							单行注释
/* <注释内容> */					多行注释
net start mysql						启动mysql服务
net stop mysql						停止mysql服务
mysqld --skip-grant-tables			使用无验证的方式启动mysql服务	注意:启动的mysqld进程可能需要手动结束
mysqldump -u<用户名> -p<密码> <数据库名> > <保存路径>		备份某一数据库
mysql -u <用户名> -p<密码>			登录mysql(-p 可回车后以星号的显示方式输入密码)	注意:p和密码之间没有空格
mysql -h <IP地址> -u <用户名> -p<密码>					建立一个关于IP地址的连接
mysql --host=<IP> --user=<用户名> --password=<密码>		建立连接的另一种写法
exit/quit;							#退出当前连接

-- 还原数据库:在要还原的数据库中输入下面命令即可
source <sql文件路径位置>;

数据定义语言 DDL

show DataBases;						#查看数据库		
show create database <数据库名>;	#可以查看该数据库的字符集
create database <数据库名>;			#创建数据库
create database if not exists <数据库名>;			#判断如果没有该数据库再创建
create database <数据库名> character set <字符集名>;		#创建时设置数据库的字符集
alter database <数据库名> character set <字符集名>;	#修改字符集
drop database <数据库名>;			#删除数据库
drop database <数据库名> if exists <数据库名>;		#如果存在删除
select database();					#查询当前正在使用的数据库名
use <数据库名>;						#使用数据库(进入数据库)


show tables;						#显示当前数据库的表
desc <表名>;						#查询表结构
create table <表名>(
<列名1> <数据类型1>,
<列名2> <数据类型2>,
<列名3> <数据类型3>
);									#创建表
drop table <表名>;					#删除表
drop table if exists <表名>;		#如果存在该表删除
create table <表名> like <要复制的表名>;			#复制表
alter table <表名> character set <字符集名>;		#修改字符集
alter table <旧表名> rename to <新表名>;			#修改表名
alter table <表名> add <列名> <数据类型>;			#添加一列
alter table <表名> change <列名> <新列名> <新数据类型>;			#修改表的列
alter table <表名> modify <列名> <新数据类型>;		#修改列的数据类型
alter table <表名> drop <列名>;						#删除一列

数据操作语言 DML

insert into <表名>(<列名1>,<列名2>,<列名3>) values(<1>,<2>,<3>);		#添加一条数据	注意:1. 列名和赋给的值必须一一对应。 2. 字符串等使用单引号('')和双引号("")都可以。
select * from <表名>;					#查询表
delete from <表名> [where语句];			#删除表中的记录	注意:1. "[]"表示可选。 2. 不填写where语句,表示删除表中的所有数据。
truncate table <表名>;					#用来删除表中的所有数据。它先删除表,然后在创建一个一模一样的空表。 注意:效率相对较高。delete 需要一条一条的删除记录,而truncate 直接删除表,再创建表。
update <表名> set <列名1> = <1>, <列名2> = <2> [where语句]	#修改表中的数据		注意:如果不加where条件,就会将表中的记录都修改。

数据查询语言 DQL

-- order by 排序子句
	-- order by <要排序的字段1> <排序方式1>, <要排序的字段2> <排序方式2>,...
select * from <表名> order by <字段1> <排序方式1>, <字段2> <排序方式2>;		#将查询的所有记录按照字段1的排序方式1排序,再将字段1值相同的按照字段2的排序方式2排序。	注意:ASC为升序排序,DESC为降序排序。
-- 聚合函数 (count,max,min,sum,avg)
select count(<列名>) from <表名>;		#计算该列的非空值的记录的个数
select count(ifnull(<列名>,0)) from <表名>;			#该列的值如果为null,返回0。所以计算的是该表有多少条数据。
select max(<列名>) from <表名>;			#计算该列的最大值。(min() 求最小,sum() 求和,avg() 求平均)
-- group by 分组子句
select <要分组的字段>, <聚合函数> from <表名> group by <分组字段>;		#分组查询	注意:查询的字段必须是分组字段或者聚合函数,即要查询的是每一组共有的值,要忽略组内个性。
select <要分组的字段>, <聚合函数> from <表名> where <筛选条件> group by <分组字段> having <筛选条件>;			#满足where的筛选条件后再进行分组,分组后的结果满足having筛选条件的进行显示。	注意:having的筛选条件可以是聚合函数,where不能使用聚合函数。
-- limit 分页查询子句
select * from <表名> limit <记录的下标>,<显示条数>;	#从记录的下标开始查询显示条数的记录。 如:..limit 3,3; 从下标为3的记录(即第四条记录)开始显示3条记录。	
select distinct <字段名> from <表名>;	#distinct是去重的关键字	注意:去重时要求结果集完全一样。
select <字段名/查询函数> as <别名> from <表名>;		#as起别名。

/*
	运算符:>, <, >=, <=, =, <>, !=;
	! or not, and or &&, or or ||, between..and, is null, is not null, in
	
*/
select * from <表名> where <int字段名> between 10 and 20;		#查询<int字段名>的值在10 到 20 之间的记录(包含10和20)。
select * from <表名> where <字段名> is null;		#查询该字段的值为null的记录。 
select * from <表名> where <字段名> in (<1>, <2>);			#查询该字段值为值1或值2中的记录。

-- 模糊查询:like 占位符: '_'单个任意字符,'%'多个任意字符(0或多个)。
select * from <表名> where name like '刘%';				#查询姓刘的人

-- 约束:
	-- 主键约束:primary key; 
	-- 非空约束:not null; 
	-- 唯一约束:unique;
	-- 外键约束:foreign key;

CREATE TABLE <表名>(
	id INT(10) PRIMARY KEY AUTO_INCREMENT,			-- 设置主键为自动增长
	name VARCHAR(20) NOT NULL,
	-- 	primary key(id, name),				--将id和name设为联合主键
	phone_number VARCHAR(20) UNIQUE,
	class_id int(10), -- 所在公司的id (外键)
	CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES class(id)	-- 创建class_id为外键,fk_class_id —— <约束名>; class_id —— <外键的字段名>; class —— <引用表>; id —— <引用列>	注意:引用列必须用unique约束。
);
alter table <表名> add primary key(id);
alter table <表名> modify name varchar(20) [AUTO_INCREMENT];				#通过修改字段的属性, 可以删除/定义约束。
alter table <表名> drop index phone_number;				#去掉phone_number字段的唯一约束
alter table <表名> drop primary key;					#删除主键约束
alter table <表名> drop foreign key fk_class_id;					#删除外键约束
alter table <表名> add CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES class(id);		#添加外键约束。
-- 级联操作(和外键相关。如设置级联更新时,修改外键关联的另一个表的主键的值时,所有外键值等于关联主键的值相同的外键值也会修改;删除主键值时,相同的外键值会置为空)
	-- on update cascade 级联更新;on delete cascade 级联删除。 可以一起设置,也可以分开设置。
alter table <表名> add CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES class(id) on update cascade;		#添加外键约束,设置级联更新。
alter table <表名> add CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES class(id) on delete cascade;		#添加外键约束,设置级联删除。

多表查询

select * from <1>,<2>;			#双表查询笛卡尔积
select <字段列表> from <1>,<2> where <条件>;			#隐式内连接
select <字段列表> from <1> [inner] join <2> on <条件>;	#显式内连接

select <字段列表> from <1> left [outer] join <2> on <条件>;		#左外连接
select <字段列表> from <1> right [outer] join <2> on <条件>;		#左外连接

-- 子查询
	-- 1. 子查询是单行单列的;	直接使用 运算符:>, <, =, <=, >=, <>;
	-- 2. 子查询是多行单列的;	使用 in (<子查询语句>);
	-- 3. 子查询是多行多列的;	将子查询视为另一张表添加在from后面。

事务

-- 开启事务:start transaction;
-- 回滚事务:rollback;
-- 提交事务:commit;		注意:在mysql中,单条DML(增删改)看为事务,会自动提交。
set @@autocommit·= 0;		#设为手动提交
select @@autocommit;		#查看DML语句的提交方式

-- 事务的四大特征:原子性,持久性,隔离性,一致性
-- 事务的隔离级别:
	-- read uncommitted 读未提交,存在脏读、不可重复读(在同一个事物中读到的两个数据不一样)、幻读。
	-- read committed 读已提交,解决脏读问题。
	-- repeatable read 可重复读,解决不可重复读问题。(Mysql默认)
	-- serializable 串行化。当隔离级别设置为串行化时,一个事务对某个表执行操作过程中,另一个事务不能对同一张表进行操作。解决所有问题。

set global transaction isolation level <级别字符串>;		#设置数据库的隔离级别
select @@tx_isolation;		#查询隔离级别  

彻底搞懂 MySQL 事务的隔离级别

数据库控制语言 DCL

create user '<用户名>'@'<主机名>' identified by '<密码>';		#创建用户
drop user '<用户名>'@'<主机名>';			#删除用户
update user set password = password('<新密码>') where user = '<用户名>';		#修改用户密码(使用DML修改密码)
set password for '<用户名>'@'<主机名>' = password('<新密码>');	#修改密码的另一种方式(使用DCL修改密码)

show grants for '<用户名>'@'<主机名>';		#查看用户的权限
grant <权限列表> on <数据库名>.<表名> to '<用户名>'@'<主机名>';	#授予用户权限
grant all on *.* to '<用户名>'@'<主机名>';	#给该用户赋予对所有数据库的所有表的所有权限
revoke <权限列表> on <数据库名>.<表名> from '<用户名>'@'<主机名>';		#撤销权限
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脸是真的白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值