第1章 数据库和SQL-SQL基础教程

第1章 数据库和SQL-SQL基础教程

1-1 数据库是什么

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

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

关系数据库使用专门的 SQL(Structured Query Language,结构化查询语言) 对数据进行操作

这种类型的 DBMS 称为关系数据库管理系统(Relational Database Management System,RDBMS)。比较具有代表性的 RDBMS 有如下 5 种:
● Oracle Database:甲骨文公司的RDBMS
● SQL Server:微软公司的RDBMS
● DB2:IBM公司的RDBMS
● PostgreSQL:开源的RDBMS
● MySQL:开源的RDBMS

1-2 数据库的结构

关系数据库采用被称为数据库表的二维表来管理数据

数据库表由表示数据项目的列(字段)和表示一条数据的行(记录)所组
成,以记录为单位进行数据读写

1-3 SQL概要

SQL语句以分号(;)结尾

关键字不区分大小写,但是插入到表中的数据是区分大小写的

字符串和日期常数需要使用单引号(’)括起来
数字常数无需加注单引号(直接书写数字即可)

1-4 表的创建

数据库的创建:CREATE DATABASE <数据库名称>;

create database shop;

查看创建好的数据库:SHOW CREATE DATABASE <数据库名称>;

查看所有数据库列表:SHOW DATABASES

使用数据库:USE <数据库名称>;

删除数据库:DROP DATABASE <数据库名称>;

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

create table product(
	product_id char(4) primary key,
    product_name varchar(100) not null,
    product_type varchar(32) not null,
    sale_price int,
    purchase_price int,
    regist_date date
);

查看基本表结构:DESCRIBE(DESC) <表名>;

查看详细表结构:SHOW CREATE TBLE <表名>;

命名规则

只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称

名称必须以半角英文字母作为开头

在同一个数据库中不能创建两个相同名称的表,在同一个表中也不能创建两个名称相同的列

数据类型的指定

数据类型表示数据的种类,包括数字型、字符型和日期型等
所有的列都必须指定数据类型,每一列都不能存储与该列数据类型不符的数据

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

●CHAR型
CHAR 是 CHARACTER(字符)的缩写,是用来指定存储字符串的列的数据类型(字符型)
字符串以定长字符串的形式存储在被指定为 CHAR 型的列中。所谓定长字符串,就是当列中存储的字符串长度达不到最大长度的时候,使用半角空格进行补足

●VARCHAR型
VARCHAR中 的VAR是VARING(可变的)的缩写,也是用来指定存储字符串的列的数据类型(字符串类型),也可以通过括号内的数字来指定字符串的长度(最大长度)
但该类型的列是以可变长字符串的形式来保存字符串的。可变长字符串即使字符数未达到最大长度,也不会用半角空格补足

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

使用char和varchar时,指定的字符串长度一定要大于实际的字符串长度,以便完整保存我们输入的信息

varchar有一位要用来存储长度信息,所以varchar指定的字节是L+1(eg.存储5位长度的字符串,就需要指定varchar长度为6)

何时使用char/varchar?
① 数据长度相同,首选char(选用varchar会多占用空间,因为它有一位是用来存储长度的);数据长度不同,首选varchar(varchar不用补位,输入几位就是几位加一的字符串长度,不像char,如果位数小于指定长度的话,还需要用空格来填充)
② 如果长度出入不大,首选char(处理固定长度字符串运算效率更高)

约束的设置

① 主键约束:用来唯一地标识数据记录中的每一行记录,要求在主键约束中的数据记录是非空和唯一的
单字段主键:单一字段可以作为主键使用(主键约束可以直接写在该字段后)
多字段联合主键:多个字段组合而成的复合主键(主键约束要写在所有定义好的字段的下方)

② 非空约束:限制了在指定not null约束条件的字段中,记录的数据信息不能有空值

③ 唯一约束:限定了在录入有唯一约束的数据中,不能出现重复值

④ 自增字段:自动增加数值的字段,默认从1开始、步长为1(123456789…)

⑤ 默认值:为字段设置默认值,为某个字段导入数据时,一旦出现空值,将会按照default设定的默认值进行填充

1-5 表的删除和更新

表的删除(DROP TABLE语句)

DROP TABLE <表名>;

drop table product;

删除了的表是无法恢复的,在执行DROP TABLE语句之前请务必仔细确认

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

增加字段:ALTER TABLE <表名> ADD <列的定义>;

alter table product add product_name_pinyin varchar(100);

删除字段:ALTER TABLE <表名> DROP <列名>;

alter table product drop product_name_pinyin;

ALTER TABLE 语句和DROP TABLE 语句一样,执行之后无法恢复

-- 修改表名
alter table product rename goods;
or
rename product to goods;

第1章 数据库和SQL-SQL基础教程
第1章 数据库和SQL-SQL基础教程

向Product表中插入数据

-- 插入数据
insert into product
values
('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20'),
('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, NULL),
('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20'),
('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15'),
('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20'),
('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28'),
('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');
-- 导入外部文件(MySQL8.0此语法只能在命令行中使用,在Workbench中使用会报错)
load data local infile '文件绝对路径.txt'
into table <表名>
fields terminated by '\t'
ignore 1 lines;