from join on where group by having select distinct order by limit
有了解的同学可以直接掠过,我就简要写一些常用的命令
UPDATE users SET status = 10 WHERE username='ityi;
DELETE FROM users WHERE username='php'
select count(1) from nav
select id,name from nav limit 2;
select id,name from nav limit 2,2;
DROP TABLE test;
查找一个文章并显示每个文章的分类
这里有用到join on
我就写一下解释吧
join
说白了就是两个表合在一起了可能有相同的列,就是
第一章表的每一行和第二章表的每一张匹配,如果第一章表有两行
第二张表为三行得到的新表里面就有2*3=6行,on后面跟着限制条件
我觉得和where是差不多的作用效果
查询数据的时候能不用连接语句尽量不要使用,笛卡尔积连接查询速度最慢,项目中用的比
较多的是内连接
内连接:inner join
只返回两个表中连接字段相等的行。
左外连接:left join
返回包括左表中的所有记录和右表中连接字段相等的记录。
右外连:right join
返回包括右表中的所有记录和左表中连接字段相等的记录。
MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。
如果没有索引,执行查询时候必须从第一条记录开始,扫描整个表的记录,直到符合要求的记录。如果有了索引,mysql 无需扫描任何记录即可顺序找到目标记录的位置。简单说来, 索引就是提高查找数据速度,数据量越多,效果越明显。
CREATE INDEX indexName ON mytable(username);
create index index_name on class(name);
show index from table_name
show index from class
show index from class\G
drop index index_name on class
create unique index index_name on class(name)
alter table class add index index_name(name);
alter table class add unique index_name(name);
alter table class drop index index_name;
Mysql 中常见的索引类型有普通索引、唯一索引、全文索引、空间索引 Spatial这部分内容我慢慢补充吧,我后面写项目的时候一步步帮大家补充完整。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
目的就是保证事务的一致性,防止出现程序错误或数据库没法连接等异常情况导致数据库的不一致
Mysql 中用 BEGIN
, ROLLBACK
, COMMIT
来实现事务:
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
建表的例子:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0
CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`balance` decimal(10, 2) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES (1, '张三', 100.00);
INSERT INTO `user` VALUES (2, '李四', 100.00);
SET FOREIGN_KEY_CHECKS = 1;
事务的执行:
begin;
update user set balance = balance-100 where id=1
rollback;
注意:
发现一个问题是命令行执行后的结果和Navicat执行后直接查看表的结果会有区别:
是因为只有commit
之后表中内容才会发生改变,事务才会执行。
还有一个点要注意,rollback
只能在事务里面才能回滚。
Mysql 中的锁有表级锁和行级锁,这里主要给大家讲讲最常用的表级锁
可以并发读,但是不能并发写,读锁期间,没释放锁之前不能进行写操作。
lock table user read;
unlock tables
使用场景:读取结果集的最新版本,同时防止其他事务产生更新该结果集 主要用在需要数据依存关系时确认某行记录是否存在,并确保没有人对这个记录进行 UPDATE 或者 DELETE 操作
只有锁表的用户可以进行读写操作,其他用户不行 (并发下对商品库存的操作)
lock table user write;
unlock tables