基础篇
在cmd中使用MYSQL的相关指令:
net start mysql // 启动mysql服务
net stop mysql // 停止mysql服务
mysql -uroot -p1234//登录MYSQL(-u为用户名-p为密码)
//登录参数
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
exit //退出mysql
quit //退出mysql
SQL通用语法:
- SQL 语句可以单行或多行书写,以分号结尾。
· 2.MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
3.单行注释: -- 注释内容 或 #注释内容(MySQL 特有)
使用-- 添加单行注释时,--后面一定要加空格,而#没有要求。
多行注释: /* 注释 */
SQL分类:
DDL:
操作数据库,表等。
操作数据库:
1.查询
show databases;
2.创建数据库
create database 数据库名称;
创建数据库(如果不存在则创建)
create database if not exists 数据库名称;
3.删除数据库
drop database 数据库名称;
删除数据库(如果存在则删除)
drop database if exists 数据库名称;
4.使用数据库
查看当前数据库
select database();
使用数据库
use 数据库名称;
操作表:
查询表:
查询当前数据库下的所有表
show tables;
查询表结构:
desc 表名;
创建表:
create table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
字段名3 数据类型3,
字段名4 数据类型4
);
删除表:
1.删除表
drop table 表名;
2.判断表是否存在,再删除表
drop table if not exists 表名;
修改表:
1.修改表名
alter table 表名 rename to 新表名;
2.增加一列
alter table 表名 add 列名 数据类型;
3.修改数据类型
alter table 表名 modify 列名 新的数据类型;
4.修改列名和数据类型
alter table 表名 change 列名 新列名 数据类型;
5.删除列
alter table 表名 drop 列名;
DML:
添加数据:
1.给指定列添加数据
insert into 表名(列名1,列名2,...) values(值1,值2,...);
2.给全部列添加数据
insert into 表名 values(值1,值2,...);
3.批量添加数据
insert into 表名 (列名1,列名2,...)values(值1,值2,...),(值1,值2,...),....;
insert into 表名 values(值1,值2,...),(值1,值2,...),...;
修改数据:
1.修改表数据
update 表名 set 列名1=值1,列名2=值2,...[where 条件]
2.删除数据
delete from 表名 [where条件];
DQL:
执行顺序:
查询语法:
select [distinct//去除重复记录]
字段列表(age,math) (可以起别名如:stu AS学生)
from
表名列表
where
条件列表(age>=20 && age<=30;
age>=20 and age<=30;
age between 20 and 30;
age=20 || age=22 ||age=30;
age=20 or age=22 or age=30;
age in (18,22,30);)
//NULL 的比较不能用=或!= 需要使用is null/is not null
// _为站位符代表单个字符 %为任意多个字符
//模糊查询
SELECT * FROM tb_brand WHERE brand_name LIKE '%三%';
//分组之后,查询的字段一般为聚合函数和分组字段
group by
分组字段
//查询男同学和女同学各自的数学平均分
// select sex,avg(math) form stu group by sex;
//查询男同学和女同学各自的数学平均分以及人数
// select count(*),sex,avg(math) form stu group by sex;
//查询男同学和女同学各自的数学平均分,且要求数学低于70不参与分组
// select sex,avg(math)
form stu where math>70 group by sex;
//查询男同学和女同学各自的数学平均分,且要求数学低于70不参与分组,且分组之后人数大于2
// select sex,avg(math)
form stu where math>70 group by sex
having count(*)> 2 ;
having
分组后条件
//查询男同学和女同学各自的数学平均分,且要求数学低于70不参与分组,且分组之后人数大于2
// select sex,avg(math)
form stu where math>70 group by sex
having count(*)> 2 ;
order by
排序字段(math desc;//按数学降序排序
english asc;//按英语升序排序
math desc ,english asc;
//按数学降序排序,如果数学成绩一样再按英语升序排序 )
limit
分页限定
//语法:select 字段列表 from 表名 limit起始索引,查询条目数;
起始索引:从0开始
计算公式:起始索引=(当前页码-1)*每页条目数
聚合函数:
count(列名)统计数量
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值0
语法:
select 聚合函数(列名) from 表;
//null不参与聚合函数运算。
DCL:
权限控制:
函数:
字符串函数
数值函数
日期函数
流程函数
约束:
约束是作用于表中列的规则,用于限制加入表的数据。
非空约束:保证列中数据不为空 not null
唯一约束:保证列中数据各不相同 unique
主键约束:主键是一行数据的唯一标识,要求非空且唯一primary key
检查约束:检查列中数据是否满足要求。Check(MYSQL不支持)
默认约束:保存数据未指定值,则采用默认值。default
外键约束:外键用来让两个表的数据建立连接,保证数据的唯一性和完整性。foreign key
不指定值时自动增长: auto_increment
语法:
1.添加约束:
create table 表名(
列名 数据类型 not null,
...
);
2.建完表后添加非空约束
alter table 表名 modify 列名 数据类型 not null;
3.删除约束
alter table modify 字段名 数据类型;
4.添加外键约束
create table 表名(
列名 数据类型 not null,
...
[constraint] [外键名称] foreign key (外键列名) references 主表名称(主表列名)
);
5.建完表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键列名) references 主表名称(主表列名);
6.删除外键约束
alter table 表名 drop foreign key 外键名称;
多表查询:
1.内连接(查询两个表的交集)
隐式内连接:
select 字段列表 from 表1,表2... where 条件;
显示内连接:
select 字段列表 from 表1 join 表2 on 条件
2.外连接
左外连接(表1所有数据+两表交集):
select 字段列表 from 表1 left join 表2 on 条件
右外连接(表2所有数据+两表交集):
select 字段列表 from 表1 right join 表2 on 条件
补充:
联合查询
union 合并后去重,union all 直接合并
使用条件,查询返回的列必须保持一致。
3.子查询(嵌套查询)
单行单例(标量子查询)
作为条件值,使用=,!=,<,>进行条件判断
select 字段列表 from 表名 where 字段名= (子查询);
例:select name form stu where math >
(select math from stu where name=’小马’ );
多行单列(列子查询)
作为条件值,使用in进行条件判断
select 字段列表 from 表名 where 字段名in(子查询);
例:select name form stu where stu_id in
(select did from dept where dname=’数学’ );
一行多列(行子查询)
-
select salary,managerid from emp where name ='张无忌'
-
select * from emp where (salary,managerid) = (select salary,managerid from emp where name ='张无忌')
工资和领导与张无忌相同
多行多列(表子查询)
作为虚拟表进行查询
select 字段列表 from (子查询) where 条件;
例:
select * from
(select * from emp where join_date >’2021-1-1’ ) t1,dept where t1.dep_id = dept.did;
作为查询条件:
例:
select * from emp where (job,salary) in (select job, salary from emp where name='张三'or name=‘李四’)
工资和职位要么与张三相同要么与李四相同
事务:
数据库的事务是一个不可分割的数据单元,包含一组数据库操作,要么同时失败,要么同时成功。
语法:
开始事务:start transaction; 或begin;
提交事务:commit;
回滚事务:rollback;
事务的四大特性ACID:
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
并发事务问题:
事务的隔离级别:
mysql数据库
AI必读
发布于2024-05-19著作权归作者所有