MySQL 是最流行的数据库之一,是一个免费开源的关系型数据库管理系统
体积小、速度快、开源、免费
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言
用于存取数据、查询、更新和管理关系数据库系统
from→where→group by→having→order by→limit
种类 | 描述 |
---|---|
DQL语句 | 数据查询语言 select |
DML语句 | 数据操作语言 insert delete update |
DDL语句 | 数据库定义语言 create drop alter truncate |
TCL语句 | 事务控制语言 commit rollback savepoint |
DCL语句 | 数据库控制语言 grant revoke,安全,授权 |
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点数值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
-- 连接 C:\Users\Administrator λ mysql -u root -p Enter password: root -- 退出 mysql> exit
-- 方式1:不连接MySQL的情况下 C:\Users\Administrator λ mysql --version mysql Ver 14.14 Distrib 5.7.34, for Win64 (x86_64) -- 方式2:连接MySQL的情况下 select version();
-- 查询所有存储引擎 mysql> show engines; -- 修改指定存储引擎 alter table 表名 engine=存储引擎名称;
-- 创建数据库 create database db_test; -- 查看有多少个数据库 show databases; -- 切换数据库 use db_test; -- 查看该数据库下有几个表 show tables; -- 查看该数据库下的所有表 show tables from db_test;
前提条件:必须切换相应的数据库下操作,否则报错 ERROR 1046 (3D000): No database selected
-- 创建表结构:表名命名规范:t_ 表名,tbl_表名 CREATE TABLE `tbl_user` ( -- 字段名称 字段类型 长度 字段约束 描述 `id` bigint(11) NOT NULL AUTO_INCREMENT PREPARE KEY COMMENT '主键', `username` varchar(50) DEFAULT NULL UNIQUE COMMENT '用户名', `password` varchar(200) DEFAULT NULL COMMENT '密码', `gender` char(2) DEFAULT '男' CHECK (性别 IN ('男','女')), `nickname` varchar(50) DEFAULT NULL COMMENT '昵称', `age` int(11) DEFAULT NULL COMMENT '年龄', `email` varchar(50) DEFAULT NULL COMMENT '邮箱', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '修改时间', ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 方式1:查看表结构 desc tbl_user; -- 方式2:查看表结构 show create table tb_user; -- 修改表属性 alter table 表名 change 旧属性 新属性 属性类型 character set 字符集编码 -- 直接删除 drop table tbl_user; -- 如果有就删除 drop table if exists tbl_user; -- 删除外键约束 alter table 表名 drop foreign key fk_xxx -- 删除外键约束 alter table 表名 add constraint 主键表名_字段名_fk foreign key(字段名) references 外键表(字段名) on delete cascade; -- 更新外键约束 alter table 表名 add constraint 主键表名_字段名_fk foreign key(字段名) references 外键表(字段名) on update cascade;
-- 导出 C:\Users\Administrator λ mysqldump -u root -p db_test > f:/20210502_test.sql Enter password: root -- 导入 mysql> use db_test; mysql> source f:/20210502_test.sql
符号 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
between...and... | 在两者之间 |
is null | 为空 |
is not null | 不为空 |
and | 并且 |
or | 或者 |
in | 包含 |
or in | 不包含 |
like | 模糊查询 |
order by | 排序 |
limit 起始下标,长度 | 分页 |
符号 | 描述 |
---|---|
sum | 求和 |
avg | 平均值 |
max | 最大值 |
min | 最小值 |
count | 记录数 |
distinct | 取出重复 |
groud by | 分组 |
having | 比较 |
/* 插入 */ INSERT INTO 表名(field1,field2,field3,....) VALUES (value1,value1,value3,....),(value1,value1,value3,....),(value1,value1,value3,....) /* 修改全部,也可以按指定条件修改 */ UPDATE 表名 set field1=value1,field2=value2... [where 条件] /* 仅仅删除表中的所有数据,也可以按条件删除指定行 */ DELETE FROM 表名 [WHERE 条件]; /* 数据、索引、自增等一并删掉 */ TRUNCATE TABLE 表名; /* 查询全部:全表扫码 ,或者指定条件查询 */ SELECT * FROM 表名 where 条件; /* 指定字段查询 ,或者指定条件查询 */ SELECT field1,field2,field3,field4 FROM 表名 [where 条件]; /* 查询记录数 ,或者指定条件查询 */ SELECT count(1) FROM 表名 [where 条件]; SELECT 1 FROM 表名 [where 条件];
以 员工、部门 来作为导向
内连接关联查询
内连接:如果员工表和部门表都能匹配到就会查询出现,否则就不会查询出来。直观点来说:就是如果员工不属于指定部门或者说部门里没有这个员工是不会查询出来。
SELECT u.*,d.deptname FROM tbl_user as u INNER JOIN tbl_dept as d on u.dept_id = d.id;
左右外连接关联查询
左外连接:以左边的表的数据为准,去匹配右边的表的数据。如果匹配到就显示,匹配不到就显示为null。而右外连接刚好相反,是以右边的表为准。
-- 左 SELECT u.*,d.deptname FROM tbl_user as u LEFT OUTER JOIN tbl_dept as d on u.dept_id = d.id; -- 右 SELECT u.*,d.deptname FROM tbl_user as u RIGHT OUTER JOIN tbl_dept as d on u.dept_id = d.id;
子查询:一条查询 sql 语句嵌套在另一条查询 sql 语句内部的查询
SELECT * FROM tbl_user WHERE dept_id = (SELECT id from tbl_dept WHERE deptname='研发部')