MySQL的常用命令符、增删改查的方法、以及修改表的结构语句和修改表的记录语句。
创建一个完整的数据库:
Create database 库名 default character set utf8 collate utf8_general_ci;
删除一个数据库:
Drop database 库名;
查询所有数据库:
Show databases;
选择当前数据库:
Use 库名;
导入外部文件:
Source ‘路径’ 没有分号
导出数据库文件:
Into outfile ‘路径’;
创建一个完整的表:
Create table 表名 (字段名) default charecter set utf8 collate utf8_general_ci;
删除一个表:
Drop table 表名;
清空表的记录:
Truncate 表名;
查看表的结构:
Desc 表名;
查看所有的表:
Show tables;
DDL部分
修改数据表,包括:
修改列的名称:
Alter table 表名 change 旧的字段名 新的字段名 类型;
修改列的类型:
Alter table 表名 modify 字段名 新的类型;
增加一列:
Alter table 表名 add column 字段名 类型;
删除一列:
Alter table 表名 drop column 字段名;
DML部分
给某个字段增加记录:
Insert into 表名(字段名) values (记录);
给多个字段增加记录:
insert into 表名(字段名1,字段名2,..) values(记录1,记录2,..);
给所以字段增加记录:
Insert into 表名 values (与之对应的记录);
给某个字段增加多条记录:
Insert into 表名 (字段名) values(记录1),(记录2),(记录3),(…);
删除数据:
Delete from 表名 where 要删除的记录;
注意:如果不加where条件的话会删除表中所有的记录;
修改表中的记录:
Update 表名 set 字段名=’新的内容’ where 指定位置;
注意:如果没有where语句,则会修改全部的内容;
查看表的所有记录:
Select * from 表名;
查看表的某个字段的记录:
Select 字段名 from 表名;
查看符合条件的记录:
Select 字段名 from 表名 where 条件;
and 且、or 或、in 在一定范围、not in 不在范围、between and 指定范围
5000;
表示查找1000到5000间的东西
排序:
Order by 字段名 排序方式(asc 升序 、desc 降序)
Select 字段名 from 表名 order by 字段名 排序方式;
筛选:
Limit 筛选
Select 字段名 from 表名 limit 个数;
筛选一般和排序一起使用
Limit3 表示筛选3个;limit3,5表示筛选3个后再选5个
模糊查询:
Like ‘%x%’
Like后面跟关键字 引号引住后加百分号表示有这样的字体就会找出来.
子查询、连接查询、联合查询、事务和触发器以及视图、索引。
联合查询:
使用union来联合两个或多个表;
联合查询的主要用途是将数据库中的信息输出到一个表中,但是和order by 一起使用时会屏蔽掉排序方式,所以我们要在其后边加上limit
联合查询默认情况下回会覆盖掉重复的部分,所以我们使用union all 语句使它不能被覆盖。
子查询:
概念:一个select查询语句的结果是另一个select查询语句的条件。
子查询分为:
标量子查询:查询的结果是个单一的值;
列子查询:查询的结果是一列数据;
表子查询:查询的结果是一个列表;
连接查询:
当我们的需求不是一个表能满足的时候我们就需要连接另一个表来辅助我们查询,这时候就要用到连接查询。
连接查询用到的语句有:内连接和外连接
内连接:inner join 默认情况就是内连接 (join)
外连接:left join 和 right join
语法:table1 join table2 on table1.某个字段=table2.某个字段;
注意:当查询的字段不是唯一的时候,要在字段的名字前加表名,表示属于哪个表的字段。
事务和触发器:
事务:是指逻辑上的一组操作,组成操作的个个单元要么全部成功,要么全部失败。
事务是mysql数据库的特性,想要开启事务要求数据表必须是innoBD存储引擎。
开启事务的方式:start transaction
提交:commit
回滚:rollback
事务的原理:当我们开启事务的时候,自动提交机制会关闭,并且不再直接影响到数据表,只有当我们执行commit语句的时候才会影响到数据表,而当sql语句失败时执行rollback回滚,不会影响到数据表。同样,还有set autocommit=0 也能将自动提交机制关闭
但是和事务的区别是事务在开启的时候,当用户执行commit语句时自动提交机制又会被打开,而set autocommit=0 是不会自动开启提交机制的 只有将set autocommit=1 时才会开启自动提交机制。
事务的特性:
1、原子性:只有当语句全部成功是才会影响到数据表;
2、一致性:所有数据必须保持一致的时候才会影响到数据表;
3、隔离性:事务间互不影响;
4、永久性:事务一旦执行,将永久有效。
触发器:监听数据表中的某个行为,一旦行为发生则执行某个程序。
语法: create trigger 触发器名字 触发时间 触发行为 on 表名 for each row 触发后的 行为;
删除触发器:drop trigger 触发器名字;
触发时间包括: after 行为发生之后
before 行为发生之前
触发行为包括:增加、删除、修改
将两个表数据同步联系在一起的方法:使用new 或者是 old
New :表示更新之后
Old :表示更新之前
假如:我现在购买5个iPhone6手机,相应的库存表减少5个
create trigger alter_goods_num after insert on `order` for each row update store set goods_number = goods_number-new.buy_number where goods_id=new.goods_id;
视图:
视图是一个虚拟的表,他的内容、结果是根据查询语句得来的。
语法: create view 视图名称 as select 语句;
修改视图: alter view 视图名称 as select 语句;
删除视图:drop view 视图名称 as select 语句;
作用:
- 针对不同的用户可以设置不同的访问权限;
- 可以快速查看到经常使用的内容;
索引:
用于快速寻找某个程序的标识;
语法:
create 索引类型 index 名称 on 表名 字段名;
索引类型包括:
主键索引:primary key
唯一索引: unique
索引的好处:可以快速找到查找的内容;
索引的坏处:占磁盘空间、增删改查的速度会降低