赞
踩
版本:MySQL 8.0
本机服务名称:MySQL8 ( mysql8 )
注意事项:"服务名称"可能有所不同,具体请在 cmd
窗口中输入services.msc
查询自己的 MySQL 服务名称.
启动 MySQL 数据库的"服务端"
net start mysql8
停止 MySQL 数据库
net stop mysql8
将 MySQL 提供的客户端,连接 MySQL 服务端
配置PATH环境变量,让任意路径的cmd窗口,都能检测并执行 mysql... 这些命令
下面命令中,最后一个 -p 的含义是密码
mysql -h 127.0.0.1 -P 3306 -u root -p
单行注释:
-- 注释内容
# 注释内容(MySQL独有)
多行注释:
/* 注释内容 */
查阅文档:https://www.runoob.com/mysql/mysql-data-types.html
运用举例:
设计一张员工信息表,要求如下:
1.编号(纯数字)
2.员工工号(可变长字符串,长度不超过10)
3.员工姓名(可变长字符串,长度不超过10)
4.性别(定长字符串,存储一个汉字)
5.年龄(无符号,微小整型)
6.身份证号(18位)
7.入职时间(取值年月日即可)
create table employee(
id int,
jobnum varchar(10),
name varchar(10),
gender char(1),
age tinyint unsigned,
idcard char(18),
entrydate date
);
查询所有数据库
show databases;
查询当前数据库
select database();
create database [if not exists] 数据库名 [default charset utf8mb4] [collate 排序规则];
drop database [if exists] 数据库名;
use 数据库名;
查询当前数据库所有表
show tables;
查询表结构
desc 表名;
查询指定表的建表语句
show create table 表名;
create table 表名(
字段1 类型[comment 字段注释],
字段2 类型[comment 字段注释],
字段3 类型[comment 字段注释],
...
字段n 类型[comment 字段注释]
)[comment 表注释]
create table tb_user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '用户表';
alter table 旧表名 rename to 新表名;
删除表
drop table if exists 表名;
删除指定表,并重新创建该表
truncate table 表名;
注意:在删除表时,表中的全部数据也会被删除
alter table 表名 add 字段名 类型 [comment 注释]
alter table tb_user add hobby varchar(20);
修改数据类型
alter table 表名 modify 字段名 新数据类型;
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 新字段类型;
alter table 表名 drop 字段名;
给指定的字段添加数据
insert into 表名 (字段1, 字段2, ...) values (值1, 值2, ...);
给全部的字段添加数据
insert into 表名 values (值1, 值2, ...);
批量添加数据
insert into 表名 (字段1, 字段2, ...) values (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
注意:字符串和日期型数据应该包含在引号中。
update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... [where 条件];
update user set name = 'Peter' where id = 1;
注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
delete from 表名 [where 条件]
注意:
查询多个字段
select 字段1, 字段2, 字段3 ... from 表名;
select * from 表名;
设置别名
select 字段1 [as 别名1], 字段2 [as 别名2] ... from 表名;
select workaddress as '工作地址' from employee;
去除重复记录
select distinct 字段列表 from 表名;
select distinct workaddress as '工作地址' from employee;
select 字段列表 from 表名 where 条件列表;
概念:将一列数据作为一个整体,进行纵向计算。
select 聚合函数(字段列表) from 表名;
select count(id) from user;
注意:null 值是不参与聚合函数运算的
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
where 与 having 区别:
/* 根据性别分组,统计男性员工和女性员工的数量 */
select gender, count(*) from employee group by gender;
/* 根据性别分组,统计男性员工和女性员工的平均年龄 */
select gender, avg(age) from employee group by gender;
/* 查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址 */
select workaddress, count(*) from employee where age < 45 group by workaddress having count(*) >= 3;
select 字段列表 from 表名 order by 字段1 排序方式, 字段2 排序方式;
排序方式:
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
select 字段列表 from 表名 limit 起始索引, 查询记录数;
查询用户
use mysql;
select * from user;
创建用户
create user '用户名'@'主机名' identified by '密码';
创建一个用户 peter,可以在任意主机访问该数据库,密码 123456:
create user 'peter'@'%' identified by '123456';
修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
alter user 'peter'@'%' identified with mysql_native_password by '654321';
删除用户
drop user '用户名'@'主机名';
drop user 'peter'@'%'
查询权限
show grants for '用户名'@'主机名';
授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
grant all on user.* to 'peter'@'localhost';
撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
revoke all on user.* from 'peter'@'localhost';
/* 字符串拼接 */
select concat('Hello', 'World');
/* 全部转为大写 */
select upper('hello');
/* 将名字右填充‘_’号至10位 */
update user set name = rpad(name, 10, '_');
/* 保留两位小数 */
select round(3.14159, 2);
/* 随机小数 */
select rand()
select now();
select if(true, 'ok', 'error')
select
name,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址'
from user;
create table 表名(
字段名 数据类型,
...
[constraint] [外键名称] foreign key(外键字段名) references 主表(主表列名);
);
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
/* 外键数据的同步更新与同步删除 */
alter table 表名 constraint 外键名称 foreign (外键字段) references 主表名 (主表字段名) on update cascade on delete cascade;
/* 更新与删除时,外键数据变为 null */
alter table 表名 constraint 外键名称 foreign (外键字段) references 主表名 (主表字段名) on update set null on delete set null;
隐式内连接
select 字段列表 from 表1, 表2 where 条件...;
select emp.name, dept.name from emp, dept where emp.dept_id = dept.id;
显式内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件...;
select emp.name, dept.name from emp inner join dept on emp.dept_id = dept.id;
左外连接(相当于查询表A的所有数据,包含表A和表B交集部分的数据)
select 字段列表 from 表1 left [outer] join 表2 on 条件...;
右外连接(相当于查询表B的所有数据,包含表A和表B交集部分的数据)
select 字段列表 from 表1 right [outer] join 表2 on 条件...;
select 字段列表 from 表A 别名A join 表B on 条件...;
select a.name, b.name from emp a, emp b where a.managerid = b.id;
对于 union 查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
select 字段列表 from 表A...
union [all]
select 字段列表 from 表B...;
SQL 语句中嵌套 select 语句,称为嵌套查询,又称子查询
select * from t1 where column1 = (select column1 from t2);
子查询外部的语句可以是 insert / update / delete / select
查询"销售部"的所有员工信息
a.查询销售部的部门ID
select id from dept where name = '销售部';
b.根据销售部的部门ID,查询员工信息
select * from emp where dept_id = 4;
合并为一步:
select * from emp where dept_id = (select id from dept where name = '销售部');
查询"销售部"和"市场部"的所有员工信息
a.查询销售部和市场部的部门ID
select id from dept where name= '销售部' or name = '市场部';
b.根据部门ID,查询员工信息
select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');
查询与"小张"的薪资及直属领导相同的员工信息
a.查询小张的薪资及直属领导
select salary, managerid from emp where name = '小张';
b.查询小张的薪资及直属领导相同的员工信息
select * from emp where (salary, managerid) = (select salary, managerid from emp where name = '小张');
查询"小华"和"小明"的职位和薪资相同的员工信息
a.查询小华、小明的职位和薪资
select job, salary from emp where name = '小华' or name = '小明';
b.查询"小华"和"小明"的职位和薪资相同的员工信息
select * from emp where (job, salary) in (select job, salary from emp where name = '小华' or name = '小明');
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
方式一:
/* 查看事务的提交方式 */
select @@autocommit;
/* 设置事务为手动提交 */
set @@autocommit = 0;
/* 设置事务为自动提交 */
set @@autocommit = 1;
/* 提交事务 */
commit;
/* 回滚事务 */
rollback;
方式二:( 推荐使用 )
/* 开启事务 */
start transaction 或 begin;
/* 提交事务 */
commit;
/* 回滚事务 */
rollback;
注意:事务隔离级别越高,数据越安全,但是性能越低。
下表中的隔离级别,由上到下,级别逐渐增加。
/* 查看事务的隔离级别 */
select @@transaction_isolation;
/* 设置事务隔离级别 */
set [ session | global ] transaction isolation level { read uncommitted | read committed | repeatable read | serializable };
set session transaction isolation level read uncommitted;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。