MySQL基础

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

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

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

数据迁移: redis

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

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

服务名: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=存储引擎名;

相关文章
相关标签/搜索