启动:
1.管理员权限下打开cmd,输入net start mysql,启动mysql服务 2.管理员模式下打开cmd,输入mysql -u root -p,键入密码后进入mysql
修改密码:
以root用户登录后,键入以下命令
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
DDL语句(Data Definition Language语句)
创建数据库:
create database dbname; // dbname为数据库的名称
显示所有数据库:
show databases;
指定要操作的数据库:
use dbname;
显示数据库里所有的表:
show tables;
删除指定数据库:
drop database dbname;
创建表
CREATE TABLE 表名称 ( 列名称1 数据类型 约束, 列名称2 数据类型 约束, 列名称3 数据类型 约束, .... ) 例如: create table job ( name varchar(20), # 不超过20位长字符串 sex varchar(2), age int(2), hiredate date, # 日期型 wage decimal(10,2) # 最多10位数字,其中2位小数 );
查看表的定义
DESC tablename;
删除表
drop table tablename; # 可通过日志恢复删除 truncate table tablename; # 彻底删除,不可恢复
修改表
alter table job modify name varchar(25);# 修改表某一列的数据类型 alter table job add home varchar(30);# 添加一个字段,添加在表最后一列 alter table job add birthday date after hiredate;# 添加一个字段,在某一个字段列的后面 alter table job add birthday date first;# 添加一个字段,在该表第一列 alter table job drop column home;# 删除一个字段 alter table job change wage salary decimal(10,2);# 修改表中字段名称
DML语句(Data Manipulation Language)
插入
insert into tablename (field1,field2) values(value1,value2);# 基本语法 insert into job(name,sex,age,hiredate,birthday,salary) values("gulugulu","男",3,"2023-04-18","2020-04-18",800000); # 插入对应字段数据,按照写的字段插入 insert into job values("gulugulu","男",3,"2023-04-18","2020-04-18",800000); # 不指定插入字段,按table字段类型顺序插入 insert into job(name,sex,birthday,salary) values("gulugulu","男","2020-04-18",800000); # 没有规定的字段默认为NULL # 一次性插入多条数据 INSERT INTO tablename (field1,field2) VALUES (value1,value2), (value1,value2), (value1,value2), ...;
更新
update tablename set field1 = value1, field2 = value2; # 基本语法 update job set age=18 where name = 'gulugulu'; # 修改name为‘gulugulu’的数据的age为18
删除记录
delete from tablename [where condition] # 基本语法 delete from job where name = 'gulugulu';# 删除name为'gulugulu'的记录 delete from job# 清除所有数据,即删除表
DQL语句(Data Query Language)
去重
使用 distinct 关键字 例如数据库里有多条数据: name sex age ... gulu1 男 1 ... gulu2 男 2 ... gulu3 男 3 ... gulu3 男 3 ... gulu3 男 3 ... select distinct age from job;# 从job表中选取不同的age 结果为: age 1 2 3
条件查询
select * from job where age = 3;# 查询年龄为3的所有数据 where 关键字接需要的条件,可以用 and or 等词进行连接
排序
SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC],……fieldn [DESC|ASC]] # 基本语法 select * from job order by salary desc;# 按薪水降序查询 select * from job order by salary asc;# 按薪水升序查询 # 默认为升序 如果存在多个排序字段 A、B、C,则会按顺序进行排序,即以A为第一关键字排序,如果A相同,则按第二关键字B排序,以此类推
限制
limit 关键字可以限制查询输出的条数 select * from job order by salary limit 3;# 输出薪水最低的前三个人 # 默认从第0条记录开始取 select * from job order by salary limit 2,3;# 排序后,从第2条记录开始取,取3条
聚合
-
汇总函数,比如sum求和,count统计数量,max求最大值,min求最小值等
-
group by,对字段进行分组,比如按照部门进行员工数量的统计,那么group by后面就应该跟上部门
-
with 是可选的语法,表示对汇总之后的记录进行再次汇总
-
having 表示对分类后的结果再进行条件的过滤
select sum(salary) from job;# 统计员工的总薪水 select max(salary),min(salary) from job;# 取出员工薪水的最大值与最小值 select count(1) from job;# 统计表中有多少项 select count(*) from job;# 统计表有多少项 # 两者功能相同,区别在于count(*)会考虑列数,而count(1)把表当成一列来累加,所以列多的时候count(1)快 # 我没想懂为啥要区分开来,感觉功能是一样的。 select age,count(1) from job group by age;# 按年龄分组并统计 # 即每个年龄有多少人 select age,count(1) from job group by age with rollup; # with rollup对group分组后的第一个字段进行求和 select age,count(1) from job group by age with rollup having count(1) > 1; # 求和时要求被求和数,即年龄段的人数要大于1才累加
表连接
可以直接用“,”链接,如 table1,table2 表示内连接 也可以用join关键字链接又分为左外连接以及右外连接 table1 left(right) join table2
子查询
我感觉这个叫嵌套查询合理一点。 查询结果可以看作一个新表,从这个新表里查询,就叫做子查询 select x.age from job as x where x.name in (select y.name from job as y while y.sex="男"); # 先构建一张子表,该子表取出了所有员工中性别为男的名字,构成一张仅包含符合条件的男性员工的表 # 然后查询姓名在这些男性员工里面的员工的年龄 # 这是一个很不恰当的例子,但是能理解。举这个例子的原因是我懒得多创建一张表了
联合查询
union 与 union all 将两张表竖向拼接,A union B 即把B表放在A表下面 两张表必须要有相同的列。 union会对表进行去重 union all不会