Mysql学习笔记
个人学习笔记/备忘
Mysql学习笔记
根据史上最简单的 MySQL 教程学习 MySQL,在此摘录自己的笔记
安装(centos7)
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpmyum localinstall mysql57-community-release-el7-9.noarch.rpmyum install mysql-community-serverservice mysqld start- 修改临时密码
为了加强安全性,MySQL5.7 为 root 用户随机生成了一个密码,在 error log 中,关于 error log 的位置,如果安装的是 RPM 包,则默认是/var/log/mysqld.log,只有启动过一次 mysql 才可以查看临时密码:
grep 'temporary password' /var/log/mysqld.log复制对应字段 mysql -u root -p然后粘贴刚才的密码- 马上修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpasswd'; - 如果新密码太简单,修改安全强度和长度,再重新执行上一行命令
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1; - 最基础的 sql 安装到此结束
概念
- 一般来说,将 MySQL 数据库服务器的内部对象分为四层,分别为:数据管理系统(DBMS)–> 数据库(DB)–> 表(Table)–> 字段(Filed)
命令
https://www.runoob.com/sql/sql-syntax.html
基础命令
- 登陆:mysql -hPup -h,主机地址,本地为 localhost,远程为 IP 地址
-P,端口号,用来找软件
-u,用户名
-p,密码 - show … like …
show databases [like ‘pattern’];
show tables [like ‘pattern’];
show collation;
库操作
- show databases [like ‘pattern’];
pattern 为匹配模式:
%匹配多个字符
匹配单个字符,所以匹配的名称有时需要用_转义
如 show databases like ‘%abc’;表示匹配所有以 abc 结尾的库 - create database + 数据库名称 + [库选项];
选项为空默认即可,当业务上需要用到这些特性时在去搜索那个库选项合适 - drop database + 数据库名称;
- 查看表的创建语句:show create table my_auto;
表操作
- show tables [like ‘pattern’];
pattern 为匹配模式:
%匹配多个字符
匹配单个字符,所以匹配的名称有时需要用_转义
如 show tables like ‘%abc’;表示匹配所有以 abc 结尾的表 - 复制表 create table + 表名 + like + [数据库名(当前可省).]表名;
- show columns from + 表名;
- create table [if not exists] + tblname(lowName type,lowName type) [表选项];
选项为空默认即可,当业务上需要用到这些特性时在去搜索那个表选项合适 - rename table 旧表名 to 新表名;
- drop table + 表 1, 表 2 … ;
- 新增字段,基本语法:alter table + 表名 + add + [column] + 字段名 + 数据类型 + [列属性] [位置];
其中,位置表示此字段存储的位置,分为 first(第一个位置)和 after + 字段名(指定的字段后,默认为最后一个位置).
示例:alter table student add column id int first; - 修改字段,基本语法:alter table + 表名 + modify + 字段名 + 数据类型 + [列属性] [位置];
- 重命名字段,基本语法:alter table + 表名 + change + 旧字段名 + 新字段名 + 数据类型 + [列属性] [位置];
- 删除字段,基本语法:alter table + 表名 + drop+ 字段名;
数据操作
- 增:insert into + 表名(字段列表) + values(值列表);
- 复制,可以自己复制自己,来做指数复制(蠕虫复制,用于压力测试):
insert into my_copy select * from my_copy; - 更新主键,当主键已经存在,新增一条数据将报错,可以使用 replace 代替 insert
- 减:delete from test where grade = ‘3.1’ [limit cnt];
- 改:update + 表名 + set + 字段 = 值 + [where 条件] [limit cnt];
- 查:select + 字段名称[,字段名称] + from + 表名 + [where 条件];
- 查询 + 排序:order by + 字段名 + [asc 升(默认)/desc 降];
如:select [all(默认,可省)/distinct 去重]* from tableName order by name;
- 查询 + 排序:order by + 字段名 + [asc 升(默认)/desc 降];
- where 可以用:
比较运算符:>、<、>=、<=、<>、=、like、between and、in 和 not in;
逻辑运算符:&&、||、和!.
- where 可以用:
校对集
影响排序,已有数据再修改校对集,则旧数据不会改变排序 _bin:binary,二进制比较,区分大小写
_cs:case sensitive,大小写敏感,区分大小写
_ci:case insensitive,大小写不敏感,不区分大小写
数据类型
https://www.runoob.com/mysql/mysql-data-types.html
- 注意任何一条记录最长不超过 65535 个字节,而且 varchar 的最大长度由编码字符集决定(编码集决定一个字符占几个字节,不一定是 65535 的倍数)
列属性
比较实用的:
- comment,仅仅提供给开发人员看的备注
create table tblName(name varchar(20) comment ‘姓名’)charset utf8; - default,默认值,insert 时,如果不设置该列,则使用默认值 create table tblName(name varchar(20) default ‘Pancake’)charset utf8;
- auto_increment,自动增长,必须与键一起用,则,该列需要是一个索引,列的 key 属性有值
create table my_auto( id int primary key auto_increment, name varchar(20) not null )charset utf8;
给 null 时则触发自动增长,否则根据输入值,下一次则从前一个值+1 insert into my_auto values(null,’Guo’);
改为自增长,只能修改成更大的值:alter table + 表名 + auto_increment = 值;
查看目前自增长情况:show variables like ‘auto_increment%’; 修改步长:set auto_increment_increment = 值;
删除自增长属性:alter table my_auto modify id int
键
- primary key,主键,一个 table 只能有一列使用,该列不能重复
create table my_pri1( name varchar(20) not null comment ‘姓名’, number char(10) primary key comment ‘学号’ )charset utf8; - 复合主键 create table my_pri2( number char(10) not null comment ‘学号’, course char(10) not null comment ‘课程编号’, score tinyint unsigned default 60, – 增加主键限制,知道学号再知道课程编号才能确定唯一的分数值,具有唯一性 primary key(number,course) )charset utf8;
某列(已有数据不重复的列)改为主键 alter table my_pri3 add primary key(course);
- unique 或者 unique key,唯一键,其实就是允许为空的“主键”,以下两行等价
create table my_unique2(number char(10) not null,name varchar(20) not null,unique key(number))charset utf8; create table my_unique2(number char(10) not null primary key,name varchar(20) not null)charset utf8; - 某列(已有数据不重复的列)改为唯一 alter table my_unique3 add unique key(number);
- 删除唯一键,并不会删除该列,只是删除属性 alter table my_unique3 drop index number;
关系
一张表中一个字段经常与另一张表的某个(些)字段有关系,分为 3 种,分别为:一对一(1:1),一对多(1:N)(或多对一(N:1))和多对多(N:N)
特别的,多对多一般使用中间表来记录两张表之间的关系
范式
https://blog.csdn.net/qq_35246620/article/details/72677626
- 第一范式要求字段的数据具有原子性,不可再分。则取出来的数据不需要拆分能直接参与运算
- 第二范式就是要解决表设计中不允许出现部分依赖。设置了复合主键,单某些字段只跟一个主键有关,其他主键无关,则部分依赖
- 第三范式就是要解决表设计中出现传递依赖的问题
This post is licensed under CC BY 4.0 by the author.