MySQL学习基础知识1
什么是数据库?
数据库就是存储数据的仓库。
存储方式:
变量 无法永久存储
文件处理,可以永久存储,弊端:文件只能在自己的计算机读写,无法被分享(局域网除外)
数据库分类:
1、关系型数据库
提供某种机制帮你维护数据与数据之间的关系;一般是基于文件实现的
优点:容量大,可以永久存储
MySQL,免费开源,开源支持中小型企业并发
Oracle,商用收费,学习免费,功能比MySQL强大在用户管理和集群
SQL server,属于微软生态圈,只能运行在windows上
Maria DB,MySQL的创始人基于MySQL开发的
sqllite,非常轻量级的数据库
2、非关系型数据库
数据与数据之间是独立,不存在任何关联关系;以key: value的形式存储数据;一般基于内存
优点:速度快
问题:断电丢失
常用数据库有:mongoDB,redis,memcache
基础概念:
数据记录:多个数据组成一条数据记录
表:里面存储一堆数据记录
库:里面放着一堆表文件
DBMS:data base manager system,数据库管理系统(TCP的服务器),负责管理一堆文件夹
数据库服务器:指的是运行有TCP服务器的程序的计算机
1、mysql的安装
window安装
1. 下载解压,下载地址:https://dev.mysql.com/downloads/mysql/
2. 以管理员运行cmd,进入解压目录下的bin,然后运行命令:mysqld,mysqld, 或mysqld --initialize,
3.设置环境变量。把路径添加到系统变量里。(电脑->属性->高级系统设置->环境变量->系统变量->path),
这样直接可以使用mysql直接连接到服务端
4. 管理员mysqld --install 添加一个服务 sc delete mysql或mysqld --remove 删除服务
5. 查看系统服务指令:services.msc
mysqld 是服务器主程序
mysqld警告:创建文件夹失败,由于权限不足,用管理员权限运行
mysql 是无界面的客户端,需要CMD运行
MySQL连接服务器需要指定一下参数:
-h 主机地址, -P 端口号,-u用户名,-p密码 服务器和客户端在同一台电脑,可以省略主机地址,端口号默认3306 可以省略
如果不指定用户名和密码 以游客模式登陆什么都看不到
安装过程中的一些小知识
在linux下的安装如下:还有一些常见的问题
1、系统环境
VMare虚拟机下,Centos7的最小安装, 2、安装步骤
1.
没有wget,所以所以先安装wget,yum -y install wget
2.
下载MySQL,下载:wget ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
3.
卸载系统自带的Mariadb,(MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品) 需要用的的命令: 1.
rpm -qa 列出所有已安装软件包
2.
rpm -e packagename 删除软件包
3.
rpm -e --nodeps packagename 强制删除软件和依赖包
4.
rpm -q 包名 查询包是否安装
5.
rpm -ivh 包名 安装软件包 查看系统的mariadb, rpm -qa |grep mariadb mariadb-libs-5.5.56-2.el7.x86_64
然后卸载 rpm -e --nodeps mariadb-libs-5.5.56-2.e17.x86_64
4. 安装mysql
1. 将压缩包放到/usr/local/目录下,mv mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz /usr/local/
2. 解压 tar -zxvf mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
3. 将解压好的文件夹重命名为mysql mv mysql-5.6.41-linux-glibc2.12-x86_64 mysql
4. mysql/bin/mysqld --initialize
如果报错:./bin/mysqld: error while loading shared libraries: libaio.so.1:
cannot open shared object file: No such file or directory
下载libaio,yum search libaio, yum install libaio
5. 添加mysql服务,命令:cp support-files/mysql.server /etc/init.d/mysql
启动mysql服务,命令:service mysql start
如果报错:MySQL: Starting MySQL….. ERROR! The server quit without updating PID file
解决办法: /scripts/mysql_install_db
如果报错:ATAL ERROR: please install the following Perl modules before executing
./scripts/mysql_install_db:Data::Dumper,
解决办法:安装autoconf库
命令: yum -y install autoconf //此包安装时会安装Data:Dumper模块
安装后,在执行上述语句,如果有警告,就重启一下主机。
关闭mysql服务,命令:service mysql stop
添加开机启动服务,命令:chkconfig --add mysql 6. 在 etc下配置my.cnf
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
# mysql配置部分
[mysql]
default-character-set = utf8
# 其余客户端配置部分
[client]
default-character-set = utf8
(关闭centos7报警声音:vim ~/.bashrc ,在最后行添加setterm -blength 0 保存好退出(Esc +:wq+Enter),reboot重启)
7. 启动客户端
添加mysql系统命令,修改系统文件,添加内容,是内容生效。
修改系统文件命令:vim /etc/profile
在最后面添加 export PATH=/usr/local/mysql/bin:$PATH
内容生效:source /etc/profile
mysql -uroot -p
8. 远程连接
create user 'username'@'%' identified by 'password';
grant all privileges on *.* to root@'%'identified by 'password';
(账号yw_sun, 密码:123456)
9.关闭主机防火墙
systemctl stop firewalld 参考博客:
报错类型解决办法: https://www.cnblogs.com/coder-lzh/p/8946346.html
解压安装博客:https://www.cnblogs.com/h--d/p/9556758.html
CentOS7安装mysql5.6
2、修改密码
1. 如果知道密码,mysqladmin -uroot -p旧密码 password 新密码
2. 不知到密码,跳过授权表,进入系统修改授权表。
方法:停止服务,net stop mysql
启动服务器并添加参数,mysqld --skip-grant-tables
使用客户端登陆服务器执行修改命令,此时不用输入密码
update mysql.user set password=password("123123") where user='root' and host='localhost';
重启服务端验证新密码;
3、修改编码
使用客户端\s 可以查看当前的服务器设置信息
设置同一编码,建立一个my.ini文件,输入下列内容
# 服务器配置部分(5.5版本以上)其他版本使用default-character-set=utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
# mysql配置部分
[mysql]
default-character-set = utf8
# 其余客户端配置部分
[client]
default-character-set = utf8
4、基本的sql语句
sql语句是结构化查询语句
增 create database db1 charset utf8;
查 show databases;
show create databases mydb;
改 alter database db1 charset gbk;(只能改字符编码)
删 drop database db1;
切换 use db1; 查看当前库 select database();
库操作
增 create table t1(id int, name char);
create table t1 select host,user from myysql.user;(复制表的内容+表结构)
create table t1 like mysql.user;(只复制表结构) 查 show tables;
show create table t1;
desc t1;
改 alter table 表名 add | modify | drop | change
add 列名 类型
modify 列名 类型(只能修改类型)
drop 列名
change 旧列名 新列名 类型
改字符编码 alter table 表名 default character set gbk
改名称 rename table t1 to t2
删 drop table 表名
表操作
增 insert into t1 values(1, 'sun'),(2,'yw');
查 select id, name from t1; select * from t1;
改 update 表名 set 列名=值 where 条件;
可以同时修改多个字段,用逗号隔开,没有条件则修改全部
删 delete from 表名 where 条件;
truncate table t1; 清空数据(重建表,表结构不变)
记录的简单操作
5、存储引擎的简单介绍
1. MySQL的结构层次
1. 接口,MySQL可以和不同语言交互,有python,php,net等
2. 系统管理和控制工具
3. 连接池,管理和缓冲用户连接,线程处理等需要缓存的需求,控制并发数量
4. SQL接口,接收用户的SQL命令,并且返回用户需要查询的结果。
5. 解析器,对SQL命令验证和解析。主要将SQL语句分解成数据结构,
并将这个结构传递到后续步骤,如果分解中出现错误,那就说这个SQL语句不合理。
6. 优化器,使用优化器对查询进行优化。
7. 缓存,如果缓存中有查询结果,查询语句就可以直接去查询缓存取数据。
8. 引擎,具体与文件打交道的子系统,默认的引擎是InnoDB,支持事务,行级锁,外键等
2. 了解引擎
引擎 一个系统的核心
查看MySQL支持的引擎:show engines;
分类:
MRG_MYISAM ,是MYISAM表的集合。用于做水平分表,如果一个表中数量太大,将导致效率讲的,水平分表就是把整个大表拆成不同的小表,每次查询会判断数据在哪一个表中,然后对应去查找,以此提高效率。(引出:垂直分表:当一个表中字段太多,就把常用的信息放到一起,不常用的放到一起,然后建立关联关系)
INNODB,最常用的引擎,支持事务,行级锁,外键一系列功能
MySIAM,没有上述功能,但是存储效率比INNODB要高,支持分表
MEMORY,速度快,不能永久存储,服务器断电即丢失
CSV,以“逗号分隔值(CSV)文件”作为表进行处理,但不支持在这种文件上建立相关索引
使用方法:
方式一:在建表时指定
create table t1(id int, name char) engine=innodb;
方式二:在配置文件中设置为默认存储引擎
[mysqld]
default-storage-engine=INNODB
innnodb_file_per_table=1
InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。
在mysql的配置文件[mysqld]部分,增加innodb_file_per_table参数。
可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。
为什么设置innodb_file_table=1
6、数据类型
1. 整型
整型(默认都是有符号的,signed)
tinyint,1个字节
smallint,2个字节
mediumint,3个字节
int,4个字节
bigint,8个字节
设置为无符号:create table t1(id tinyint unsigned);
宽度在整型数据中 用于控制最小显示长度(字符数),如果长度不足,添加zerofill帮你补零,不添加zerofill也没有影响
2、浮点
float,4个字节,float(a, b),a代表总位数,b表示小数位数(a<=255, b<=30)
double,8个字节,double(a, b),a代表总位数,b表示小数位数(a<=255, b<=30)
decimal, 不固定(最精确的),decimal(a, b),a代表总位数,b表示小数位数(a<=65, b<=30)
3、字符串
特点:
char:定长,简单粗暴,浪费空间,存取速度快
varchar:变长,精准,精准,节省空间,存取速度慢
其他不同点:
char: 在查询时,自动删除尾部的空格(当两个字符串比较时,"="会忽略空格,但'like'不会)
varchar: 尾部空格会保存下列
其它的字符串类型:
tinytext,长度数1字节
text, 长度数2个字节
mediumtext ,长度数3个字节
longtext,长度数4个字节
二进制数据类型,单位都是字节
binary,varbinary
固定大对象二进制字符串:
tinyblob,blob,mediumblob,longblob
测试用的函数:
length:查看字节数
char_length: 查看字符数
4、时间类型
year类型,可以用四位数字或字符串表示,
如果是两位字符串,"00"~"69"转换到2001~2069,"70"~"99"->1970~1999.
如果是两位数字,01~69转换到2001~2069,70~99->1970~1999,00不能解释为2000.
date类型,YYYY-MM-DD或YYYYMMDD,可以是字符串或数字
使用CURRENT_TIME或now()输出日期
datetime,和date类型一样
time类型,支持的格式:D HH-MM-SS或HHMMSS(D 是天数)
timestamp类型,修改数据时,可以自动更新时间
使用CURRENT_TIMESTAMP输入系统当前时间
输入null或无输入,系统会自动输入当前日期和时间
5、其它类型
enum 提前规定该字段能选的值的范围 多选1
set 提前规定该字段能选的值的范围 区别是 set字段 可以有多个值 用逗号隔开 多选多
7、严格模式
MySQL5.7版本才有,5.7版本之下需要设置:
set global sql_mode = "strict_trans_tables" 重启客户端
8、约束条件
完整的建表语句
create table 名称(字段 类型[(宽度) 约束条件], ......)
约束 是指给数据的值加上一些限制
unsigned,无符号
not null,非空,null-可空
default,默认值
建立空表直接指定,create table t(name char(10) not null default 'aaa');
后期增加约束,alter table t modify name char(10) not null default 'aaa'; 已有的字段
alter table add sex char(10) not null default 'boy'; 新增字段
unique 唯一性约束 并且是一个索引,要求该字段的值不能重复
单字段:
create table oldboy(name char(20) unique, school char(10));
create table oldboy(name char(20), school char(10),
constraint uk_name unique(name));(constraint uk_name可省略)
多字段:联合唯一索引
create table oldboy(name char(20), school char(10), unique(name, school));
primary key 主键约束
非空+唯一
强调:
主键有约束和索引的作用
一张表有且只有一个主键
在innodb中,主键必不可少的
innodb 组织数据结构是按照树形结构来组织的,该结构中 必须有一个数据,
不能为空且唯一的,如果没有这样的数据 树形结构也就不存在。
mysql在创建表时,会检测是否存在主键
没有,就找一个非空且唯一的字段作为主键,如果找不到,就设置一个隐藏字段作为主键
auto_increment
自动增长 必须是整型,每次插入数据都会自动+1
单个字段:create table t1(id int not null unique,name char(20) not null unique);# id
作为主键: create table t1(id int primary key, name char(20));
create table t1(id int, name char(20), constraint pk_name primary key(id));
多个字段:create table t1(ip char(15), port char(5), primary key(ip, port));
foreign key 外键,建立表之间的关系
9、表之间的关系
1. 关联表
两张表用外键关联,需要区分表的主从关系。如:
主表:部门表
从表:老师表
在从表找中加入外键时,一定要先建立主表
外键约束原理:
让从表的某个字段 参照主表的一个字段(通常是主键 主键是唯一的)
要先创建主表,再创建从表
从表插入数据时,必须保证外键的值已经存在于主表中
删除表时,要先删除从表,再删除主表
当要删除主表中的记录时,要保证从表没有记录
主表更新时,不能随意更新主键,若要更新,需保证从表中没有相关记录
创建方式:foreign key(外键字段) inferences 主表(主键)(通常外键都是参照对方的主键)
外键也是一种约束 是为了保证数据完整性。外键用于建立物理层及关联关系
在正常开发中不推荐使用?会降低存储效率,所以一般会吧关系的维护交给逻辑层面关系。
存在外键关系后,增删改都受到了各种限制,操作起来比较麻烦
可以使用级联操作:
(在外键后面加上)on delete cascade,on update cascade
更新,当主表更新主键时,从表会相应更新外键的值
删除,当主表删除某一条记录时,从表只要外键与被删除记录的主键值相同,都会被删除
2. 表之间的关系
1. 一对一,用来垂直分表
2. 一对多,
3. 多对多,添加新表同时关联不同的表,使用联合唯一约束
MySQL学习基础知识1的更多相关文章
- MySQL学习基础知识2
1.基础语句 查 select(* | 字段名 | 四则运算 | 聚合函数) from 表名称; 加上as取别名 as可省略 如:select name, (math+english)/2 total ...
- mysql学习基础知识3
1.视图 简化sql语句的编写,限制可以查看的数据 一张虚拟的表,不占任何内存,查视图时都是临时从所查的表中拿数据 特点: 对于视图的增删改查 都会同步到原始表 对原始表的修改,会同步到视图内可查看的 ...
- MySQL学习——基础
本文是MySQL的基础知识. Linux启动MySQL服务命令 : service mysql start Linux关闭MySQL服务命令 : service mysql stop 登录MySQL命 ...
- Matrix学习——基础知识
以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明. 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部 ...
- MySQL数据库基础知识及优化
MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...
- Mysql之基础知识笔记
Mysql数据库基础知识个人笔记 连接本地数据库: mysql -h localhost -u root -p 回车输入数据库密码 数据库的基础操作: 查看当前所有的数据库:show database ...
- 阿里面试官必问的12个MySQL数据库基础知识,哪些你还不知道?
数据库基础知识 1.为什么要使用数据库 (1)数据保存在内存 优点: 存取速度快 缺点: 数据不能永久保存 (2)数据保存在文件 优点: 数据永久保存 缺点: 1)速度比内存操作慢,频繁的IO操作. ...
- JAVA学习基础知识总结(原创)
(未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...
- MySQL学习基础 之 起航篇
MySQL 学习来自慕课网<与MySQL的零距离接触> MySQL是一个开源的关系型数据库管理系统 MySQL分为社区版和企业版 MySQL登录和退出相关的命令 参数 描述 -D,--da ...
随机推荐
- 【网摘】C#.NET 在 MVC 中动态绑定下拉菜单的方法
1. 已知下拉菜单列表项: 在 Controller 控制器类中输入已下代码 1 public class DemoController : Controller 2 { 3 public ...
- SpringBoot从零到上线
SpringBoot精要 SpringBoot的四个核心 1.自动配置:针对很多Spring应用程序常见的应用功能,SpringBoot能自动提供相关配置. 在任何Spring应用程序的源代码中,都可 ...
- C# T4 模板 数据库实体类生成模板(带注释,娱乐用)
说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程 1.htt ...
- vmware完整克隆(linux)
vmware中的完整克隆是基于指定的虚拟机克隆出相同的一份出来,不必再安装 但是我们要保证三个地方不能一样,一个是主机名称(hostname),一个是虚拟网卡设备mac地址,还有一个是ip地址 所以我 ...
- 30号快手笔试(三道ac两道半)————-历史上最大的网络失误orz
case 50 ,20,100 做题以来第一次重大失误:最后两分钟发现手机关机了,然后充电开机orz 页面是js代码, 钟表是一直会走的, 手机没电了, 电脑连接的手机的热点: 只顾在调试,先过了第 ...
- Python Learning: 02
OK, let's continue. Conditional Judgments and Loop if if-else if-elif-else while for break continue ...
- 导入python库失败时的方法
出现以下错误如何解决: e.g. cmd: pip install Django -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host ...
- 电脑开机后win系统运行异常慢,鼠标移动卡
今天公司里面一个小伙伴的电脑开机后还没有打开应用程序系统就运行非常慢,打开文件夹反应慢,鼠标是一点一点的在移动.体验感极差.作为运维的我立即上去解决问题: 首先是查看一下电脑确实运行比较慢,然后就查看 ...
- 《Python 数据科学实践指南》读书笔记
文章提纲 全书总评 C01.Python 介绍 Python 版本 Python 解释器 Python 之禅 C02.Python 基础知识 基础知识 流程控制: 函数及异常 函数: 异常 字符串 获 ...
- 《JAVA程序设计》_第九周学习总结
一.学习内容 1.数据库的建立.配置 在官网先下载好MySQL.navicat for MySQL.XAMPP.MySQL-connecter 在XAMPP中点击start开启MySQL 在navic ...