启动与停止服务
net start mysql80
net stop mysql80
客户端连接
mysql -u root -p
导入数据
-- 1.LOAD命令
mysql -u root -p --local-infile
set glonal local_infile = 1
LOAD DATA LOCAL INFILE 'D:\\launages\\learn mysql\\learn_sql\\data\\tb_sku1.sql' INTO TABLE tb_sku FIELDS TERMINATED BY ',' LINES TERMINATED BY '';
-- 2.mysql命令
mysql -u your_username -p -h your_host -P your_port -D your_database
-- 3.source命令
source D:/mysql/learn_sql/student.sql
-- 4.mysqlimport命令
mysqlimport -u root -p --local mytbl exp1.txt
导出数据
select * into outfile 'file1' from table_name where
-- mysqldump导出整个数据库
mysqldump -u root -p mydatabases > mydatabase_backup.sql
-- 导出特定表
mysqldump -u username -p password -h hostname database_name table_name > output_file.sql
关键字建议使用大写
表操作–修改
-- 添加字段
alter table table_name add 字段名 类型 注释 约束
-- 修改数据类型
alter table 表名 modify 字段名 新数据类型
-- 修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型 约束
--删除字段
alter table 表名 drop 字段名
-- 修改表名
alter table 表名 reneme to 新表名
修改数据
update 表名 set 字段名1=值1,字段名2=值2,...[where 条件]
-- 删除表名
delete from 表名 where
查询数据
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
字段设置别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名
聚合 函数
SELECT 聚合函数(字段列表) FROM 表名 ;
count
max
min
avg
sum
where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组
之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
• 执行顺序: where > 聚合函数 > having 。
• 支持多字段分组, 具体语法为 : group by columnA,columnB
分组查询
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组
后过滤条件 ]
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
注意事项:
• 如果是升序, 可以不指定排序方式ASC ;
• 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
查询第1页员工数据, 每页展示10条记录
select * from emp limit 0,10;
select * from emp limit 10;
起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
• 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
• 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
管理用户
select * from mysql.user;
2).创建用户
3). 修改用户密码
4). 删除用户
注意事项:
• 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。
1 CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
1 ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
1 DROP USER '用户名'@'主机名'
权限控制
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;
-- 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'
-- 撤销控制
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
函数需用:select
添加外键
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名)
REFERENCES 主表 (主表列名)
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id)
-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
多表查询
-- 隐式内连接,相当于查询交集部分
select 字段 from table1,table2 where ...;
-- 显式内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;
-- 左外连接:查询左表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
-- 右外连接:查询右表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;
-- 自连接,自连接必须使用表别名
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;