数据库概述
数据库与数据库管理系统
数据库(Database,DB)是指将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。
而用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)。
数据库管理系统的种类有:
层次数据库(Hierarchical Database,HDB):把数据通过层次结构(树形结构)的方式表现出来。
关系数据库(RDB):采用由行和列组成的二维表来管理数据,类似于 Excel 表。它使用专门的 SQL(Structured Query Language,结构化查询语言)对数据进行操作,这种类型的 DBMS 称为关系数据库管理系统(Relational Database Management System,RDBMS)。
面向对象数据库(OODB):把数据以及对数据的操作集合起来以对象为单位,面向对象数据库就是用来保存这些对象的数据库。
XML数据库(XMLDB):实现对 XML 形式的数据进行高速处理。
键值存储系统(KVS):单纯用来保存查询所使用的主键(Key)和值(Value)的组合
SQL:Structure Query Language。(结构化查询语言)
SQL的分类:
DDL数据定义语言
用来定义数据库对象:库、表、列等。包括创建表,修改表,删除表
有以下指令:
CREATE : 创建数据库和表等对象
DROP : 删除数据库和表等对象
ALTER : 修改数据库和表等对象的结构
DML数据操作语言
用来定义数据库记录:是对表中数据的操作。包括插入,更新,删除数据
有以下指令:
SELECT :查询表中的数据
INSERT :向表中插入新数据
UPDATE :更新表中的数据
DELETE :删除表中的数据
DCL数控制语言
用来定义访问权限和安全级别
有以下指令:
COMMIT : 确认对数据库中的数据进行的变更
ROLLBACK : 取消对数据库中的数据进行的变更
GRANT : 赋予用户操作权限
REVOKE : 取消用户的操作权限
DQL数据查询语言
用来查询记录(数据):只有SELECT语句
MySQL语句的基本书写规则
一
MySQL 语句以分号(;)为结尾,它的关键字、表名和列名不区分大小写,但是插入到表中的数据是区分大小写的。
二
数据库的名称只能使用小写字母。
三
字符串和日期常数需要使用单引号(')括起来(MySQL 也可以使用双引号(")),单词之间需要使用半角空格或者换行符进行分隔。
四
数字常数无需加注单引号,直接书写数字即可。
表的创建
1> 命名规范
只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称, 名称必须以半角英文字母开头且不能重复。
2> 数据类型
所有的列必须指明数据类型,数据类型主要分为:数字型、字符型和日期型。细分来说,有以下数据类型:
名称类型说明
TINYINT 短整型范围为0~255
INT 整型4字节整数类型,范围约+/-21亿
BIGINT 长整型8字节整数类型,范围约+/-922亿亿
INTEGER 整数不能用来存放小数
REAL(FLOAT(24)) 浮点型4字节浮点数,范围约+/-1038
DOUBLE 浮点型8字节浮点数,范围约+/-10308
DECIMAL(M,N)(NUMERIC(M,N)) 高精度小数由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位, 其中小数10位,通常用于财务计算
CHAR(N) 定长字符串存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串,不足字符数要求的话使用半角空格补足,若未指定则默认为char(1)
VARCHAR(N) 变长字符串存储可变长度的字符串,例如,VARCHAR(100)可以存储0~100个字符的字符串
BOOLEAN 布尔类型存储True或者False
DATE 日期类型存储日期,例如,2018-06-22
TIME 时间类型存储时间,例如,12:20:59
DATETIME 日期和时间类型存储日期+时间,例如,2018-06-22 12:20:59
3> 约束
在定义每一列的时候,我们可以在最后为该列加上相关的约束,例如:
AUTO_INCREMENT 编号从1开始,并1为基数递增,每个表只允许一个 AUTO_INCREMENT 列,而且它必须被索引(如使它成为主键)
DEFAULT <数值> 为某列设置默认值,MySQL不允许使用函数作为默认值,它只支持常量
PRIMARY KEY 将某一列或某几列设置为主键
NOT NULL 该列不能插入空数据
COMMENT ‘<注释信息>’ 这不算是约束,用在列后对列进行注释说明
表的删除
①删除数据库
DROP DATABASE <数据库名称>;
②删除表
DROP TABLE <表名称>;
还有一种删除表的方法,先判断表是否存在,如果存在便删除:
DROP TABLE IF EXISTS <表名>;
③删除视图
DROP VIEW <视图名称>;
表的一些操作
添加列
ALTER TABLE <表名> ADD [COLUMN] <列的定义> ;
这里列的定义就是像创建表时列的定义一样。
删除列
ALTER TABLE <表名> DROP COLUMN <列名> ;
重命名列名
ALTER TABLE <表名> CHANGE COLUMN <旧列名> <新列的定义>;
定义外键
ALTER TABLE <表名1> ADD CONSTRAINT <约束名称> FOREIGN KEY (<表1列名>) REFERENCES <表名2> <表2列名>;
如果对单个表进行多个更改,可以使用单条 ALTER TABLE 语句,每个更改用逗号分隔。
重命名表名
RENAME TABLE <旧表名> TO <新表名>;
可以同时对多个表进行重命名:
RENAME TABLE <旧表名1> TO <新表名1>, <旧表名2> TO <新表名2>, <旧表名3> TO <新表名3>, ...;
表的查询
SELECT语句
SQL 语句中最基础的语句就是 SELECT 语句,通过 SELECT 语句查询并选取出必要数据的过程称为匹配查询或查询(query)。
SELECT 语句的基本语法如下:
SELECT <列名1>, <列名2>, ...
FROM <表名>
WHERE <条件表达式>
LIMIT m, n;
SELECT 子句中列举了希望从表中查询出的列的名称:
该子句中的列名还可以写作<表名>.<列名>,这对于FROM子句中存在不止一个表时非常有用。
查询结果中列的顺序和该子句中的顺序相同。SELECT子句中可以只用一个星号( * ),星号代表全部列的意思。但是使用星号无法设定列的显示顺序,这时会按照 CREATE TABLE 语句的定义对列进行排序。
可以使用 AS 关键字为列设定别名,同样也可以使用该关键字在 FROM 子句中对表设置别名。注意,允许设置汉字别名,设定汉语别名时需要使用双引号( " ),使用双引号可以设定包含空格(空白)的别名。此外,AS 关键字可以省略。
该子句中可以使用 DISTINCT 关键字删除重复行。注意两点:在使用 DISTINCT 时, NULL 也被视为一类数据;DISTINCT 关键字只能用在第一个列名之前,对多列数据同时进行去重。
SELECT 子句中还可以书写常数,主要包括字符串常数、数字常数和日期常数,查询结果有多少行,就会有多少行的常数。