SQL的执行顺序:
–第一步:执行FROM [JOIN ON]
–第二步:WHERE条件过滤
–第三步:GROUP BY分组
–第四步:执行SELECT投影列
–第五步:HAVING条件过滤
–第六步:执行ORDER BY 排序
SQL语言分类:
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
DML:数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限(数据控制语句,用于控制不通数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,如COMMIT、ROLLBACK、GRANT、REVOKE)
DDL: create、drop、alter
DML:
insert
格式:INSERT INTO 表名(字段1,字段2[,…]) VALUES (字段1的值,字段2的值,…);
update
格式:UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
delete
格式:DELETE FROM 表名 [WHERE 条件表达式];
DQL:
select
格式:SELECT 字段名1,字段名2[,…] FROM 表名[WHERE 条件表达式];
DCL:
alter
格式:ALTER TABLE 旧表名 RENAME 新表名;
清空表,删除表内的所有数据
方法一:
delete from yyy3;
#DELETE清空表后,返回的结果内有删除的记录条目;
DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。
方法二:
truncate table test01;
#TRUNCATE清空表后,没有返回被删除的条目: TRUNCATE 工作时是将表结构按原样重新建立,
因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE 清空表内数据后,
ID会从1开始重新记录
#删除
速度
drop> truncate > delete
安全性
delete 最好
创建临时表
临时表创建成功之后,使用SHOWTABLES命令是看不到创建的临时表的,临时表会在连接退出
后被销毁。
如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除
临时表。
PS:无法创建外键
CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[, …]
[, PRIMARY KEY (主键名)]);
示例:
create temporary table xxx (
id int(4) zerofill primary key auto_ increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
insert into xxx values (1,‘zhangsan’,123456,‘running’) ;
select * from test03;
show tables;
quit
select * from test03;
场景
1.可做测试环境使用 比如删除大量数据的时候,可以创建临时表 做一个复杂删除
2、需求要今天所有的注册王者荣耀的新号码
MySQL中6种常见的约束
主键约束(primary key)
外键约束(foreign key)
非空约束(not null)
唯一性约束(unique [key|index])
默认值约束(default)
自增约束(auto_increment)
外键的定义:如果同一个属性字段x在表一中是主键,而在表二中不是主键,
则字段x称为表二的外键。
创建外键约束作用(误删,修改),保证数据的完整性和一致性。
主键表和外键表的理解
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)
注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,
主表外键字段和从表的字段具备相同的数据类型、字符长度和约束。
数据类型:
数值类型:
日期类型:
字符串类型:
关于int 长度问题:
如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,比如插入1,显示为00000000001,左边补了 10 个零直至长度达到 11 位
设置字段的显示宽度并不限制字段存储值的范围,如果你设置int(6),但是仍然可以存储99999999
设置的字符宽度只对数值长度不满足宽度时有效,比如设置int(6),插入1时,长度不足6,因此在左边补充5个零,如果你插入888888888,那个显示宽度就不起作用了
基础语句:
查询
SHOW DATABASES;
创建
CREATE DATABASE 数据库名称;
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
CREATE DATABASE IF NOT EXISTS 数据库名称; (推荐使用)
删库(跑路)
DROP DATABASE 数据库名;
DROP DATABASE IF EXISTS 数据库名; (推荐使用(一般情况下别用,除非二般情况))
使用
SHOW DATABASE();
USE 数据库名;
desc xxx;
如图:
高级语句:
按关键字排序
1.1、使用ORDER BY语句来实现排序
1.2、排序可针对一个或多个字段
1.3、ASC:升序,默认排序方式
1.4、DESC:降序
1.5、ORDER BY的语法结构
语法:
1 select column1,column2,… from 库名 order by column1,column,… asc|desc;
条件查询:where 后面可以跟
连接查询:
聚合函数:
WHERE和HAVING区别
-
WHERE:是在分组之前使用(可以没有GROUP BY),不允许使用统计函数;
-
HAVING:是在分组之后使用(必须结合GROUP BY),允许使用统计函数。