数据库和 SQL 概念
数据库(Database
)是按照数据结构来组织、存储和管理数据的仓库,它的产生距今已有六十多年。随着信息技术和市场的发展,数据库变得无处不在:它在电子商务、银行系统 等众多领域都被广泛使用,且成为其系统的重要组成部分。
数据库用于记录数据,使用数据库记录数据可以表现出各种数据间的联系,也可以很方便地对所记录的数据进行增、删、改、查等操作。
结构化查询语言(Structured Query Language
)简称 SQL,是上世纪 70 年代由 IBM 公司开发,用于对数据库进行操作的语言。更详细地说,SQL 是一种数据库查询和程序设计语 言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
MySQL 介绍
MySQL 是一个 DBMS(数据库管理系统),由瑞典 MySQLAB 公司开发,目前属于 Oracle 公司,MySQL 是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库 模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据)。由于其体积 小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发者都 选择 MySQL 作为网站数据库。MySQL 使用 SQL 语言进行操作。
MySQL安装
以下是在Linux下安装Mysql的过程,在Windows下我用的是Wamp集成环境
1 安装之前的检查
先要检查Linux系统中是否已经安装了MySQL,输入命令尝试打开MySQL服务:
1 sudo service mysql start
输入密码后,如果出现以下提示,则说明系统中已经安装有 MySQL:
如果提示是这样的,则说明系统中没有 MySQL,需要继续安装:
1 mysql: unrecognized service
2 Ubuntu Linux 安装配置 MySQL
在Ubuntu上安装MySQL,最简单的方式是在线安装。只需要几行简单的命令( #
号后面是注释):
1 #安装 MySQL 服务端、核心程序 2 sudo apt-get install mysql-server 3 4 #安装 MySQL 客户端 5 sudo apt-get install mysql-client
在安装过程中会提示确认输入YES,设置 root 用户密码(之后也可以修改)等,稍等片刻便可安装成功。
安装结束后,用命令验证是否安装并启动成功:
1 sudo netstat -tap | grep mysql
如果出现如下提示,则安装成功:
此时,可以根据自己的需求,用 gedit 修改 MySQL 的配置文件(my.cnf),使用以下命令:
1 sudo gedit /etc/mysql/my.cnf
尝试MySQL
1). 打开MySQL
使用如下两条命令,打开MySQL服务并使用root用户登录:
1 # 启动 MySQL 服务 2 sudo service mysql start 3 4 # 使用 root 用户登录,实验楼环境的密码为空,直接回车就可以登录 5 mysql -u root
执行成功会出现如下提示:
2). 查看数据库
使用命令 show databases;
,查看有哪些数据库(注意不要漏掉分号 ;
):
可见已有三个数据库,分别是 “information-schema”、“mysql”、“performance-schema”。
3). 连接数据库
选择连接其中一个数据库,语句格式为 use <数据库名>
,这里可以不用加分号,这里我们选择 information_schema
数据库:
1 use information_schema
4). 查看表
使用命令 show tables;
查看数据库中有哪些表(注意不要漏掉“;”):
5). 退出
使用命令 quit 、
exit
或者快捷键(ctrl+c)退出 MySQL。
至此,MySQL 已经安装、配置完成,可以正常使用了。
创建数据库并插入数据
以下内容有:在使用实验楼 Linux 环境进行本次实验之前,先用以下两条命令打开MySQL 服务并使用 root 登录:
1 新建数据库
首先,创建一个数据库,给它一个名字,比如 test
。
语句格式为 CREATE DATABASE <数据库名字>;
,(注意不要漏掉分号 ;
),前面的 CREATE DATABASE 也可以使用小写,具体命令为:
1 CREATE DATABASE test;
创建成功后输入命令 show databases;
(注意不要漏掉;
)检查一下:
在大多数系统中,SQL 语句都是不区分大小写的,因此以下语句都是合法的:
1 CREATE DATABASE name1; 2 create database name2; 3 CREATE database name3; 4 create DAtabaSE name4;
但是出于严谨,而且便于区分保留字(保留字(reserved word):指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。)和变量名,
我们把保留字大写,把变量和数据小写。
2 连接数据库
接下来的操作,就在刚才创建的 test
中进行,首先要连接数据库,使用语句 use <数据库名字>
:
1 use test
如图显示,则连接成功:
输入命令 show tables;
可以查看当前数据库里有几张表,现在test
里还是空的:
3 数据表
数据表(table
)简称表,它是数据库最重要的组成部分之一。数据库只是一个框架,表才是实质内容。
而一个数据库中一般会有多张表,这些各自独立的表通过建立关系被联接起来,才成为可以交叉查阅、一目了然的数据库。如下便是一张表:
ID | name | phone |
---|---|---|
01 | Tom | 110110110 |
02 | Jack | 119119119 |
03 | Rose | 114114114 |
4 新建数据表
在数据库中新建一张表的语句格式为:
1 CREATE TABLE 表的名字 2 ( 3 列名a 数据类型(数据长度), 4 列名b 数据类型(数据长度), 5 列名c 数据类型(数据长度) 6 );
在 test
中新建一张表 people
,包含姓名,ID 和电话信息,所以语句为:
1 CREATE TABLE people (id int(10),name char(20),phone int(12));
然后再创建一张表 department
,包含名称和电话信息,想让命令看起来更整洁,你可以这样输入命令:
这时候再 show tables;
一下,可以看到刚才添加的两张表:
5 数据类型
在刚才新建表的过程中,用到了数据类型,MySQL 的数据类型和其他编程语言大同小异,下表是一些 MySQL 常用数据类型:
数据类型 | 大小(字节) | 用途 | 格式 |
---|---|---|---|
INT | 4 | 整数 | |
FLOAT | 4 | 单精度浮点数 | |
DOUBLE | 8 | 双精度浮点数 | |
ENUM | 单选,比如性别 | ENUM('a','b','c') | |
SET | 多选 | SET('1','2','3') | |
DATE | 3 | 日期 | YYYY-MM-DD |
TIME | 3 | 时间点或持续时间 | HH:MM:SS |
YEAR | 1 | 年份值 | YYYY |
CHAR | 0~255 | 定长字符串 | |
VARCHAR | 0~255 | 变长字符串 | |
TEXT | 0~65535 | 长文本数据 |
整数除了 INT 外,还有 TINYINT、SMALLINT、MEDIUMINT、BIGINT。
CHAR 和 VARCHAR 的区别: CHAR 的长度是固定的,而 VARCHAR 的长度是可以变化的,比如,存储字符串 “abc",对于 CHAR(10),表示存储的字符将占 10 个字节(包括 7 个空字符),而同样的 VARCHAR(12) 则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度
,12 只是最大值,当你存储的字符小于 12 时,按实际长度存储。
ENUM和SET的区别: ENUM 类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而 SET 类型的值则可以多选。
6 插入数据
刚才我们新建了两张表,使用语句 SELECT * FROM people;
查看表中的内容,可以看到people 表中现在还是空的:
通过 INSERT 语句向表中插入数据,语句格式为:
1 INSERT INTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3);
向 people 中加入 Tom、Jack 和 Rose:
1 INSERT INTO people(id,name,phone) VALUES(01,'Tom',110110110); 2 3 INSERT INTO people VALUES(02,'Jack',119119119); 4 5 INSERT INTO people(id,name) VALUES(03,'Rose');
有的数据需要用单引号括起来,比如 Tom、Jack、Rose 的名字,这是由于它们的数据类型是 CHAR 型。
此外 VARCHAR,TEXT,DATE,TIME,ENUM 等类型的数据也需要单引号修饰,而 INT,FLOAT,DOUBLE 等则不需要。
第一条语句比第二条语句多了一部分:(id,name,phone)
这个括号里列出的,是将要添加的数据 (01,'Tom',110110110)
其中每个值在表中对应的列。而第三条语句只添加了 (id,name)
两列的数据,所以在表中Rose的phone为NULL。
现在我们再次使用语句 SELECT * FROM employee;
查看 employee 表,可见 Tom 和 Jack 的相关数据已经保存在其中了: