自古英雄出少年
现代少年多极客

3.3 深入浅出MySQL数据库

1.什么是数据库?

定义

数据库(Database)是“按照数据结构来组织、存储和管理数据的仓库”。

常见数据库

  • Oracle
  • DB2
  • SQL Server
  • Postgre SQL
  • MySQL

    相关术语

    数据库系统(Database System):DBS

    数据库(Database)
    数据库管理系统(Database Management System):DBMS
    应用开发工具
    管理员及用户

    SQL语言

    Structured Query Languages:结构化查询语言

  • DDL:数据定义语言
  • DML:数据操作语言
  • DQL:数据查询语言
  • DCL:数据控制语言

2.MySQL相关操作

配置文件

my.cnf是MySQL的配置文件

登陆/退出MySQL

登陆

mysql -uroot -p

mysql -uroot -proot (p后面是你的明文密码,我的密码就是root)

mysql -hlocalhost -uroot -p -P3306

mysql -uroot -proot -Vmysql -Vmysql version 得到mysql的版本号

mysql -uroot -p -D db_name 登陆的同时打开指定数据库

mysql -uroot -p --prompt=命令提示符 登陆的同时修改命令提示符(\h主机、\u当前登陆的用户、\d当前打开的数据库、\D当前服务器的日期时间)

退出

exit

quit
\q
ctrl + c

登录信息中需要掌握的

  • 命令行结束符默认使用;或者\g来结束
  • 可以通过help或者\h或者?关键字来查看手册
  • \c可以取消当前命令的执行

SQL语句语法规范

  • 常用MySQL的关键字我们需要大写,库名、表名、字段名称等使用小写
  • SQL语句支持折行操作,拆分的时候不能把完整单词拆开
  • 数据库名称、表名称、字段名称不要使用MySQL的保留字,如果必须要使用,需要用反引号``将其括起来

常用SQL语句

SELECT USER() 得到登陆的用户
SELECT VERSION() 得到MySQL的版本信息
SELECT NOW() 得到当前的日期时间
SELECT DATABASE() 得到当前打开的数据库

3.数据库相关操作

创建数据库

  • CREATE {DATABASE|SCHEMA} db_name;
  • CREATE DATABASE [IF NOT EXISTS] db_name; 检测数据库名称是否存在,不存在则创建
  • CREATE DATABASE [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset; 在创建数据库的同时指定编码方式

注意:
数据库名称最好有意义
名称不要包含特殊字符或者是MySQL关键字

查看当前服务器下全部数据库

SHOW DATABASE;SHOW SCHEMAS;

查看指定数据库的详细信息

SHOW CREATE DATABASE db_name;

修改指定数据库的编码方式

ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] charset;

打开指定数据库

USE db_name;

得到当前打开的数据库

SELECT DATABASE();SELECT SCHEMA();

删除指定的数据库

DROP DATABASE db_name;
DROP DATABASE [IF EXISTS] db_name; 如果数据库存在则删除

4.数据表相关操作

数据表

  • 是数据库最重要的组成部分之一,数据是保存在数据表中
  • 数据表由行(row)和列(column)来组成
  • 每个数据表中至少有一列,行可以有零行一行或者多行组成
  • 表名要求唯一,不要包含特殊字符,最好含义明确

创建表

CREATE TABLE [IF NOT EXISTS] tbl_name(
    字段名称 字段类型 [完整性约束条件],
    字段名称 字段类型 [完整性约束条件],
    ...
)ENGINE=存储引擎 CHARSET=编码方式;
  • UNSIGNED 无符号,没有负数,从0开始
  • ZEROFILL 零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
  • NOT NULL 非空约束,也就是插入值的时候这个字段必须要给值,值不能为空
  • DEFAULT 默认值,如果插入记录的时候没有给字段赋值,则使用默认值
  • PRIMARY KEY 主键,标识记录的唯一性,值不能重复,一个表只能有一个主键,自动禁止为空
  • AUTO_INCREMENT 自动增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
  • UNIQUE KEY 唯一性,一个表中可以有多个字段是唯一索引,同样的值不能重复,但是NULL值除外
  • FOREIGN KEY 外键约束

查看当前数据库下已有数据表

  • SHOW TABLES;
  • SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

查看指定数据表的详细信息

SHOW CREATE TABLE tbl_name;

查看表结构

  • DESC tbl_name;
  • DESCRIBE tbl_name;
  • SHOW COLUMNS FROM tbl_name;

删除指定的数据表

DROP TABLE [IF EXISTS] tbl_name;

表结构相关操作

添加字段

ALTER TABLE tbl_name
ADD 字段名称 字段属性 [完整性约束条件] [FIRST|AFTER 字段名称];


删除字段

ALTER TABLE tbl_name
DROP 字段名称;

添加默认值

ALTER TABLE tbl_name
ALTER 字段名称 SET DEFAULT 默认值;

删除默认值

ALTER TABLE tbl_name
ALTER 字段名称 DROP DEFAULT;

修改字段类型、字段属性

ALTER TABLE tbl_name
MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称];

修改字段名称、字段类型、字段属性

ALTER TABLE tbl_name
CHANGE 原字段名称 新字段名称 字段类型 字段属性 [FIRST | AFTER 字段名称];

添加&删除主键

添加主键

ALTER TABLE tbl_name
ADD PRIMARY KEY(字段名称);

删除主键

ALTER TABLE tbl_name
DROP PRIMARY KEY;

添加&删除唯一索引

添加唯一索引

ALTER TABLE tbl_name
ADD UNIQUE KEY|INDEX [index_name] (字段名称);

删除唯一索引

ALTER TABLE tbl_name 
DROP index_name;

修改数据表名称

ALTER TABLE tbl_name 
RENAME [TO|AS] new_tbl_name;
RENAME TABLE tbl_name TO new_tbl_name;

修改AUTO_INCREMENT的值

ALTER TABLE tbl_name AUTO_INCREMENT=值;

5.MySQL中的数据类型

数值型

整数型

浮点型

字符串类型

  • CHAR效率高于VARCHAR,CHAR相当于拿空间换时间,VARCHAR拿时间换空间
  • CHAR默认存储数据的时候,后面会用空格填充到指定长度;而在检索的时候会去掉后面空格;VARCHAR在保存的时候不进行填充,尾部的空格会留下
  • TEXT列不能有默认值,检索的时候不存在大小写转换

    日期时间类型

二进制类型

6.MySQL存储引擎

MySQL架构图

MySQL是由SQL接口、解析器、优化器、缓存和存储引擎组成。

  • Connectors:指的是不同语言与SQL的交互接口
  • Management Serivices & Utillities:系统管理和工具
  • Connection Pool:连接池,管理缓冲用户连接,线程处理等需要缓存的需求
  • SQL Interface:接收用户的SQL指令,并且返回需要查询的结果。
  • Parser:解析器。
  • Optimizer:查询优化器--选取-投影-联接--SELECT id,username FROM user WHERE age>10;
  • Caches & Buffers:查询缓存
  • Engine:存储引擎

MySQL存储引擎

存储引擎就是指表的类型,存取和处理数据的方式。

查看当前支持的存储引擎

SHOW ENGINES;

查看默认的存储引擎

存储引擎分类

本文是全系列中第24 / 24篇:PHP快速入门

赞(0)
未经允许不得转载:极客少年 » 3.3 深入浅出MySQL数据库
分享到: 更多 (0)

极客少年

大道至简码支付源码