mysql

操作数据库

创建数据库表

常用命令:

show create database studb --查看创建数据库的语句
show create table text  --查看text数据表的定义语句
desc t_student  ---显示表的结构

修改删除表

修改表

---修改表名: ALTER TABLE 原表名 RENAME AS 新表名
alter table text rename as text1 
--增加表的字段:  ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE text1 ADD age INT(11)
---修改表的字段(重命名,修改约束)
--ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE text1 MODIFY age VARCHAR(11) --修改约束
--ALTER TABLE 表名 CHANGE 原名字 新名字 列属性
ALTER TABLE text1 CHANGE age age1 int(1) --字段重命名
--删除表的字段: ALTER TABLE 表名 DROP 字段名
ALTER TABLE text1 DROP age
--设置表的自增起始值(主键自增起始值)
alter table 表名 AUTO_INCREMENT=起始值;
alter table student AUTO_INCREMENT=1;

删除

--删除表(如果表存在再删除)
DROP TABLE IF EXISTS text 

注意点:

  • `` 字段名,使用这个包裹
  • 注释 – /**/
  • sql 关键字大小写不敏感
  • 使用创建删除操作尽量加上判断 以免报错

mysql数据管理

外键(了解)

DML语言(全部记住)

  • insert
  • update
  • delete

添加

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO 表名 VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (字段1,字段2,字段3,...)
VALUES (value1,value2,value3,...);

语法:insert into 表名([字段名1,字段名2])values(‘值1’,‘值2’)

修改

update 修改谁 (条件) set 原来的值=新值

--修改学生表id为1的name为狂神
UPDATE student SET `name`='狂神' where id=1
--修改多个属性,逗号隔开
UPDATE student SET `name`='狂',`password`='123459' WHERE id=1
--语法:
--update 表名 set colnum_name=value where [条件]

条件:where子句 运算符

操作符含义范围结果
=等于5=6false
<>或!=不等于5<>6true
>大于
<小于
<=小于等于
>=大于等于
BETWEEN…and…在某一个范围内[2,5]2,3,4,5
AND&&5>2and1>2false
or||5>2and1>2true
--通过多个条件定位数据
update `student` set `name`='长江七号' where `name`='周'and sex='男'

语法:update 表名 set colnum_name = value,[colnum_name=value…] where [条件]

注意:

  • colnum_name 是数据库的列,

  • 条件,筛选的条件,如果没有指定会修改所有的列

  • value 是一个值也可以是变量

    update `student` set `birthday`=CURRENT_TIME where `name`= '长江七号'and sex='男' ---CURRENT_TIME获取当前时间
    

删除

delete命令

--删除数据
delete from 表名
--删除指定数据
delete from 表名 where [条件];

TRUNCATE 命令

--清空 student表
truncate `student`

delete,truncate 和 delete之间的区别

1.首先看下语法定义:

1, drop table_name
2, truncate table_name
3, delete table_name [where column_name = value]

2.各个删除操作删除的内容:

  • drop:删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表
  • truncate:删除内容、释放空间但不删除定义。与drop不同的是,他只是清空表数据而已
  • delete:删除内容不删除定义,不释放空间

注意:truncate 不能删除行数据,要删就要把表清空

DQL查询数据

DQL(Data Query LANGUAGE: 数据查询语言)

  • 所有的查询操作都用Select
  • 数据库核心语言
  • 使用频率最高的语句

基本查询

-- 查看表结构
desc books 
-- 查询books表使用字段
select * from books
select id,name as '书名',countbook,detail,img,datetime,typeid from books
-- 查询books表的所有书名(不重复)
select distinct name '书名' from books

条件查询

-- 查询价格等于45的书籍
select name '书名' from books where pay=45
-- 查询价格小于20的书籍名称
select name 'bookName'from books where pay<20
-- 查询价格小于等于20的书籍名称
select name from books where pay<=20
-- 查询评论信息为空的书籍id
select id from books where comments is null
-- 查询评论信息不为空的书籍id
select id from books where comments is not null
-- 查询价格在1(包含)到20(包含)之间的书籍价格
select pay 价格 from books where pay>=1 && pay<=20 
select pay 价格 from books where pay>=1 and pay<=20 
select pay 价格 from books where pay between 1 and 20
-- 查询价格小于20且 书名不为空的书籍信息
select * from books where name is not null and pay<=20
-- 查询价格等于12,或4 或3的书籍信息
select * from books where pay=12 or pay=4 or pay=3
select * from books where pay in(12,4,3)
-- 查询书名四个字的书籍信息
select * from books where name like '____'
-- 查询书名最后一位为义字的书籍信息
select * from books where name like '%义'

聚合函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P6t0agMq-1657063080930)(F:\2021年12月4号开始笔记\Mysql\img\image-20220615161125736.png)]

SELECT * FROM `goods`
#查询tyoeid为2的商品数量
select count(1) from goods where typeid=2
#查询价格最高的商品名称和价格
# select max(price)from goods 获取最大价格
select  goodsname as 商品名称,price as 价格 from goods where price=(select max(price)from goods)
# 获取商品平均价格
select avg(price) 商品平均价格 from goods
# 获取商品价格之和
select sum(price) 商品价格之和 from goods

分组查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-acb8JjQs-1657063080932)(F:\2021年12月4号开始笔记\Mysql\img\image-20220617090835036.png)]

select * from element_user
#根据性别分组统计男生女生数量
select sex,count(1) from element_user group by sex
#查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress 工作地址,count(1) from emp where age<45 group  by 工作地址 having count(1)>=3

排序查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHby7Mj1-1657063080933)(F:\2021年12月4号开始笔记\Mysql\img\image-20220617091307836.png)]

select * from goods 
#根据id倒序排序
select * from goods order by id desc
#根据价格排序,如果价格相同根据id倒序排序
select price 价格,id from goods order by price asc,id desc

分页查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvtWTfgP-1657063080934)(F:\2021年12月4号开始笔记\Mysql\img\image-20220617092733298.png)]

select * from goods 
select * from goods limit 0,5
select * from goods limit 10

DQL执行顺序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PdihGhT-1657063080935)(F:\2021年12月4号开始笔记\Mysql\img\image-20220617095718825.png)]

指定查询字段

-- 查询全部的学生 : SELECT 字段 FROM 表
SELECT * from student
-- 查询指定的字段
SELECT `Studentno`,`StudentName` FROM student
-- 别名 AS
SELECT studentname as 名字 FROM student as S
-- 函数 Concat(a,b)
select concat('姓名:',studentname) as 新名字 from student

语法: select 字段,… from 表

去重 distinct

作用:去除select查询处理的结果中重复的数据,只显示一条

-- 查询全部的考试成绩
select * from result 
-- 查询有那些学生参加了考试
select `studentNo` from result
-- 发现重复数据去重
select distinct `studentno` from result

数据库的列(表达式)

-- 查询系统版本(函数)
select VERSION()
-- 计算结果(表达式)
select 100*3-1 as 计算结果为
-- 查询自增的步长(变量)
select @@auto_increment_increment
-- 学员考试成绩+1分查看
select `studentno`,`studentresult`+1 as `提分后` from result

数据库中的表达式: 文本值,列,Null,函数,计算表达式,系统变量…

select 表达式 from 表

where 条件子句

-- 查询考试成绩在90到100之间
select studentno,studentresult from result where studentresult>=90 and studentresult<=100
-- 模糊查询(区间)
select studentno,studentresult from result where studentresult between 95 and 100

模糊查询:比较运算符

运算符语法描述
is nulla is null如果操作符为null,结果为真
is not nulla is not null如果操作符不为null,结果为真
betweena between b and c若a在b和c之间则为真
likea like bsql匹配,如果a匹配b,则结果为真
ina in(a1,a2,a3…)假设a在a1,或者a1…其中某一个值中,结果为真
-- 模糊查询
-- like 结合 %(代表0到任意个字符)  _(一个字符)
-- 查询姓刘的同学
select studentNo,studentName from student where studentName like '刘%'
-- 查询姓刘的同学,名字后面只有一个字的
select studentNo,studentName from student where studentName like '刘_'
-- in (具体的一个或者多个值)
-- 查询1001,1002,1003号学员
select studentno,studentname from student where studentNo in (1001,1002,1003);
查询在北京的学生
select studentNo,studentName from student where address in ('北京');

联表查询

--查询参加考试的同学(学号,姓名,科目编号,分数)
selec * from student
selec * from result
/*思路:
1分析需求,分析查询的字段来自那些表
2确定交叉点(这两个表中那个数据是相同的)
判断条件:学生表中的studentNo=成绩表 studentNo
*/
---join on 连接查询
--- where 等值查询
select s.studentNo,studentName,subjectNo,studentResult from student as s inner join result as r where s.studentNo=r.studentNo
--Right
select s.studentNo,studentName,subjectNo,studentResult from student s Right join result r on s.studentNo=r.studentNo
--Left join
--查询缺考的同学
select s.studentNo,studentName,subjectNo,studentResult from student s Left join result r on s.studentNo=r.studentNo where studentresult is null
操作描述
inner join如果表中至小有一个匹配,就返回行
left join即使右表中没有匹配,也会从左表中返回使用的值
right join即使左表中没有匹配,也会从右表中返回使用的值

分页和排序

排序 ORDER BY

--ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

分页

--语法:limit 起始值,页面大小
--网页应用:当前,总的页数,页面大小
--第n页  limit (n-1)*pageSize,pageSize
--【paheSize:页面大小】
--【(n-1)*pageSize:起始值】
--【n:当前页】
--【数据总数/页面大小=总页数】

语法:limit(查询起始下标,pagesize)

mysql函数

1常用函数:

--数学函数
select ABS(-8)--绝对值
select CEILING(9,4)--向上取整
select floor(9,4)--向下取整
select rand()--放回一个0~1之间的随机数
select sign(10) --判断一个数的符合 负数返回-1,正数返回1
--字符串函数
select CHAR_LENGTH('asf')--字符串长度
select concat('我','和','你')--拼接字符串


2聚合函数

函数名称描述
count

事务

事务原则:ACID原则 原子性,一致性,隔离性,持久性(脏读,幻读)

原子性(Atomicity)

要么都成功,要么都失败

一致性(Consistency):事务前后的数据完整性要保持一致

隔离性(Isolation):多个用户并发访问数据库时,数据库为每一个用户开启事务,不能被其他事务的操作数据所干扰

持久性(Durability):事务一旦提交不可逆

隔离导致的一些问题

**脏读:**指一个事务读取另外一个事务未提交的数据

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同

虚读(幻读):指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

执行事务

CREATE TABLE `account`(
`id` int(3) NOT null auto_increment,
`name` varchar(30) not null,
`money` DECIMAL(9,2) not null,
PRIMARY key(`id`)
)ENGINE=innodb default charset=utf8
INSERT into account(name,money)VALUES('a',2000.00),('b',1000)
-- 模拟转账
set autocommit=0; --关闭自动提交
start transaction --开启一个事务

UPDATE account set money=money-500 where `name`='a'
UPDATE account set money=money+500 where `name`='b'
COMMIT;--提交事务
ROLLBACK;--回滚
set autocommit =1 --恢复默认值

索引

索引的分类

  • 主键索引(primary key)

    • 唯一标识,主键不可重复,只能有一个作为主键
  • 唯一索引(UNIQUE key)

    • 避免重复出现,唯一索引可以重复,多个列都可以标识,唯一索引
  • 常规索引(KEY/index)

    • 默认的 index key 关键字来设置
  • 全文索引(FullText)

    • 快速定位数据

用户管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D2z1tsIU-1657063080935)(F:\2021年12月4号开始笔记\Mysql\img\image-20220617105234719.png)]

权限管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g96DAtN5-1657063080936)(F:\2021年12月4号开始笔记\Mysql\img\image-20220617110105139.png)]

字符串函数

#字符串拼接
select concat('hello','Mysql')
#将大写字符转小写
select lower('HEllo')
# 将小写字符转大写
select upper('Hello')
#左填充字符  : 000010
select lpad('10',6,'0')
#右填充字符
select rpad('10',5,'-')
#去左右两边空格
select trim('  h e  ')
#substring 字符串截取
select substring('Hello mysql',1,5)

附带java版方便记忆

package 字符串;

import cn.hutool.core.text.StrBuilder;
import org.junit.jupiter.api.Test;

public class 字符串 {
    @Test
    public void t(){
        String str=" Hello";
        //字符串拼接 (这里是new了一个新的对象)
        System.out.println("字符串拼接:"+str.concat("Word"));
        //将字符串转小写
        System.out.println("字符串转小写:"+str.toLowerCase());
        //将字符串转大写
        System.out.println("字符串转大写:"+str.toUpperCase());
        //左右填充
        String rpad = RPAD(str, 7, "-");
        System.out.println("右填充:"+rpad);
        String lpad = LPAD(str, 7, "-");
        System.out.println("左填充:"+lpad);
        //去掉左右空格
        System.out.println("去掉左右空格:"+str.trim());
        //#substring 字符串截取
        System.out.println("字符串截取:"+str.substring(0,4));

    }

    /**
     * 右填充
     * @param str 被填充值
     * @param n 达到n个字符长度
     * @param pad 填充值
     * @return
     */
    public static String RPAD(String str,int n,String pad){
        StringBuffer stringBuffer = new StringBuffer(str);
        int sum=n-str.length();
        for (int i=0;i<sum;i++){
            stringBuffer.insert(stringBuffer.length(),pad);
        }
        return String.valueOf(stringBuffer);
    }
    /**
     * 左填充
     * @param str 被填充值
     * @param n 达到n个字符长度
     * @param pad 填充值
     * @return
     */
    public static String LPAD(String str,int n,String pad){
        StringBuffer stringBuffer = new StringBuffer(str);
        int sum=n-str.length();
        for (int i=0;i<sum;i++){
            stringBuffer.insert(0,pad);
        }
        return String.valueOf(stringBuffer);
    }

}

数学函数

#数值函数
#向上取整
select ceil(1.1); 
#向下取整
select floor(1.9); 
#取余
select mod(6,4);
#0-1之间的随机数
select rand();
#四舍五入保留2位小数
select round(2.432,2)

select ceil(1.1) 向上取整,floor(1.9) 向下取整,mod(6,4) 取余,
rand() '0-1之间的随机数',ROUND(2.432,2) '四舍五入保留2位小数'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSR9zi8k-1657063080937)(F:\2021年12月4号开始笔记\Mysql\img\image-20220619214705268.png)]

日期函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UY1G6Svh-1657063080937)(F:\2021年12月4号开始笔记\Mysql\img\image-20220621145934356.png)]

流程函数

select * from goods 
#流程控制函数 if
select if(false,'ok','Error')
# ifnull
select ifnull('ok','Default') #ok
select ifnull(null,'Default') #Defaul

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Zk5OGZx-1657063080937)(F:\2021年12月4号开始笔记\Mysql\img\image-20220619095728546.png)]

约束

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lFscXATo-1657063080938)(F:\2021年12月4号开始笔记\Mysql\img\image-20220621151402882.png)]

外键映射

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UY8jV5x7-1657063080938)(F:\2021年12月4号开始笔记\Mysql\img\image-20220625111147025.png)]

添加外键

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);

删除和更新

select * from goods
#流程控制函数 if
select if(false,‘ok’,‘Error’)

ifnull

select ifnull(‘ok’,‘Default’) #ok
select ifnull(null,‘Default’) #Defaul


[外链图片转存中...(img-2Zk5OGZx-1657063080937)]

# 约束

[外链图片转存中...(img-lFscXATo-1657063080938)]

## 外键映射

[外链图片转存中...(img-UY8jV5x7-1657063080938)]

> 添加外键

```sql
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);

删除和更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YR72MV7Q-1657063080939)(F:\2021年12月4号开始笔记\Mysql\img\image-20220627110632790.png)]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值