本文参考于 DataWhale 教程:
https://github.com/datawhalechina/wonderful-sql
初识数据库
数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database,DB)。用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)。
-
层次数据库:该数据库系统最早使用的一种模型,它的数据结构是一棵“有向树”。根结点在最上端,层次最高,子结点在下,逐层排列。
-
关系数据库:该数据库系统把数据看作是一个二维表格,任何数据都可以通过行号 + 列号来唯一确定,它的数据模型看起来就是一个 Excel 表。
常见的关系数据库管理系统有 Mysql、SQL Server、Oracle、DB2、PostgreSQL 等等。
-
面向对象数据库:该数据库系统是基于面向对象编程语言 (OOP) 的数据库,其数据都是以对象/类的形式表示并存储在面向对象数据库。
-
XML数据库:该数据库系统是支持对XML格式文档进行存储和查询等操作的数据管理系统。
-
键值存储系统:该数据库系统支持获取摸个范围内的数值,求交、并、补集。代表有Redis。
RDBMS 主要是 C/S 类型,如下图
使用 Navicat 连接数据库
效果如下:
SQL 语法规范:
- MySQL本身不区分大小写,但强烈要求关键字大写,表名、列名用小写;
- 创建表时,使用统一的、描述性强的字段命名规则保证字段名是独一无二且不是保留字的,不要使用连续的下划线,不用下划线结尾;最好以字母开头
- 关键字右对齐,且不同层级的用空格或缩进控制,使其区分开,见样例二;
- 列名少的时候写在一行里无伤大雅;多的时候以及涉及到CASE WHEN 或者聚合计算的时候,建议分行写;个人习惯是逗号在列名前面,方便之后删除某些列,放列名后亦可;
- 表别名和列别名尽量用有具体含义的词组,不要用a b c,不然以后review的时候会非常痛苦;
- 运算符前后都加一个空格;
- 当用到多个表时,请在所有列名前写上引用的表别名,不要嫌麻烦;
- 每条命令用分号结尾;
- 养成随手写注释的习惯
参考:
SQL编程风格
SQL 基本语法
数据库的创建
语法:
CREATE DATABASE shop;
表的创建
现在我们创建 product 表,语句如下:
CREATE TABLE product
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
数据类型
定义字段需要定义的类型,常见有 4 种数据类型,如下:
-
INTEGER 型
-
CHAR 型
-
VARCHAR 型
-
DATE 型
表的更新和删除
修改表只需要用 alter 关键字就行,以下有新增列和删除列两句 sql 语句:
ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
ALTER TABLE product DROP COLUMN product_name_pinyin;
现在我们删除之前创建的表,语句如下:
DROP TABLE product;
注意:
需要特别注意的是,删除的表是无法恢复的,只能重新插入。
ALTER TABLE 语句和 DROP TABLE 语句一样,执行之后无法恢复。误添加的列可以通过 ALTER TABLE 语句删除,或者将表全部删除之后重新再创建。
- 清空表内容
TRUNCATE TABLE TABLE_NAME;
索引
- 索引的作用
MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。
- 创建索引
-- 方法1
CREATE INDEX indexName ON table_name (column_name)
-- 方法2
ALTER table tableName ADD INDEX indexName(columnName)
练习题
1.1
编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项的表 Addressbook (地址簿),并为 regist_no (注册编号)列设置主键约束
表1-A 表 Addressbook (地址簿)中的列
CREATE TABLE Addressbook
(regist_no INTEGER NOT NULL,
name VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address CHAR(20),
PRIMARY KEY (regist_no));
1.2
假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请编写 SQL 把此列添加到 Addressbook 表中。
列名 : postal_code
数据类型 :定长字符串类型(长度为 8)
约束 :不能为 NULL
ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
1.3 填空题
请补充如下 SQL 语句来删除 Addressbook 表。
(Drop) table Addressbook;
1.4 判断题
是否可以编写 SQL 语句来恢复删除掉的 Addressbook 表?
答:不能,除非用辅助工具。