【长期更新】【SQL数据库】MYSQL数据库学习笔记

第一章,数据库和SQL

1-1 数据库是什么

数据库的定义:

-将大量的数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database,DB)

-用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)

数据库的种类:

-层次数据库(HDB):把数据通过层次结构(树形结构)的方式表现出来

-关系数据库(RDB):采用由行和列组成的二维表来管理数据,使用专门的SQL(结构化查询语言,Structure Query Language)来对数据进行操作

-面向对象数据库(OODB):把数据以及对数据操作集合起来以对象为单位进行管理

-XML数据库(XMLDB):XML数据库可以对XML形式的大量数据进行高速处理

-键值存储系统(KVS):这是一种单纯用来保存查询所使用的的主键和值的组合的数据库

1-2 数据库的结构

RDBMS的常见系统结构:客户端/服务器类型(C/S类型)

-服务器:指的是用来接受其他程序发出的请求,并对该请求进行相应处理的程序(软件),或者是安装了此类程序的设备(计算机)

PS:RDBMS也是一种服务器,它能够从保存在硬盘上的数据库中读取数据并返回,还可以把数据变更为指定内容

-客户端:向服务器发出请求的程序(软件),或者是安装了该程序的设备(计算机)称为客户端

表的结构

-:用来管理数据的二维表在关系数据库中简称为表

根据SQL语句的内容返回的数据同样必须是二维表的形式

表的列称为字段,它代表了保存在表中的数据项目(数据名)

与之相对的,表的行称为记录,他相当于一条数据,关系数据库必须以行为单位进行数据读写

行和列交汇的方格称为单元格一个单元格中只能输入一个数据

1-3 SQL概要

SQL语句及其种类

根据对RDBMS赋予的指令种类的不同,SQL语句可以分为以下三类

DDL(Data Definition Language,数据定义语言):

用来创建或者删除存储数据用的数据库以及数据库中的表等对象。DDL包含以下几种指令:

CREATE:创建数据库和表等对象
DROP:删除数据库和表等对象
ALTER:修改数据库和表等对象的结构
DML(Data Manipulation Language,数据操纵语言)(使用最多的)

用来查询或者变更表中的记录,DML包含以下几种指令:

SELECT:查询表中的数据
INSERT:向表中插入新数据
UPDATE:更新表中的数据
DELETE:删除表中的数据
DCL(Data Control Language,数据控制语言)

用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL包含以下几种指令:

COMMIT:确认对数据库中的数据进行的变更
ROLLBACK:取消对数据库中的数据进行的变更
GRANT:赋予用户操作权限
REVOKE:取消用户的操作权限

SQL的基本书写规则

书写SQL语句时必须要遵守一些规则,这些规则都比较简单,迅速过一遍

  • SQL语句必须以分号(;)结尾:
  • SQL语句关键词不区分大小写,但是插入表中的数据是区分大小写的
  • 常数的书写方式是固定的

在SQL中直接书写的字符串,日期或者数字等常称为常数,常数书写方式如下所示

  • SQL语句中包含字符串的时候,需要向**‘abc’这样,使用单引号(’)**把字符串括起来,用来标识这是一个字符串
  • SQL语句中含有日期的时候,同样需要使用单引号括起来,日期的格式很多包括’26 Jan 2010’或者’10/01/26’你想怎么写就怎么写但是最好统一一个标准,今后这篇学习笔记中统一采用’2020-05-26’这种’年-月-日’的格式
  • SQL语句中的数字直接写就可以,不用任何符号标识
  • 单词需要用半角空格或者换行来分隔,当然,全角空格也不可以用来分隔,可能会有出错的可能

eg:

CREATE TABLE Product;()
CREATETABLE Product()

1-4 表的创建

数据库的创建(CREATE DATABASE语句)

运行CREATE DATABASE就可以在RDBMS上创建数据库了,语法如下:(数据库名,表名以及列名都要使用半角字符,千万不要用全角的,很有可能出错)

CREATE DATABASE <数据库的名称>;

表的创建(CREATE TABLE语句)

创建好数据库之后,接下来可以用CREATE TABLE 语句在其中创建表,语法如下:

CREATE TABLE <表名>
(<列名1> <数据类型> <该列所需的约束><列名1> <数据类型> <该列所需的约束><列名1> <数据类型> <该列所需的约束>...
 <该表的约束1>, <该表的约束2>,...);

每一列的数据类型是必须要指定的,还要为需要的列设置约束。约束可以定义在列的时候设置,也可以在语句的末尾设置。

但是NOT NULL约束只能以列为单位设置)

命名规则

  • 只能使用**半角英文字母,数字,下划线(_)**作为数据库,表和列的名称
  • 名称必须以半角英文字母作为开头
  • 名称不能重复

数据类型的指定

所有列都必须指定数据类型,数据类型表示数据的种类,包括数字型,字符型和日期型

INTEGER型

用来指定存储整数的列的数据类型(数字型),不能存储小数

CHAR型

用来存储字符串的列的数据类型(字符型),通常是向CHAR(20)这样指定,括号中是可以存储的字符串的长度(最大长度),如果字符串超过了最大长度,超出的部分就没有办法输入到该列中,至于这个最大字符串长度究竟是字符个数还是字节长度,这个在每个RDBMS中都不同,需要具体讨论。

另外,字符串是以定长字符串的形式存储的,如果字符串没有填满最大长度,后面补空格,填满最大长度

VARCHAR型

这个跟CHAR型一样可以指定字符串类型的列的数据类型,也是通过像VARCHAR(8)这样指定的,括号中是指定字符串的最大长度,但该类型是可变长字符串的形式保存字符串的,定长字符串会有空格填充没有填满的位置,可变长字符串不会这么做。对VARCHAR(8)来说,你输入’abc’,结果就是’abc’而不是’abc ’

DATA型

用来指定存储日期(年月日)的列的数据类型(日期型)

约束的设置

约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能,这里介绍两种约束:

NOT NULL约束

eg:

product_id		CHAR(4)		  NOT NULL,
product_name	VARCHAR(100)  NOT NULL,
product_type	VARCHAR(32)	  NOT NULL,

NULL是代表空白的关键字,NOT NULL就是不能输入空白,也就是必须输入数据的约束

主键约束

eg:

PRIMARY KEY (product_id)

这里是给product_id设置主键约束

所谓就是在指定数据时使用的列的组合,键多种多样,主键(primary key)就是可以特定一行数据类型的列(说人话,就是这个表中唯一的id),也就是说如果把product_id列为指定主键,就可以通过该列取出特定的商品数据了

1-5 表的删除和更新

表的删除(DROP TABLE语句)

删除表的SQL语句非常简单,只需要一行DROP TABLE语句就可以了,语法如下:

DROP TABLE <表名>;

注意:删除的表是无法恢复的,虽然有的RDBMS会有恢复功能,但还请在执行这个命令前仔细确认

表定义的更新(ALTER TABLE语句)

其实很多时候不需要删除表重建,只需要在原有的表的基础上改进就好了,变更表定义的语句时ALTER TABLE语句,语法如下:

  • 添加列的ALTER TABLE语句

    ALTER TABLE <表名> ADD COLUMN <列的定义>;
    

    如下我们尝试在Product表中添加这样一列,product_name_pinyin(商品名称),该列可以存储100位可变长字符串

    ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
    

    PS:我用的是MYSQL,不同的RDBMS可能在这条语句有些不同

  • 删除列的ALTER TABLE语句

    ALTER TABLE <表名> DROP COLUMN <列名>;
    

    如下我们尝试在Product表中删除这样一列,product_name_pinyin(商品名称)

    ALTER TABLE Product DROP COLUMN product_name_pinyin;
    

    PS:我用的是MYSQL,不同的RDBMS可能在这条语句有些不同,之后代码一律按Mysql标准

  • 插入数据:使用INSECT语句

  • 表名变更:使用RENAME语句

    RENAME TABLE <变更前表名> to <变更后表名>;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值