MySQL基础

数据库定义:存储数据的仓库

应用:金融机构,游戏网站,购物网站,论坛网站

提供数据库软件:Oracle,DB2,SQL server,MySQL,Mariadb,mongodb,redis (红色不开源;SQL server不跨平台,蓝色非关系型数据库)

数据迁移:

MySQL介绍:关系型数据库,跨平台,可移植性好,支持多种编程语言(php .net java)

mysql-community-client(MySQL工具包)mysql-community-server(MySQL服务包)

服务名:mysqld;端口:3306;协议:tcp; 主配置文件:/etc/my.cnf 数据库目录:/var/lib/mysql 用户和用户组:root

SQL语言分类:

DDL:数据定义语言

DML:数据操作语言

DCL:数据控制语言

DTL:数据事物语言

MySQL体系结构:

管理工具:安装mysql数据库服务软件后自带的命令

connection pool:连接池

检查是否有空闲的线程和是否有硬件资源分配给线程使用。

SQL Interface: SQL接口

把SQL命令传递给mysqld进程。

Parser: 解析器

检查执行的SQL命令是否语法错误。

Optimizer: 查询优化器

优化执行的SQL命令,以最节省硬件资源的方式运行。

Cache和Buffer: 查询缓存

存储客户端曾经查找过的sql记录(类似交换机工作原理

Engine :存储引擎

访问表时,决定对表加锁的粒度

文件系统:存储数据的存储设备(如硬盘)

   

常见管理工具:

   

登陆

mysql -h 主机名 -u 用户名 -p

  • -h : 该命令用于指定客户端所要登录的MySQL的ip(授权), 登录当前机器该参数可以省略;(主机就是本机时,主机名可以是localhost)
  • -u : 所要登录的用户名,root不是系统用户;
  • -p : 接密码

注:登陆初始密码在"/var/log/mysqld.log"文件的"localhost:"字符串后,若密码有!用''引起

退出登录

Quit;(\q)

注释:

#

--

COMMENT '内容' 给字段添加注释

察看手册:

HELP command;

? command;

\h command;

取消当前命令

\c

将日志文件保存(结束)到文本文件

\T 文件路径 (\t)

当前打开的数据库名称

SELECT DATABASE();

选择数据库

两种方式对数据库进行使用的选择:

一: 在登录数据库时指定, 命令: mysql -D dbname -h 主机名 -u 用户名 -p

例如登录时选择刚刚创建的数据库: mysql -D samp_db -u root -p

二: 在登录后使用 use 语句指定, 命令: use dbname;

use 语句可以不加分号, 执行 use samp_db 来选择刚刚创建的数据库, 选择成功后会提示: Database changed

库级知识

显示数据库: show databases;

创建数据库(指定编码方式): create database dbname [charset utf8]; #库名支持数字,字母,下划线,不能纯数字,区分大小写

更改数据库编码方式:ALTER DATABASE dbname DEFAULT CHARSET utf8;

删除数据库: drop database dbname;

察看数据库创建时语法:SHOW CREATE DATABASE dbname; \G #参数用于格式化输出

表级操作:

显示库下面的表 show tables;

查看表的结构: desc tableName;

查看表的创建过程: show create table tableName;

查看表的内容:select * from tableName;

创建表:

create table tbName (

列名称1列类型[列参数][not null default ],

....2… , #无符号,在数据类型下添加UNSIGNED

....3… #零填充,在数据之前以0填充ZEROFILL

---n #最后一列不能有逗号

);

删除表:

DROP TABLE tbName;

更改表名:

ALTER TABLE tal_name RENAME [TO|AS] new_name;

RENAME TABLE tbl_name TO new_name;

移动数据表:

RENAME TABLE 库1.表名 TO 库2.表名; #把表从库1移动到库2

复制表:

CREATE TABLE .表 sql查询; #将查询结果复制到新表,key属性不会复制,查询无结果就只复制表结构

向表中插入记录:

INSERT tbl_name VALUE|VALUES(…..); 插入所有

INSERT TableName (col1,col2,……) VALUES (val1,val2……); -- 插入指定列

INSERT TableName VALUES 一次插入多行

(val1,val2……),

(val1,val2……),

(val1,val2……);

删除表中的数据:

删除所有数据:TRUNCATE TABLE tablename

删除指定数据:DELETE FROM tablename WHERE 条件;

修改数据

UPDATE TableName

SET

Col1=newval1,

Col2=newval2,

Coln=newvaln #此处没有逗号

WHERE 条件; #此处有分号

修改表结构:

基本用法:

ALTER TABLE 表名 执行动作

执行动作:

添加新字段 ADD 字段名1 类型(宽度) 约束条件 [选项];

选项:

AFTER 字段名2 #添加在字段名2后面

FIRST #添加最前面

注:默认添加到最后

删除已有字段 DROP 字段名

修改字段 MODIFY 字段名 类型(宽度) 约束条件;

注:新约束不能和已有数据冲突

修改字段名 CHANGE 原字段名 新字段名 类型(宽度) 约束条件;

注:也可以更改字段

数据导入,导出:

导入:

LOAD DATA INFILE "目录名/文件名"

INTO TABLE 表名

FIELDS TERMINATED BY "分隔符"

LINES TERMINATED BY "\n";

注:查找导入位置show variables like "secure_file_priv",win下可以接完整路径

修改导入位置:secure_file_priv="路径"加在/etc/my.cnf,路径存在并mysql有权限

记一次故障排除:导入数据提示"ERROR 1265 (01000): Data truncated for column 'Id' at row 1"数据导入截断,分隔符改为","

导出:

sql查询 INTO OUTFILE "目录/文件名" #可以只有这一句

FIELDS TERMINATED BY "分隔符"

LINES TERMINATED BY "\n";

#分隔符可自定义

存储引擎:

指表的类型,数据库的存储方式.

察看支持的数据引擎: SHOW ENGINES; #显示引擎名,是否默认,描述,是否支持事务,

察看默认存储引擎:SHOW VARIABLES LIKE 'storage_engine';

常用存储引擎特点:

innoDB

提供事务,提交,回滚,多事务并发控制;支持外键;缺点:数据空间大,速度慢

共享表空间,表文件:*.frm(表结构)*.ibd(表索引,表数据)

行级锁(对表访问时,只给被访问行加锁)

注:事务:一次数据访问从开始到结束的过程;

事务回滚:访问过程中任意一步失败,把操作恢复到操作之前的状态。(通过事务日志文件记录)

MyISAM

占用空间小,速度快 缺点:不支持事务不支持外键,安全性差;

独享表空间,表文件:*.frm(表结构)*.myi(表索引)*.myd(表数据)

表级锁(对表访问时,给一张表加锁)

注:锁解决并发访问冲突问题,锁分为读锁和写锁

处理写操作多的表适合innoDB,处理读操作多的表适合myisam

MEMORY

提高表的处理速度;服务器内存大 缺点:断电影响数据(数据存在内存中)

修改默认存储引擎(/etc/my.cnf):在【mysqld】下添加default-storage-engine=引擎名

建表指定存储引擎:

create table 表名(

……

)engine=引擎名;

修改表存储引擎:ALTER TABLE 表名 engine=存储引擎名;

posted @ 2018-11-11 19:29  KAZUYA  阅读(174)  评论(0编辑  收藏  举报