写给自己的mysql基础教程

发表于 2019-04-09  204 次阅读


文章目录

安装

配置

MySQL目录结构

bin目录,存储可执行文件
data目录,存储数据文件
docs, 文档
include目录,存储包含的头文件
lib目录,存储库文件
share目录,错误消息和字符集

配置文件

my.ini

启动与停止服务

  1. 管理-服务-mysql服务
  2. 启动服务,cmd命令行输入
net start mysql

停止服务输入

net stop mysql

登录与退出mysql

  1. 登录:cmd - mysql -u root -p
  2. 退出:\q , quit , exit

修改MySql提示符

参数 描述
\D 完整日期
\d 当前数据库
\h 服务器名称
\u 当前用户

设置为 当前用户@服务器名 数据库> 的形式

prompt \u@\h \d>

常用命令

SELECT VERSION();
SELECT NOW();
SELECT USER();
SELECT DATABASE(); // 查看当前数据库

Mysql语句规范

  • 关键字与函数名称全部大写
  • 数据库名称、表名称、字段名称全部小写
  • SQL语句必须以分号结尾

操作数据库

创建数据库

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name

修改数据库编码方式

ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name

删除数据库

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

查看数据库列表

SHOW [DATABASES | SCHEMAS]

查看警告信息

SHOW WARNINGS

查看数据库编码方式

SHOW CREATE DATABASE db_name;

数据类型和操作数据表

数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表不同的信息类型

整形

image
M
指出最大的显示尺寸。最大的合法的显示尺寸是 255 。

UNSIGNED
无符号,即为非负数,只针对整型。

当插入长度大于设定的M时,字段值不会被截断,还是按照类型的实际精度进行保存。

整型字段有个ZEROFILL属性,在数字长度不够的数据前面填充0,以达到设定的长度。M值只当属性为ZEROFILL时,才有区别效果。

浮点型

FLOAT
DOUBLE

FLOAT(M, D)
M的值应该取1到255。D的值可为0到30

时期时间型

YEAR
TIME
DATE
DATEIME
TIMESTAMP

字符型

CHAR(M) M个字节,0 <= M <= 255
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM('value1', 'value2'...)
SET('value1', 'value2'...)

创建数据表

打开数据库:
USE 数据库
查看当前打开的数据库:SELECT DATABASE();

CREATE TABLE [IF NOT EXISTS] table_name(
    column_name data_type,
)

查看数据表

SHOW TABLES [FROM db_name];

查看数据表的结构

SHOW COLUMNS FROM tb_name;

或者

DESC tb_name;

插入记录

INSERT [INTO] tb_name[(COLUMNS...)] values(val...)

更新记录(单表更新)

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,col_nmae2={expr2|DEFAULT}]... [WHERE where_condition]

单表删除记录

DELETE FROM tb_name [WHERE where_condition]

记录查找

SELECT select_expr[,select_expr...] 
[
    FROM tb_name
    [WHERE where_condition] // 条件查询
    [GROUP BY {col_name|expr|position}[ASC|DESC],...] // 分组
    [HAVING where_condition]  //分组条件
    [ORDER BY {col_name|expr|position}[ASC|DESC],...] // 排序
    [LIMIT {[offset,]row_count|row_count OFFSET offset}] // 限制查询结果的数量

]
查询表达式(select_expr)

每一个表达式表示想要的一列,必须有至少一个。多个列之间以英文逗号分隔。星号()表示所有列。tb_name.可以表示命名表的所有列。查询表达式可以使用AS alias_name为其赋予别名。别名可用于GROUP BY, ORDER BY 或HAVING子句。

空值与非空

  • NULL,字段值可以为空
  • NOT NULL,字段值禁止为空

AUTO_INCREMENT

  • 自动编号,且必须与主键组合使用
  • 默认情况下,起始值为1,每次增量为1

主键

主键是数据表的唯一索引
* 主键约束
* 每张数据表只能存在一个主键
* 主键保证记录唯一性
* 主键自动NOT NULL

UNIQUE KEY

  • 唯一约束
  • 唯一约束可以保证记录的唯一性
  • 唯一约束的字段可以为空值(NULL)
  • 每张数据表可以存在多个唯一约束

DEFAULT

  • 默认值
  • 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值

Mysql外键约束的要求解析

约束

  1. 约束保证数据的完整性和一致性
  2. 约束分为表级约束和列级约束
  3. 约束类型包括:

* NOT NULL 非空约束
* PRIMARY KEY 主键约束
* UNIQUE KEY 唯一约束
* DEFAULT 默认约束
* FOREIGE KEY 外键约束

外键约束

保持数据的一致性,完整性。实现一对一或一对多关系

外键约束的要求

  1. 父表和子表必须使用相同的存储引擎,而且禁止使用临时表
  2. 数据表的存储引擎只能为InnoDB
  3. 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同
  4. 外键列和参照列必须创建索引。如果外键列不存在索引的话,mysql将自动创建索引

外键约束的参照操作

mysql修改数据表

添加单列

ALTER TABLE tb_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]

添加多列

ALTER TABLE tb_name ADD [COLUMN] (col_name col_defintion...)

删除列

ALTER TABLE tb_name DROP col_name

添加主键约束

ALTER TABLE tb_name ADD [CONSTRAINT[SYMBOL]] PRIMARY KEY [index_type](index_col_name,...)

添加唯一约束

ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)

添加外键约束

ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition

添加/删除默认约束

ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

子查询与连接

子查询

子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。
例如:

SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);

其中

SELECT * FROM t1

称为Outer Query/Outer Statement

SELECT col2 FROM t2

称为SubQuery。
子查询指嵌套在查询内部,且必须始终出现在圆括号内。子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT,函数等。子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。子查询可以返回标量、一行、一列或子查询。

使用比较运算符的子查询

使用[NOT] IN/EXISTS 的子查询

INSERT ... SELECT

多表更新

UPDATE table_references SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition]

连接

语法结构
table_reference
{[INNER|CROSS]JOIN|{LEFT|RIGHT}[OUTER]JOIN}
table_reference
ON conditional_expr
内连接
左外连接
右外连接

无限级分类表设计

多表删除

存储过程

创建存储过程

CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic] routine_body

proc_parameter:
[IN | OUT | INOUT] param_name type
IN: 表示参数的值必须在调用时指定,不能改变,不能返回
OUT:表示该参数的值可以被改变,并且返回
INOUT:表示该参数的调用指定,并且可以改变和返回

过程体(routine_body)
* 过程体由合法的SQL语句构成;
* 过程体可以是任意的SQL语句;
* 过程体如果为复合结构则使用BEGIN...END语句
* 复合结构可以包含声明,循环,控制结构;

调用存储过程

CALL sp_name([proc_parameter[,...]]);

CALL sp_name;

本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

眼前解决不了的问题, 都可交付未来, 时间是一个伟大的作者, 他必将写出, 最完美的答案。