Post

Mysql学习笔记

个人学习笔记/备忘

Mysql学习笔记

根据史上最简单的 MySQL 教程学习 MySQL,在此摘录自己的笔记

安装(centos7)

  • wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
  • yum localinstall mysql57-community-release-el7-9.noarch.rpm
  • yum install mysql-community-server
  • service 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;
    • where 可以用:
      比较运算符:>、<、>=、<=、<>、=、like、between and、in 和 not in;
      逻辑运算符:&&、||、和!.

校对集

影响排序,已有数据再修改校对集,则旧数据不会改变排序 _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.