MySQL基础
数据库的历史(DataBase,DB)
人工管理阶段
文件系统
数据系统
MySQL是由MySQL AB公司开发,目前属于Oracle公司,是开源的关系型数据库。
Mysql存储引擎
为啥出现引擎
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能
常用Mysql引擎
mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。
InnoDB引擎
用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
显示所有引擎
# 前提: 引擎是建表是规定, 提供给表使用的, 不是数据库
# 展示所有引擎
mysql> show engines;
# innodb(默认): 支持事务, 行级锁, 外键
mysql>: create table t11(id int)engine=innodb;
mysql>: create table t12(id int)engine=myisam;
mysql>: create table t13(id int)engine=blackhole;
mysql>: create table t14(id int)engine=memory;
更多引擎参考
https://www.cnblogs.com/nickchen121/p/11145788.html
数据库的模式
mysql 5.7 以后默认都是安全模式
Mysql工作流程
数据库的组成
库:存放多张表 - 文件夹
表:包含多条相同结构的记录 - 文件
记录:包含多个key-value键值对的一条数据 - 二进制数据
字段:描述信息 - key 附带大量的属性
数据库分类
关系与非关系
关系:数据库中的表与表之间有联系-mysql
非关系:没有表的概念-redis、mongodb(介于关系与非关系之间)
内存与硬盘
硬盘:数据可以永久存储-mysql、mongodb
内存:数据的存取效率极高-redis、memcache
sql与nosql
sql:数据库操作通过sql语句
nosql:数据库操作就是Key-Value形式
绿色版加之前有安装mysql
首先配置好环境变量
1.首先卸载服务
mysqld --remove
2.安装服务
mysqld --install
3.启动服务
net start mysql
Mysql常识
修改提示符
PROMPT
D 完整的日期
d 当前数据库
h 服务器名称
u 当前用户
MySQL基本命令
SHOW DATABASES 显示所有数据库
USE 打开数据库
SELECT DATABASE() 显示打开的数据库
SHOW TABLES 查看数据表
SHOW COLUMNS 查看数据表结构
**显示当前服务器版本**
SELECT VERSION();
**显示当期时间**
SELECT NOW();
**显示当期用户**
SELECT USER();
**查看MySQL警告信息**
SHOW WARNINGS;
**显示创建数据库时候的命令**
SHOW CREATE DATABASE 数据库名;
**修改数据库**
ALTER
**删除数据库**
DROP
MySQL语句规范
关键字与函数名称全部大写
数据库名称、表名称、字段名称全部小写
SQL语句必须以分号结尾
数据库配置
# 通过配置文件统一配置的目的:统一管理 服务端(mysqld) 、客户端(client)
# 配置了 mysqld(服务端) 的编码为utf8,那么再创建的数据库,默认编码都采用utf8
# 配置流程
# 1)在mysql安装根目录下,创建配置文件:my.ini
# mac下配置文件名叫 my.cnf
# 2)设置配置文件内容并保存
[mysqld] # 服务器配置
port=3306 # 可以修改数据库默认端口(如果数据库端口被其他软件占用)
character-set-server=utf8 # 编码格式
collation-server=utf8_general_ci # 排序方式(默认跟编码格式走)
[client] # mysql自己的客户端叫[mysql],配置[client]即配置了[mysql],也配置了其他存在方式的客户端,比如Navicat可视化客户端
default-character-set=utf8 # 编码格式
# 3)重启数据库服务
连接数据库
1)游客登陆(不一定能登入,登入了也啥都不能干)
>: mysql
2)账号密码登录(默认登录就是localhost账号)
>: mysql -u root -p
再输入密码,没有任何提示,没有密码直接回车
3)连接指定服务器的mysql
>: mysql -h ip地址 -P 端口号 -u 账号 -p
回车后敲入密码
eg:
>: mysql -hlocalhost -P3306 -uroot -p
4)退出数据库
>: quit
>: exit
数据库基本操作
1)查看已有数据库
mysql>:show databases;
2)选择某个数据库
mysql>:use 数据库名
3)查看当前所在数据库
mysql>:select database();
4)创建数据库
mysql>:create database 数据库名 [charset=编码格式];
eg>: create database owen;
eg>: create database zero charset=utf8;
eg>: create database tank;
5)查看创建数据库的详细内容
mysql>:show create database 数据库名;
eg>: show create database owen;
6)删除数据库
mysql>: drop database 数据库名;
eg>: drop database tank;
7)修改数据库字符编码
mysql>: alter database 数据库名 charset=编码格式;
eg>: alter database 数据库名 charset="utf8"
表的基本操作
前提:先选取要操作的数据库
1)查看已有表
mysql>:show tables;
2)创建表
mysql>:create table 表名(字段们);
eg>: create table student(name varchar(16), age int);
eg>: create table teacher(name varchar(16), age int);
完整语法:
mysql>: create table 表名 (
属性名1 类型(长度) 约束,
...
属性名n 类型(长度) 约束
) engine=引擎 default charset=utf8;
3)查看创建表的sql
mysql>:show create table 表名;
eg>: show create table student;
4)查看创建表的结构
mysql>:desc 表名;
5)删除表
mysql>: drop table 表名;
eg>: drop table teacher;
6) 修改表名
mysql>: alter table 旧表 rename 新表;
eg>: alter table zx rename z
mysql>: alter table 表名 change 旧字段 新字段 类型(长度);
eg>: alter table zx1 change name zx_name varchar(10);
表字段的基本操作
create table tf1(
id int primary key auto_increment,
x int,
y int
);
# 修改
alter table tf1 modify x char(4) default '';
alter table tf1 change y m char(4) default '';
# 增加
mysql>: alter table 表名 add 字段名 类型[(长度) 约束]; # 末尾
eg>: alter table tf1 add z int unsigned;
mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] first; # 首位
eg>: alter table tf1 add a int unsigned first;
mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] after 旧字段名; # 某字段后
eg>: alter table tf1 add xx int unsigned after x;
mysql>: alter table 表名 drop 字段名; # 删除字段
eg>: alter table tf1 drop a;
记录的基本操作
1)查看某个数据库中的某个表的所有记录,如果在对应数据库中,可以直接查找表
mysql>: select * from [数据库名.]表名;
注:*代表查询所有字段
2)给表的所有字段插入数据
mysql>: insert [into] [数据库名.]表名 values (值1,...,值n);
eg:如果给有name和age两个字段的student表插入数据
1条>:insert into student values ('Bob', 18);
多条>:insert into student values ('张三', 18), ('李四', 20);
指定库>:insert owen.student values ('张三', 18), ('李四', 20);
3)根据条件修改指定内容
mysql>: update [数据库名.]表名 set 字段1=新值1, 字段n=新值n where 字段=旧值;
eg:> update student set name='王五', age='100' where name='张三';
注:i) 可以只修改部分字段 ii) 没有条件下,所有记录都会被更新
eg:> update student set name='呵呵';
插入部分字段的值
mysql>: insert into author_detail(info,address) values('Tom_info','Tom_address');
4)根据条件删除记录
mysql>: delete from [数据库名.]表名 where 条件;
eg:> delete from student where age<30;