MySQL整体使用》导入数据、约束、多表查询、事务、变量类型、资源占用
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
我发的MySQL相关内容
执行脚本命令本地生成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; # 结束事物正常执行完
数据库连接池
多个用户访问数据库连接和关闭比较浪费资源多个连接后动态分配给用户已解决这个问题。
创建表格时如下关键字功能
PKPrimary Key, 主键
NNNot Null, 非空
UQUnique, 唯一索引具有unique属性的列确保所有的记录的值都不同。
BINBinary 二进制数据(比text更大的二进制数据)
UNunsigned 无符号 整数非负数
ZFZero fill用0填充所有剩余空间例如int(4)而值为1时则内容显示为0001
AIAuto Increment自动增长
GGenerated 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;