按照数据结构来组织、存储和管理数据的仓库。
username | content |
---|---|
zock | 希望肺炎疫情尽快结束! |
张三 | 詹皇浓眉合砍61分湖人险胜凯尔特人 |
李四 | 今天裁判真的没有帮湖人,浓眉有很多篮下进攻 |
vue | 布朗没吃假动作,,只后仰跳投没法防 |
腾讯体育 | 25日凌晨2点视频直播科比追思会 |
数据类型 | 数值范围 |
---|---|
tinyint | -128~127 |
smallint | -32768~32767 |
mediumint | -8388608~8388607 |
int | -1247482648~2147483647 |
bigint | +-9.22*10的18次方 |
数据类型 | 含义 |
---|---|
char | 最多255个字符 |
varchar | 最多65532个字符 |
tinytext | 最多255个字符 |
text | 最多65535个字符 |
mediumtext | 最多2的24次方-1个字符 |
Longtext | 最多2的32次方-1个字符 |
数据类型 | 含义 |
---|---|
date | 日期,格式:YYYY-MM-DD |
time | 时间,格式:HH:MM:SS |
datetime | 日期时间,格式:YYYY-MM-DD HH:MM:SS |
timestamp | 功能和datetime相同(但范围较小) |
year | 年份,格式:YYYY |
数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值
需求是:想做一张所有学生每天的考勤表。
如下图中红框为主键显示,蓝框为audo_increment选择
下图中单位和数量并不依赖于用户ID,而是依赖于商品ID,帮设计有缺陷
应该像下图这样设计:
下图中主键为用户ID,中奖金额并不依赖于用户ID,而是依赖于中奖等级,所以设计不对,应该消除这样的传递依赖
应该像下图这样设计两张表:
要求如下:
Structured Query Language结构化查询语句,一种专门用来与数据库通信的语言。
insert into 表名 values(值1, 值2, 值3, ...);
插入成功:
insert into 表名(列1, 列2, 表3, ...) values(值1, 值2, 值3,...);
没有指定的字段会用默认值填充
insert into 表名(列1, 列2, 列3, ...) values (值1,值2,值3,...), (值1,值2,值3,...),...;
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between | 在指定的两个值之间 |
例:
SELECT * FROM `user` WHERE LEVEL BETWEEN 50 AND 100;
例:
SELECT * FROM `user` WHERE LEVEL is NULL;
操作符 | 说明 |
---|---|
AND | 与 |
OR | 或 |
IN | 匹配值,与OR相当 |
NOT | 非 |
例:
SELECT * FROM `user` WHERE username = 'zock' or username = 'admin';
注:AND的优先级高于OR,下句会先查询and语句,再查询or语句
SELECT * FROM `user` WHERE username = 'zock' or username = 'admin' AND is_admin = 1
如果想先查询or语句,可以用括号先把前半句包含起来
SELECT * FROM `user` WHERE (username = 'zock' or username = 'admin') AND is_admin = 1
in 语句
SELECT * FROM `user` WHERE username in ('zock','admin');
说明:IN操作符比OR操作符执行速度更快,如果能用IN,尽量不用OR
NOT 操作符
SELECT * FROM `user` WHERE username not in ('zock','admin');
通配符 | 说明 |
---|---|
% | 匹配任意字符、任意次数 |
_ | 总是匹配一个字符 |
例:下句将所以包含zhang的用户名检索出来
SELECT * FROM `user` WHERE username LIKE '%zhang%'
update 表名 set 列名1 = 值1, 列名2 = 值2, ... where 子句
例:下句将uid = 7 的用户名修改为 2020
UPDATE `user` SET username = '2020' where uid = 7;
delete from 表名 where 子句
例:下句执行,会删除uid = 7的记录
DELETE FROM `user` where uid = 7;
例:下句将user表中用户level降序查询出来
SELECT * FROM `user` ORDER BY level DESC;
例:多个列名排序
SELECT * FROM `user` ORDER BY is_admin DESC, LEVEL DESC;
例:下句查询等级最高的前三名用户
SELECT * FROM `user` ORDER BY LEVEL DESC LIMIT 3;
操作符 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
例:下句检索会新加一列(price*quantiey)
SELECT *, price*quantiey FROM `order`;
SELECT *, price*quantiey as totalfee FROM `order`;
函数 | 说明 |
---|---|
Avg() | 返回某列的平均值 |
Count() | 返回某列的行数 |
Max() | 返回某列的最大值 |
Min() | 返回某列的最小值 |
Sum() | 反回某列值之后 |
例:下句中将返回user表中level字段的平均值
SELECT AVG(level) FROM `USER`;
例:下句查询每日的签到分组
SELECT date, COUNT(*) FROM `ATTENCE` WHERE STATUS = 1 GROUP BY date
SELECT date, COUNT(*) as totalcout FROM `ATTENCE` WHERE STATUS = 1 GROUP BY date having count(*) < 2 order by date desc;
子名 | 说明 | 是否必须使用 |
---|---|---|
select | 返回数据 | 是 |
from | 从中检索数据的表 | 从表中选择数据时使用 |
where | 行级过滤 | 否 |
group by | 分组 | 仅在按组计算聚集时使用 |
having | 组级过滤 | 否 |
order by | 排序 | 否 |
limit | 限制检索的行 | 否 |
SELECT * FROM `news`, `user` where news.admin_id = user.uid;
例:如果只想显示news的所有信息,但是只显示user的username信息,可以这样执行:
SELECT news.*,user.username FROM `news`, `user` where news.admin_id = user.uid;
SELECT news.*, user.username FROM `news` join `user` on news.admin_id = user.uid
mysql介绍到此,谢谢观看!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。