mySql从入门到入土

发布于:2024-05-20 ⋅ 阅读:(156) ⋅ 点赞:(0)

基础篇

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通用语法:

  1. 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):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

并发事务问题: 

事务的隔离级别: