1.库管理
- 查看数据库 show databases;
- 创建数据库
- mysql 的utf8是三个字节的阉割版utf8编码
- utf8mb4 是完整的utf8编码 create database if not exists db1 default charset utf8mb4;
- 进入db1数据库 use db1;
- 查看数据库 show databases; show create database db1;
- 修改数据库参数 alter database db1 charset utf8; show create database db1; alter database db1 charset utf8mb4; show create database db1;
- 删除数据库 drop database db1;
2.表操作
创建表
-
- 数据存储引擎:
- innodb - 支持外键、事务、行锁,
- myisam - 不支持外键、事务、表锁,只读表可以选择用myisam,效率高
- create table tb1( id int primary key auto_increment, name varchar(40) not null ) engine=innodb charset=utf8mb4;
- 修改表的属性 alter table tb1 charset=utf8;
- 添加字段,alter修改表 alter table tb1 add username varchar(40) unique after id;
- 查看表结构 desc tb1;
- name改成nickname alter table tb1 change name nickname varchar(40);
修改字段数据类型
-
- varchar(10)
- char(10) alter table tb1 add gender varchar(10);
alter table tb1 modify gender char(1);
-
删除字段 alter table tb1 add birthdate date;
alter table tb1 drop birthdate; -
truncate 截断、重建、重置
-
先删除表然后自动重建表 insert into tb1(username) values(‘aa’),(‘bb’),(‘cc’);
select * from tb1;
show create table tb1;
truncate table tb1;
- 删除表 drop table if exists tb1;
3.用户管理
- mysql用户有两个字段:用户名、登录的主机地址 root ‘localhost’ ‘root’ root ‘192.168.0.5’ ‘abc123’ root ‘192.168.9.%’ ‘123456’ root ‘%’ ‘111111’
- 默认只有 root@localhost,只允许本机登录
- 添加允许远程登录的用户 create user ‘root’@‘%’ identified by ‘root’;
- 查询系统用户表 select user,host from mysql.user;
- 用户授权
grant select,insert,update,delete on test.* to ‘abc’@‘%’
grant create,alter,drop on db1.* to ‘abc’@‘localhost’
grant all privileges on . to ‘abc’@‘%’
grant select,insert on db1.t1 to ‘abc’@‘%’
grant select(id, name) on db1.t1 to ‘abc’@'%
grant all privileges on . to ‘root’@‘%’;
4.五种约束
- 主键
- 外键
- 非空
- 唯一
- 检查
5.表之间的关系
- 一对一
- 一对多
- 多对多
- 用外键关联
- 很多公司禁用外键约束
- 数据增删改操作,如果有外键,要到其他表检查数据正确性,有性能损耗
- 禁用外键可以提高增删改效率
- 不用外键,也可以对数据进行关联查询
- 有的项目也会禁用关联查询
- 关联多张表查询效率低
- 可以分多次从不同表查询需要的数据
- 数据可以适当冗余,提高查询效率
6.数据库三范式
- 第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)
- 第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)
- 第三范式(3NF):满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)
- 范式越高,数据冗余越少,效率越低
- 范式越低,数据冗余越多,效率越高