name是表名
where后面跟的是条件
where中的运算符
=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于
!=不等于
where中的逻辑运算符
and多个条件必须都等于true
right join
会从右表中返回所有的值,即使左表中没有匹配
自连接
😀自己的表和自己的表连接 核心:一张表拆成两张一样的表
WHERE 子句
1 select * from name where id=1;#查询name表name字段id=1的值
2 select * from name where age>16;#查询name表name字段id大于16的值
3 select * from name where name='小乐' and age=18;#查询name字段等于小乐并且age等于18的值
4 select * from name where name='小乐' or age=18;#查询name字段等于小乐或者age等于18的值
5 select * from name where not name='小乐';#查询除了name字段等于小乐的所有值
6 select * from name where name like '%乐%';#查询name字段中包含乐的值
7 select * from name where age in (18,11);#查询age字段中包含18 11 的值or一个条件等于true就行
not 反逻辑 筛选不满足条件的
where特殊条件
between 在某个范围
like模糊查询
in指定多个值
更新数据
如果需要更新MySQL数据可以使用update来更新
1 update name set name='马小乐' where id=3;#把字段id为3的name值修改成马小乐 2 update name set name='小乐', age=99 where id=3;#把字段id为3的值的name和age 同时修改
数据分页和 排序
1 #分页 limit 2 分页的好处 3 缓解数据库压力 给人的体验更好 4 select * from table_name limit [offset,] rows 5 offset:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为0。 开始查询 的下标 6 rows:返回具体行数。 7 select * from 表名 limit 10;检索前10条数据 8 select * from 表名 limit 1 10 检索 1 , 10 从第2行开始检索10条数据 9 10 #排序 11 升序 asc 12 降序 desc 13 select * from name order by age asc;#按照id值从小到大排序 14 select * from name order by age desc;#按照id值从大到小排序
asc从小到大排序
desc从大到小排序
子查询和嵌套查询
1 #子查询 2 在where语句中嵌套一个子查询语句 3
数据分组
1 select name, count(*) from name group by name; 2 select 显示的字段, count(*) from 表名 group by 字段;
正则表达式
1 select * from name where name regexp '^小';#查询以小开头的数据 2 select * from name where name regexp '乐&';#查询以可结尾的时间 3 select * from name where name regexp '小';#查询包含小的 4 select * from name where age regexp '^1|9$';#查询age字段以1开头或9结尾的数据 5 select * from name where name regexp '[爱小]';#匹配包含爱或者小的字符 6 select * from name where name regexp '[^爱乐]';#匹配为包含爱乐的所有字符 7 8
^匹配字符串开始的位置
$匹配字符串结束的位置
.匹配单个字符
[...]字符集合 匹配所包含的任意一个字符
|或
*匹配所有
+匹配前面的表达式一次或者多次
{n}匹配n次
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
MySQL常用函数
1 数学运算 2 3 ABS #返回数的绝对值 4 MySQL [test-txt]> select abs(-1); 5 +---------+ 6 | abs(-1) | 7 +---------+ 8 | 1 | 9 +---------+ 10 1 row in set (0.02 sec) 11 12 #CEILING 向上取整 13 MySQL [test-txt]> select ceiling(5.5); 14 +--------------+ 15 | ceiling(5.5) | 16 +--------------+ 17 | 6 | 18 +--------------+ 19 1 row in set (0.02 sec) 20 21 FLOOR #向下取整 22 MySQL [test-txt]> SELECT FLOOR(5.5); 23 +------------+ 24 | FLOOR(5.5) | 25 +------------+ 26 | 5 | 27 +------------+ 28 1 row in set (0.03 sec) 29 30 RAND #返回一个0-1之间的随机数 31 MySQL [test-txt]> select rand(); 32 +--------------------+ 33 | rand() | 34 +--------------------+ 35 | 0.9333476274584863 | 36 +--------------------+ 37 1 row in set (0.02 sec) 38 39 40 SIGN #判读一个数的符号 正数返回1 负数返回-1 41 MySQL [test-txt]> select sign(100); 42 +-----------+ 43 | sign(100) | 44 +-----------+ 45 | 1 | 46 +-----------+ 47 1 row in set (0.02 sec) 48 49 MySQL [test-txt]> select sign(-100); 50 +------------+ 51 | sign(-100) | 52 +------------+ 53 | -1 | 54 +------------+ 55 1 row in set (0.02 sec) 56 57 字符串函数 58 59 CHAR_LENGTH #返回一串字符串长度 60 61 MySQL [test-txt]> SELECT CHAR_LENGTH('xiaole521') as '字符串长度'; 62 +-----------------+ 63 | 字符串长度 | 64 +-----------------+ 65 | 9 | 66 +-----------------+ 67 1 row in set (0.02 sec) 68 69 CONCAT#拼接字符串 70 MySQL [test-txt]> SELECT CONCAT('爱','小','乐') AS '拼接字符串'; 71 +-----------------+ 72 | 拼接字符串 | 73 +-----------------+ 74 | 爱小乐 | 75 +-----------------+ 76 1 row in set (0.02 sec) 77 78 79 LOWER #把大写字母转小写 80 MySQL [test-txt]> SELECT LOWER('XiaoLe'); 81 +-----------------+ 82 | LOWER('XiaoLe') | 83 +-----------------+ 84 | xiaole | 85 +-----------------+ 86 1 row in set (0.02 sec) 87 88 89 UPPER #把小字母转大写 90 MySQL [test-txt]> SELECT UPPER('XiaoLe') as '转大写'; 91 +-----------+ 92 | 转大写 | 93 +-----------+ 94 | XIAOLE | 95 +-----------+ 96 1 row in set (0.02 sec) 97 98 INSTR #返回第一个子串的位置(下标) 99 MySQL [test-txt]> SELECT INSTR('xiaole','a'); 100 +---------------------+ 101 | INSTR('xiaole','a') | 102 +---------------------+ 103 | 3 | 104 +---------------------+ 105 1 row in set (0.02 sec) 106 107 REPLACE #替换指定字符串 108 MySQL [test-txt]> SELECT REPLACE('爱小乐','爱','超级') as '替换指定字符串'; 109 +-----------------------+ 110 | 替换指定字符串 | 111 +-----------------------+ 112 | 超级小乐 | 113 +-----------------------+ 114 1 row in set (0.02 sec) 115 116 SUBSTR #返回指定字符串 从1开始的 SUBSTR('要截取的字符串',截取的位置,要截取的长度) 117 mysql> SELECT SUBSTR('超级爱小乐',1,4) AS '返回指定字符串'; 118 +-----------------------+ 119 | 返回指定字符串 | 120 +-----------------------+ 121 | 超级爱小 | 122 +-----------------------+ 123 1 row in set (0.01 sec) 124 125 126 REVERSE #反转字符串 REVERSE('要反转的字符串'); 127 mysql> SELECT REVERSE('超级爱小乐'); 128 +----------------------------+ 129 | REVERSE('超级爱小乐') | 130 +----------------------------+ 131 | 乐小爱级超 | 132 +----------------------------+ 133 1 row in set (0.01 sec) 134
SQL语句的分类数据定义语句(DDL)
1 创建------->create 2 修改-------->alter 3 删除-------->drop
数据操纵语句(DML)
主要是对表数据的插入更新删除
1 插入------>insert 2 更新------>update 3 删除=----->delete
事务控制语句(TCL)
主要是对数据库中"事务"进行管理
1 提交----->commit 2 回滚----->rollback
数据查询语句(DQL)
1 查询----->select
事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删
除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文
章等等,这样,这些数据库操作语句就构成一个事务!在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全
部不执行。
事务用来管理 insert,update,delete 语句
一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割
性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性
(Durability)。
原子性:
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中
间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,
就像这个事务从来没有执行过一样。
一致性:
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完
全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成
预定的工作。
隔离性:
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务
并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交
(Read uncommitted)、读提交(read committed)、可重复读(repeatable
read)和串行化(Serializable)。
持久性:
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行
COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START
TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动
提交。
事务控制语句:
BEGIN 或 START TRANSACTION 显式地开启一个事务;
COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,
并使已对数据库进行的所有修改成为永久性的;
ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事
务,并撤销正在进行的所有未提交的修改;SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以
有多个 SAVEPOINT;
RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行
该语句会抛出一个异常;
ROLLBACK TO identifier 把事务回滚到标记点;
SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别
有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和
SERIALIZABLE。
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
1 begin;事务的开始 2 要执行的语句 #事务回滚 3 commit;#提交事务
ALTER命令
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。