数据库(DataBase)是用来组织、存储和管理数据的仓库。
SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。
DQL 数据查询语言
SELECTDML 数据操纵语言
INSERTUPDATEDELETEDDL 数据定义语言
CREATEDROPALTERDCL 数据控制语言
GRANTREVOKEtinyintsmallintintbigintfloatdoubledecimalcharvarchartextblobdatetimedatetimetimestrapYYYYYYYY-MM-DDHH-MM-SSYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SStimestamp 的数值是与时区相关
UTC(Universal Time Coordinated)系统协调时区(全时间统一公用的时间)进行存储,以系统当前所在时区进行显示| 对比 | timestamp | datetime |
|---|---|---|
| 存储空间 | 4字节 | 8字节 |
| 时区 | 与时区有关 | 不受时区影响 |
| 时间范围 | 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
[inner] join onleft join onright join ongroup byorder by
limit
abs(x) 绝对值ceil(x) 返回大于或等于x的最大整数round(x) 返回四舍五入的整数floor(x) 返回等于或小于x的最大整数mod(x) 获取 a / b 的余数(如果id需要是偶数或者奇数时就可以使用mod)


select 字段 from 表名 where 查询条件(分组前) group by(含聚合)having 查询条件(分组后排序) order by(排序) limit 分页;
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT
内连接:[inner] join on 只显示两表共有的数据(交集数据)
#查找 emp 中拥有部门的所有员工信息(也包含部门信息)
SELECT * FROM emp e INNER JOIN dept d ON e.dNo = d.deptNo;
外连接:
left join on 显示 join 左边的表的所有数据(不管两个表是否匹配),对于不匹配的部分都用 NULL 表示right join on 显示 join 右边的表的所有数据(不管两个表是否匹配),对于不匹配的部分都用 NULL 表示以谁为主谁中的所有信息都出现
SELECT * FROM emp e LEFT JOIN dept d ON e.dNo = d.deptNo;
SELECT * FROM emp e RIGHT JOIN dept d ON e.dNo = d.deptNo;
网上有的说数据库的 5 大约束,有的是 6 大约束,MySQL中没有检查约束 的
/*Oracle*/
CREATE TABLE student(
id int primary key auto_increment,/*主键约束*/
name varchar(50) not null,/*非空约束*/
sex varchar(10) default '男',/*默认约束*/
age number(9),
check(age>=18 and age<=70)/*检查约束*/
);
/*MySQL*/
CREATE DATABASE IF NOT EXISTS company;
USE company;
DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS emp;
CREATE TABLE dept(
did INT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID',/*主键约束*/
dname VARCHAR(50) UNIQUE COMMENT '部门名称'/*唯一约束*/
);
CREATE TABLE emp(
uid INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID',
ename VARCHAR(50) NOT NULL COMMENT '员工姓名',/*非空约束*/
etype VARCHAR(50) DEFAULT '普通员工' NOT NULL COMMENT '员工类型',
dept_id INT COMMENT '部门ID',/*默认约束*/
FOREIGN KEY(dept_id) REFERENCES dept(did)/*外键约束*/
);
事务是数据库操作最小的逻辑工作单元,它包含了一个或多个业务操作,这些操作要么都执行要么都不执行,是不可分割的,一起向系统去提交的。事务常常用来确保数据的一致性。
项目中我们通过 @Transactional 注解,这个注解是Spring框架提供的事务管理(声明式事务管理)
通常我们在业务层中,若一个方法中涉及到多个增删改查操作,此时需要在该方法上通过 @Transactional 注解开启事务管理;也可以在业务层接口上添加@Transactional
START TRANSACTIONshow variables like 'autocommit';
SET AUTOCOMMIT=0 禁止自动提交SET AUTOCOMMIT=1开启自动提交COMMITROLLBACK创建视图:
create view 视图名 as select查询语句...
create view 视图名(列名1,列名2...) as select查询语句...
使用视图:
select * from 视图名
删除视图:
drop view 视图名
用途:
* 号,查什么字段写什么字段select * from emp limit 1;or 关键字,容易引起索引失效GRANT 命令,添加新的用户,授予远程访问权限grant all privileges on *.* to root @"%" identified by "root";
flush privileges; # 强制刷新
localhost 登入mysql后,更改 mysql 数据库里的 user 表里的 host 项,将 localhost 改称 %update user set Host = '%' where Host = 'localhost' and User='root';
flush privileges; # 强制刷新
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
在数据中,索引相当于字典的目录一下,通过索引可以快速的检索数据。
MySQL 索引的建立对于 MySQL 的高效运行时很重要的,索引可以大大提高 MySQL 的检索速度。
创建索引时,需要确保该索引时应用在 SQL 查询语句的条件(一般作为 where 子句的条件)
创建索引的字段我们建议是唯一,不为空,经常被查询的字段。
CREATE INDEX indexName ON tableName (username);ALTER TABLE tableName ADD INDEX indexName (columnName);DROP INDEX indexName ON tableName;CREATE TABLE tableName(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username)
);
CREATE UNIQUE INDEX indexName ON tableName(username);ALTER table tableName ADD UNIQUE [indexName] (username);CREATE TABLE tableName(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username)
);

explain
索引会大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERT,UPDATE,DELETE。因为更新表时,MySQL 不仅要保存数据,还要保存(更新)一下索引文件。
B-Tree 平衡二叉树的结构)可以大大加快数据的检索速度,这也是创建索引的最主要的原因。数据量庞大
该字段经常作为查询条件
该字段很少的DML操作(insert,delete,update),因为操作之后,索引需要重新排序
建议
select *like 左边包含 %or 关键字not in 和 not existsorder by 的坑- [x] 持续更新中…