Знакомство с базой данных
База данных — это набор данных, в котором хранится большой объем данных, который обрабатывается компьютером и к которому можно эффективно обращаться. Этот набор данных называется базой данных (Database, DB). Компьютерная система, используемая для управления базой данных, называется системой управления базами данных (СУБД).
тип
- Иерархическая база данных
- реляционная база данных
- База данных Oracle: РСУБД Oracle
- SQL Server: РСУБД Microsoft
- DB2: РСУБД IBM
- PostgreSQL: РСУБД с открытым исходным кодом
- MySQL: РСУБД с открытым исходным кодом
- объектно-ориентированная база данных
- XML-база данных
- база данных хранилища ключей и значений
Общая системная структура реляционной базы данных
При использовании СУБД наиболее распространенной структурой системы является структура типа клиент/сервер (тип C/S).
Установка базы данных
- Введение в использование сервера Alibaba Cloud MySQLTianchi-Media.OSS-Таланты-Пекин.Alibaba Cloud Killing.com/Dragonball/…
- Введение в создание локальной среды MySQLTianchi-Media.OSS-Таланты-Пекин.Alibaba Cloud Killing.com/Dragonball/…
Знакомство с SQL
Введение концепции
Структура таблицы, хранящейся в базе данных, аналогична строкам и столбцам в Excel.В базе данных строка называется записью, что эквивалентно записи, а столбец называется полем, которое представляет элементы данных, хранящиеся в Таблица.
Место, где встречаются строка и столбец, называется ячейкой, и в ячейку можно ввести только одну запись.
Операторы SQL можно разделить на следующие три категории:
- DDL
DDL (язык определения данных) используется для создания или удаления базы данных для хранения данных и объектов, таких как таблицы в базе данных. DDL содержит следующие команды
- CREATE: создание объектов, таких как базы данных и таблицы.
- DROP: удалить такие объекты, как базы данных и таблицы.
- ALTER: изменение структуры объектов, таких как базы данных и таблицы.
- DML
DML (язык манипулирования данными, язык манипулирования данными) используется для запроса или изменения записей в таблице. DML содержит следующие директивы.
- SELECT : запросить данные в таблице
- INSERT: вставить новые данные в таблицу.
- ОБНОВЛЕНИЕ: обновить данные в таблице
- УДАЛИТЬ: удалить данные из таблицы
- DCL
DCL (язык управления данными) используется для подтверждения или отмены изменений данных в базе данных. Кроме того, вы также можете указать, имеет ли пользователь РСУБД разрешение на работу с объектами (таблицами базы данных и т. д.) в базе данных. DCL содержит следующие инструкции.
- COMMIT: подтвердить изменения, внесенные в данные в базе данных.
- ROLLBACK : отменить изменения, внесенные в данные в базе данных.
- GRANT : дать пользователю право работать
- REVOKE : отменить разрешение пользователя на операцию
90% фактически используемых операторов SQL относятся к DML, и этот курс будет посвящен DML.
Основные правила написания SQL
- Операторы SQL должны заканчиваться точкой с запятой ( ; )
- SQL не чувствителен к регистру для ключевых слов, но данные, вставленные в таблицу, чувствительны к регистру.
- По умолчанию система win не различает регистр имен таблиц и имен полей.
- По умолчанию linux/mac строго различают регистр имен таблиц и имен полей
- В этом руководстве имена таблиц и имена полей были преобразованы в нижний регистр, чтобы облегчить изучение и использование новичками.
- Способ записи констант исправлен
- Слова должны быть разделены полуширинными пробелами или символами новой строки.
Создание базы данных (оператор CREATE DATABASE)
грамматика:
CREATE DATABASE <数据库名称>
Создайте базу данных, используемую в этом курсе
CREATE DATABASE shop;
Создание таблицы (оператор CREATE TABLE)
грамматика:
CREATE TABLE < 表名 >
( < 列名 1> < 数据类型 > < 该列所需约束 > ,
< 列名 2> < 数据类型 > < 该列所需约束 > ,
< 列名 3> < 数据类型 > < 该列所需约束 > ,
< 列名 4> < 数据类型 > < 该列所需约束 > ,
.
.
.
< 该表的约束 1> , < 该表的约束 2> ,……);
Создайте таблицу продуктов, используемую в этом уроке:
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)
) ;
соглашение об именовании
- В качестве имен баз данных, таблиц и столбцов можно использовать только английские буквы половинной ширины, цифры и символы подчеркивания (_).
- Имя должно начинаться с полуширинной английской буквы.
спецификация типа данных
В таблице, созданной базой данных, все столбцы должны указывать тип данных, и каждый столбец не может хранить данные, не соответствующие типу данных столбца.
- INTEGER тип
Используется для указания типа данных (числового) столбца, в котором хранятся целые числа и не могут храниться десятичные дроби. 2.тип СИМВОЛОн используется для хранения строк фиксированной длины. Когда длина строк, хранящихся в столбце, не достигает максимальной длины, для восполнения используются пробелы половинной ширины. Поскольку это приводит к трате места для хранения, он обычно не используется. 3.Тип VARCHARИспользуется для хранения строк переменной длины. Строки фиксированной длины заполняются пробелами половинной ширины, когда количество символов не достигает максимальной длины. Однако строки переменной длины отличаются. Даже если количество символов не достигнуто максимальной длины, они не будут заполнены пробелами половинной ширины. 4.Тип ДАТЫИспользуется для указания типа данных (дата) столбца, в котором хранится дата (год, месяц, день).
Настройка ограничения
Ограничения — это функции, которые ограничивают или добавляют условия к данным, хранящимся в столбце, в дополнение к типу данных.
NOT NULL
Является ненулевым ограничением, то есть столбец должен иметь входные данные.
PRIMARY KEY
Это ограничение первичного ключа, что означает, что столбец является уникальным значением, и данные определенной строки могут быть получены через этот столбец.
удалить и обновить таблицу
- Синтаксис удаления таблицы
DROP TABLE < 表名 > ;
пример:
Уведомление, удаленную таблицу нельзя восстановить, ее можно только повторно вставить. Пожалуйста, выполняйте операцию удаления с осторожностью.
DROP TABLE product;
- Оператор ALTER TABLE для добавления столбцов
ALTER TABLE < 表名 > ADD COLUMN < 列的定义 >;
Пример. Добавьте столбец product_name_pinyin, в котором могут храниться 100-значные строки переменной длины.
ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
- Оператор ALTER TABLE для удаления столбца
ALTER TABLE < 表名 > DROP COLUMN < 列名 >;
Удалите столбец product_name_pinyin
ALTER TABLE product DROP COLUMN product_name_pinyin;
Оператор ALTER TABLE, как и оператор DROP TABLE, не может быть восстановлен после выполнения. Неправильно добавленный столбец можно удалить с помощью инструкции ALTER TABLE, либо можно удалить таблицу и создать ее заново.
- Очистить содержимое таблицы
TRUNCATE TABLE TABLE_NAME;
Достоинства: По сравнению с дроп
/
Когда удаление и усечение используются для очистки данных, скорость самая высокая.
- обновление данных
Основной синтаксис:
UPDATE <表名>
SET <列名> = <表达式> [, <列名2>=<表达式2>...];
WHERE <条件>; -- 可选,非常重要。
ORDER BY 子句; --可选
LIMIT 子句; --可选
При использовании обновления обратите внимание на добавление условий where, иначе все строки будут изменены в соответствии с оператором
-- 修改所有的注册时间
UPDATE product
SET regist_date = '2009-10-10';
-- 仅修改部分商品的单价
UPDATE product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';
Столбцы также могут быть обновлены до NULL с помощью UPDATE (это обновление обычно известно как очистка NULL). В этом случае вам нужно только записать значение в правой части выражения присваивания непосредственно как NULL.
-- 将商品编号为0008的数据(圆珠笔)的登记日期更新为NULL
UPDATE product
SET regist_date = NULL
WHERE product_id = '0008';
Как и оператор INSERT, оператор UPDATE также может использовать NULL в качестве значения.
**Однако только столбцы, для которых не установлены ограничения NOT NULL и ограничения первичного ключа, могут быть очищены до NULL. **Если вы обновите столбец с приведенным выше ограничением, установленным в NULL, произойдет ошибка, аналогичная инструкции INSERT.
- Многоколоночное обновление
Предложение SET оператора UPDATE поддерживает несколько столбцов в качестве объектов обновления одновременно.
-- 基础写法,一条UPDATE语句只更新一列
UPDATE product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';
UPDATE product
SET purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
Этот метод записи может дать правильный результат, но код более сложный. Консолидацию можно использовать для упрощения кода.
-- 合并后的写法
UPDATE product
SET sale_price = sale_price * 10,
purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
Чтобы было ясно, столбцы в предложении SET могут быть не только двумя столбцами, но также тремя или более столбцами.
Вставить данные в таблицу товаров
Чтобы узнать, как использовать оператор INSERT, мы сначала создадим таблицу с именем productins, Оператор создания таблицы выглядит следующим образом:
CREATE TABLE productins
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
Основной синтаксис:
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
При выполнении INSERT для всего столбца таблицы вы можете опустить список столбцов после имени таблицы. В это время значение предложения VALUES будет по умолчанию присвоено каждому столбцу в порядке слева направо.
-- 包含列清单
INSERT INTO productins (product_id, product_name, product_type,
sale_price, purchase_price, regist_date) VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
-- 省略列清单
INSERT INTO productins
VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
В принципе, выполнение оператора INSERT вставляет строку данных. При вставке нескольких строк обычно необходимо выполнить соответствующее количество операторов INSERT в цикле. На самом деле, многие СУБД поддерживают вставку нескольких строк данных за раз.
-- 通常的INSERT
INSERT INTO productins VALUES ('0002', '打孔器',
'办公用品', 500, 320, '2009-09-11');
INSERT INTO productins VALUES ('0003', '运动T恤',
'衣服', 4000, 2800, NULL);
INSERT INTO productins VALUES ('0004', '菜刀',
'厨房用具', 3000, 2800, '2009-09-20');
-- 多行INSERT ( DB2、SQL、SQL Server、 PostgreSQL 和 MySQL多行插入)
INSERT INTO productins VALUES ('0002', '打孔器',
'办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, NULL),
('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
-- Oracle中的多行INSERT
INSERT ALL INTO productins VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11')
INTO productins VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL)
INTO productins VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20')
SELECT * FROM DUAL;
-- DUAL是Oracle特有(安装时的必选项)的一种临时表A。因此“SELECT *FROM DUAL” 部分也只是临时性的,并没有实际意义。
Если вы хотите присвоить значение NULL столбцу в операторе INSERT, вы можете напрямую написать NULL в списке значений предложения VALUES. Столбец, который хочет вставить NULL, не должен иметь ограничения NOT NULL.
INSERT INTO productins (product_id, product_name, product_type,
sale_price, purchase_price, regist_date) VALUES ('0006', '叉子',
'厨房用具', 500, NULL, '2009-09-20');
Вы также можете вставить в таблицу значения по умолчанию (начальные значения). Значение по умолчанию можно задать, установив ограничение DEFAULT в операторе CREATE TABLE, который создает таблицу.
CREATE TABLE productins
(product_id CHAR(4) NOT NULL,
(略)
sale_price INTEGER
(略) DEFAULT 0, -- 销售单价的默认值设定为0;
PRIMARY KEY (product_id));
Данные можно копировать из других таблиц с помощью операторов INSERT … SELECT.
-- 将商品表中的数据复制到商品复制表中
INSERT INTO productocpy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
SELECT product_id, product_name, product_type, sale_price,
purchase_price, regist_date
FROM Product;
Этот курс использует таблицу для вставки данных sql следующим образом:
- DML :插入数据
STARTTRANSACTION;
INSERT INTO product VALUES('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO product VALUES('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO product VALUES('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO product VALUES('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO product VALUES('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO product VALUES('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO product VALUES('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO product VALUES('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');
COMMIT;