命令 | 说明 |
---|---|
mysql -u 用户名 -p 密码 | 使用指定用户名 + 密码登录当前计算机中的MySQL数据库 |
mysql -h 主机IP -u 用户名 -p 密码 | 指定IP进行登录 |
quit 或 exit | 退出 |
格式:
insert into 表名(字段名1,字段名2,...)values(字段值1,字段值2,...)
注意事项:
格式:
update 表名 set 列名 = 值 [where 字段名 = 值]
格式:
delete from 表名 [where 字段名 = 值]
删除表格所有数据:
# 方法一: delete from 表名 # 不推荐,原理是逐条删除表格数据,效率低 # 方法二: truncate table 表名 # 推荐,原理是直接将整个表格删除,再创建一个一模一样的表格,效率高
查询不会对数据库中的数据进行修改,只是一种显示方式
语法格式:
select 列名 from 表名
查询所有数据:
select * from 表名
可以使用 AS 关键字,为列起别名(AS也可以忽略不写)
SELECT eid AS '编号', ename AS '姓名', sex AS '性别' FROM person;
去重关键字 distinct
去掉重复的信息:
select distinct salary from person; # 结果仅显示不同的数据
运算符 | 说明 |
---|---|
>, <, <=, >=, =, <> != | 大于,小于,小于等于,大于等于,等于,不等于 |
between … and … | 显示在某一区间的值 例如: 2000-10000之间: Between 2000 and 10000 |
in(集合) | 集合表示多个值,使用逗号分隔,例如: name in (悟空,八戒) 集合中的每一个数据都会作为一次条件来判断 |
like | 模糊查询 |
is null | 查询某一列为null的值,注意:不能写作:= null |
and && | 逻辑运算符,表示多个条件同时成立 |
or || | 逻辑运算符,表示任意一个条件成立 |
not | 逻辑运算符,表示不成立,取反 |
% | 通配符,表示匹配任意长度的任意字符 |
_ | 通配符,表示匹配一个长度的任意字符 |
语法格式:
select 字段名 from 表名 [where 字段名 = 值] order by 字段名 [asc / desc] # asc:表示升序(默认) # desc:表示降序
组合排序:
select 字段名 from 表名 order by 字段名1, 字段名2 # 表示若字段名1相同则比较字段名2的值,作升序排序
含义:聚合函数查询是指纵向查询,先对某一列的值进行计算,然后返回一个单一的值(聚合函数会忽略null空值)
语法结构:
select 聚合函数(字段名) from 表名
聚合函数 | 作用 |
---|---|
count(字段) | 统计指定列的行数 |
sum(字段) | 计算指定列的数值和 |
max(字段) | 计算指定列的最大值 |
min(字段) | 计算指定列的最小值 |
avg(字段) | 计算指定列的平均值 |
含义:使用 GROUP BY 语句,对查询的信息进行分组,相同数据作为一组
语法:
select 分组字段/聚合函数 from 表名 group by 分组字段 [having 条件]
需要在分组后对数据进行过滤,使用关键字 having,作用类似于 where
where 与 having 的区别:
作用:
语法:
select 字段名 from 表名 limit offset, length # offset:起始行数,可以省略,默认为 0 # length:返回的行数
关键字:primary key
特点:不可重复,唯一,非空
作用:表示数据库中的每一条数据
添加方式一:在创建表的时候直接加在字段类型后面,如:
create table person(id int primary key);
添加方式二:在创建表的时候指定某个字段为主键,如:
create table person(id int, primary key(id));
添加方式三:给已经创建好的表设置主键,如:
alter table person add primary key(id);
删除方式:
alter table person drop primary key;
意义:在每次插入新数据时,由数据库自动生成主键字段的值,避免人工输入导致的错误
关键字:auto_ increment (注意:字段类型必须为整数类型)
创建方法一:
create table test(id int primary key auto_increment); # 默认起始值为1
创建方法二:
create table test(id int primary key auto_increment)auto_increment=100; # 表示将起始值设置为100
特点:约束表格中某一列的值不能重复(对 null 值不作判断)
语法:字段名 字段类型 unique
添加方式:
create table test(id int unique);
主键约束与唯一约束的区别:
含义:用来指定某一列的默认值
语法:字段名 字段类型 default 默认值
添加方式:
create table test(sex char(1) default '男');
含义:MySQL 默认每一条 DML(增删改) 语句都是一个单独的事务,每条语句都会自动开启一个事务,语句
执行完毕自动提交事务,MySQL 默认开始自动提交事务。
级别 | 名称 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 数据库的默认隔离级别 |
---|---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | √ | √ | √ | |
2 | 读已提交 | read committed | × | √ | √ | Oracle 和 SQLServer |
3 | 可重复读 | repeatable read | × | × | √ | MySQL |
4 | 串行化 | serializable | × | × | × |
查看隔离级别:select @@tx_isolation;
设置隔离级别:
set global transaction isolation level 级别名称;
语法:
新建表时添加:
[constraint] [外键约束名称] foreign key(外键字段名) references 主表(主键字段名);
已有表添加:
alter table 从表 add [constraint] [外键约束名称] foreign key(外键字段名) references 主表(主键字段名);
注意事项:
[constraint] [外键约束名称] 可以省略,外键约束名称由系统自动给出
语法:
alter table 从表 drop foreign key 外键约束名称
含义:在删除主表数据的同时,也删除掉从表数据
语法:on delete cascade
实例:
create table test(dept_id int, foreign key(dept_id) references department(id) on delete cascade);
使用 where 条件过滤无用的数据
语法:
select 字段名 from 表1, 表2 where 连接条件;
语法:
select 字段名 from 表1 [inner] join 表2 on 条件; # inner可以省略
含义:以左表为基准,匹配右表中的数据
语法:
select 字段名 from 左表 left [outer] join 右表 on 条件; # outer可以省略
含义:以右表为基准,匹配由表中的数据
语法:
select 字段名 from 左表 right [outer] join 右表 on 条件; # outer可以省略
概念:一条 select 查询语句的结果,作为另一条 select 语句的一部分
特点:
常见分类:
where型:将子查询的结果作为父查询的比较条件
语法:
select 查询字段 from 表 where 字段 = (子查询);
from型:将子查询的结果作为一张表提供给父查询使用
语法:
select 查询字段 from (子查询) 表别名 where 条件;
注意:当子查询作为一张表的时候,需要起别名,否则无法访问表中的字段。
exists型:子查询的结果为单列多行,类似一个数组,父查询使用 in 函数,包含子查询的结果
select 查询字段 from 表 where 字段 in (子查询);
总结:
特点:索引列的所有值都仅能出现一次,且唯一。唯一索引可以保证数据记录的唯一性。事实上,在许多场合,创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
语法:
创建表时添加:
create table 表名(列名 类型(长度), unique [索引名称] (列名));
在已有表添加:
方法一:
create unique index 索引名 on 表名(列名(长度));
方法二:
alter table 表名 add unique(列名);
概念:普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column =)或排序条件(ORDERBY column)中的数据列创建索引。
# 添加方式一: create index 索引名 on 表名(列名[长度]); # 添加方式二: alter table 表名 add index 索引名(列名);
意义:由于索引会占用一定的磁盘空间,因此为了避免影响数据库的性能,应该及时删除不再使用的索引。
语法:
alter table 表名 drop index 索引名;
添加格式:
create view 视图名 [column_list] as select语句; # column_list:可选参数,表示属性清单,指定视图中各个属性的名称,默认情况下,与SELECT语句中查询的属性相同 # as:表示视图要执行的操作 # select语句:向视图提供数据内容
语法格式:
delimiter $ # 自定义语句结束符 create procedure 过程名称() # 声明存储过程 begin # 开始编写存储过程 # 需要执行的操作... end $ # 存储过程结束
调用方式:
call 存储过程名
in 输入参数:表示调用者向存储过程传入值
CREATE PROCEDURE 存储过程名称(IN 参数名 参数类型)
创建接收参数的存储过程
示例:接收一个商品id,根据id删除数据
DELIMITER $$ CREATE PROCEDURE goods_proc02(IN goods_id INT) BEGINDELETE FROM goods WHERE gid = goods_id ; END $$
调用存储过程,传递参数:
# 删除id为2的商品 call goods_proc02(2);
# 变量赋值 set @变量名 = 值 # out输出参数:表示存储过程向调用者传出值 out 变量名 数据类型 # 创建存储过程 # 实例:向订单表插入一条数据,返回1,表示插入成功 # 接收参数插入数据, 并返回受影响的行数 DELIMITER $$ CREATE PROCEDURE orders_proc(IN o_oid INT , IN o_gid INT ,IN o_price INT, OUT out_num INT) BEGIN # 执行插入操作... INSERT INTO orders VALUES(o_oid,o_gid,o_price); # 设置 num的值为 1 SET @out_num = 1; # 返回 out_num的值 SELECT @out_num; END $$ # 调用存储过程插入数据,获取返回值 CALL orders_proc(1,2,30,@out_num);
delimiter $ create trigger 触发器名 # 触发器名在一个数据库中是唯一的 before/after(insert/update/delete) # 触发时机 & 监视的事件 on table_Name # 触发器所在的表 for each row # 行触发器,固定写法,每一行都会受影响 begin # 触发事件 end $
语法格式:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; # 用户名:创建的新用户的登录名 # 主机名:指定该用户在哪个主机上可以登录,本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符 % # 密 码:登录密码
创建用户之后,需要进行授权。
语法格式:
GRANT 权限 1, 权限 2... ON 数据库名.表名 TO '用户名'@'主机名'; # 权限:授予用户的权限,如 CREATE、ALTER、SELECT、INSERT、UPDATE 等。如果要授予所有的权限则使用 ALL # ON:指定权限针对哪些库和表 # TO:表示将权限授予哪个用户 # 示例:给 admin1 用户分配对 db4 数据库中 products 表的 操作权限:查询 GRANT SELECT ON db4.products TO 'admin1'@'localhost';
语法格式:
SHOW GRANTS FOR '用户名'@'主机名';
语法格式:
DROP USER '用户名'@'主机名';
# 选择名为 mysql 的数据库, 直接查询 user表即可 SELECT * FROM USER;
# 备份 mysqldump -u 用户名 -p 密码 数据库 > 文件路径 # 还原 source sql文件地址