简介

数据库和SQL介绍

MySQL 介绍

一些基本命令

sudo service mysql start #打开 MySQL
mysql -u root #使用 root 登陆
mysql> show databases; # 注意分号
mysql> use database_name
mysql> show tables; # 注意分号
mysql> exit

创建一个数据库并插入语句

数据库和表

IDNameGender
054LeoMale
055KenMale
056LilyFemale

MySQL 中的数据类型

数据类型大小(字节)用途格式
INT4整数
FLOAT4单精度浮点数
DOUBLE4双精度浮点数
ENUM单选,比如性别ENUM('a','b','c')
SET多选SET('1','2','3')
DATE3日期YYYY-MM-DD
TIME3时间点或持续时间HH:MM:SS
YEAR1年份值YYYY
CHAR0~255定长字符串
VARCHAR0~255变长字符串
TEXT0~65535长文本数据

创建数据库和表

CREATE DATABASE db_name; # 一般将保留字大写,变量小写
USE db_name;
CREATE TABLE table_name(
col_1_name INT(10),
col_2_name CHAR(20),
col_3_name CHAR(10)
);

向表中插入数据

INSERT INTO table_name(col_1_name, col_2_name, ...) VALUES (c_1, c_2, ...);
SELECT * FROM table_name; # 查看表

注意:

  1. col_1_name 必须是 table_name 中有的列,否则报错
  2. INSERT 时可以缺省某一列,此时这一列会被 NULL 填充

约束

主键

默认值约束

col INT(10) DEFAULT 'default_value',

唯一约束

UNIQUE(col),

外键约束

非空约束

SELECT语句详解

基本 SELECT 语句

格式:

SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;

限制条件

对结果排序

格式

SELECT 要查询的列名 FROM 表名字 WHERE 限制条件 ORDER BY 排序列 ASC/DESC;

其中,ASC 为升序,DESC 为降序;默认为升序

使用内置函数进行计算

函数名COUNTSUMAVGMAXMIN
功能计数求和均值最大值最小值

语法:

SELECT FUNC(col) AS new_name FROM table_name;
# As new_name 可省略,作用是给 FUNC(col) 重命名

例子:

SELECT MAX(salary) AS richest, MIN(salary) AS easiest FROM employee;

子查询

查询结果可以作为更高一级查询的范围

例子:

SELECT col_1, col_2 WHERE col_1 IN (SELECT col_3 FROM table_name);

这段语句

连接查询

例子:

SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;

等价于

SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_dpt = department.dpt_name
ORDER BY id;

作用是输出工号,姓名以及所在部门的人数

修改与删除

基本命令

对列进行修改

其他

索引

索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容。 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录。这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作。 而如果在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大加快查询速度

索引的效果是加快查询速度,当表中数据不够多的时候是感受不出它的效果的。

在使用 SELECT 语句查询的时候,语句中 WHERE 里面的条件,会自动判断有没有可用的索引。

ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名);

例子:在 employee 中建立两个索引,

set w500

ALTER TABLE employee ADD INDEX idx_id (id); 
#  employee 表的 id 列上建立名为 idx_id 的索引

CREATE INDEX idx_name ON employee (name);
#  employee 表的 name 列上建立名为 idx_name 的索引

SHOW INDEX FROM 表名字  # 查看索引

视图

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。它就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。

  • 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;
  • 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
  • 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;
  • 在使用视图的时候,可以把它当作一张表。

视图也可以建立在多张表上,只需在 SELECT 语句中使用子查询或连接查询。

CREATE VIEW 视图名(a,b,c) AS SELECT 1,2,3 FROM 表名字;

set w500

CREATE VIEW v_emp(v_name, v_age, v_phone) AS SELECT name, age, phone FROM employee;

SELECT * FROM v_emp;

结果:

set w250

导入

导入操作,可以把一个文件里的数据保存进一张表。

LOAD DATA INFILE '文件路径' INTO TABLE 表名字;

在 /tmp/SQL6 目录下有一个名为 in.txt 的文件,我们尝试把这个文件中的数据导入数据库 mysql_shiyan 的 employee 表中。

文件内容

set w400

导入前的数据库

set w400

命令:

LOAT DATA INFILE '/tmp/SQL6/in.txt' INTO TABLE employee;

导入之后的数据库

set w400

导出

导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。

SELECT 1,列2 ... INTO OUTFILE '文件路径和文件名' FROM 表名字;

备份

备份与导出的区别:

  • 导出: 只保存数据库中的数据
  • 备份: 把数据库的结构,包括数据、约束、索引、视图等全部另存为一个文件

mysqldump 是 MySQL 用于备份数据库的实用程序。它主要产生一个 SQL 脚本文件,其中包含从头重新创建数据库所必需的命令 CREATE TABLE INSERT 等。

语句:

mysqldump -u root 数据库名>备份文件名;   #备份整个数据库

mysqldump -u root 数据库名 表名字>备份文件名;  #备份整个表

恢复

source sql文件+路径 # 方法一,恢复以前的数据库

mysql -u root 新数据库名 < sql文件+路径 # 方法二,将以前的数据库恢复到特定的数据库名里