我发的MySQL相关内容:
C#基础知识体系框架图,及起对应我发过的博客
linux安装mysql8配置使用,并解决常见问题
MySQL常用命令(DQL)
执行脚本命令,本地生成SQL文件后在服务器执行
// 进入mysql命令控制
mysql
// 如果database已经存在就先删除
show databases;
drop database xx;
// 执行命令添加,如果命令中没有选中对应database则需要创建后进入该dadabase再执行以下命令
source /root/web/xx20220805.sql;
quit
约束
drop table if exists emp;# 表格存在则删除
create table emp (
id int primary key auto_increment,-- 员工id,主键且自增长
ename varchar(50) not null unique, -- 员工姓名,非空且唯一
joindate date not null,-- 入职日期,非空
salaray double(7, 2) not null,-- 工资,非空
bonus double(7, 2) default 0-- 奖金,如果没有设置默认为0
);
insert into emp values(1, '张三', '1991-11-11', 8000, 5000);
select * from emp;
-- 建完表后添加非空约束
# alter table 表名 modify 字段名 数据类型 not null;
-- 删除约束
# alter table 表名 modify 字段名 数据类型;
外界约束
需要先创建主表再创建从表(两个表之间关联关系)
示例代码
drop table if exists emp;# 表格存在则删除
-- 部门表
create table dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(2)
);
-- 员工表
create table emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键dep_id关联id主键
constraint fk_emp_dept foreign key(dep_id) references dept(id)
);
-- 添加必须按照这个顺序,先添加父类再添加子类
insert into dept(dep_name, addr) values('研发部', '广州'), ('销售部', '深圳');
insert into emp(name, age, dep_id) values
('张三', 20, 1),
('李四', 20, 1),
('王五', 20, 1),
('赵六', 20, 2),
('孙七', 23, 2),
('周八', 16, 2);
select * from emp;
-- 删除时需要把子类删除完再删父类
-- 删除外键关联关系
alter table emp drop foreign key fk_emp_dept;
-- 建表后添加外键
alter table emp add constraint fk_emp_dept foreign key(dep_id) references dept(id);
数据库设计
表关系一对多
上面的一个部门对应多个员工,多对一与之相反
表关系多对多
建立第三张中间表。中间表至少包含2个快键,分别关联双方主键。
表关系一对一
在任意一方建立外键,关联对方主键,并设置外键唯一
多表查询
-- 多表查询
select * from emp, dept;# 取所有集合的组合关系,显示内容太多需要筛选
select * from emp, dept where emp.dep_id = dept.id;# 内连接;按照id相同的来显示,会比上一个少显示
select * from emp inner join dept on emp.dep_id = dept.id;# 同上
select * from emp left join dept on emp.dep_id = dept.id;# 左半连接查询
select * from emp right join dept on emp.dep_id = dept.id;# 右半连接查询
# 多表查询,获取部门属于广州的ID,用该id在员工中查找信息
select * from emp where dep_id in (select id from dept where addr = '广州')
事务
整体数据更改前begin,正常执行完后commit提交,中间出现错误rollback回滚到begin时数据,保证数据正常保存或执行完。
begin; # 开始事物
rollback; # 终止事物,从begin开始的全部回滚
commit; # 结束事物,正常执行完
数据库连接池
多个用户访问,数据库连接和关闭比较浪费资源,多个连接后动态分配给用户已解决这个问题。
创建表格时,如下关键字功能
PK:Primary Key, 主键
NN:Not Null, 非空
UQ:Unique, 唯一索引,具有unique属性的列确保所有的记录的值都不同。
BIN:Binary 二进制数据(比text更大的二进制数据)
UN:unsigned 无符号 整数(非负数)
ZF:Zero fill,用0填充所有剩余空间,例如,int(4),而值为1时,则内容显示为0001
AI:Auto Increment,自动增长
G:Generated Column,基于其它列的公式生成值的列
比如我这样添加(默认值错误,只用于描述):
数据库和java变量类型对比
JDBCType JavaType
CHAR String 建议使用 mysql char(1) 代替boolean 0 , 1
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT boolean mysql tinytin(1)
BOOLEAN boolean mysql tinytin(1)
TINYINT byte mysql tinyint
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
CLOB Clob
BLOB Blob
ARRAY Array
DISTINCT mapping of underlying type
STRUCT Struct
REF Ref
DATALINK java.net.URL[color=red][/color]
查看mysql占用资源大小
ps -ef | grep mysqld // 看下ip
top -H -p mysql_pid // 根据ip查看资源线程的资源占用
mysql -u root -p // 登录后台,然后输入密码
// 查看资源,limit 0,5;从第0个开始显示5个
select thread_id,name,THREAD_OS_ID from performance_schema.threads limit 10;