Список вопросов по SQL

1. Где можно почитать документацию по языку SQL, где точно представлен синтаксис, основные функции? Официальный сайт

2."Обработка транзакций" Как правильно запускать данный код? Если записать этот код "встрочку" в командной строке, то
Cкриншот ошибки

 Бен Форта 209
BEGIN TRANSACTION INSERT 
INTO Customers(cust_id, cust_name) 
VALUES(4000000010, 'Toys Emporium'); 
SAVE TRANSACTION StartOrder; 
INSERT INTO Orders(order_num, order_date, cust_id)
 VALUES(20100,'2001/12/1','1000000010');
 IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder; 
INSERT INTO Orderltems(order_num, order_item, prod_id, quantity, item_price) VALUES(20010, 1, 'BR01', 100, 5.49); 
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder; 
INSERT INTO Orderltems(order_num, order_item, prod_id, quantity, item_price) 
VALUES(20010, 2, 'BR03', 100, 10.99);

Ошибка:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRANSACTION INSERT INTO Customers(cust_id, cust_name) VALUES(4000000010, 'Toys E' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SAVE TRANSACTION StartOrder' at line 1
ERROR 1062 (23000): Duplicate entry '20100' for key 'PRIMARY'
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder' at line 1
Query OK, 1 row affected (0.00 sec)


3. " Создание хранимых процедур" не запускается код.

 Бен Форта 199

CREATE PROCEDURE MailingListCount 
(ListCount OUT NUMBER)
 IS BEGIN 
SELECT * FROM Customers 
WHERE NOT cust_email IS NULL;
 ListCount := SQL%ROWCOUNT; END;


Ошибка:

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    8
Current database: sqlstart

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUT NUMBER) IS BEGIN SELECT * FROM Customers WHERE NOT cust_email IS NULL' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ListCount := SQL%ROWCOUNT' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 1

3. Запрос запускается. Но выдаёт нули ( "Использование представлений для переформатирования выбранных данных"):

Бен форта 73
SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ' )' AS vend_title FROM Vendors ORDER BY vend_name;
+------------+
| vend_title |
+------------+
|          0 |
|          0 |
|          0 |
|          0 |
|          0 |
|          0 |
+------------+

4. Правильно ли расскоментирована строка в файле \OpenServer\userdata\config\PHP_7.1_php.ini?

;extension = php_pdo_firebird.dll
extension  = php_pdo_mysql.dll
;extension = php_pdo_oci.dll

5. Метод fetch() это коробочный (встроенный) метод в классе PDO? А где можно посмотреть как выглядит класс PDO? Здесь по ссылке http://fkn.ktu10.com/?q=node/7153 изучается вид класса PDO , это и есть структура класса?

 // Котеров 708
try {
$query = "SELECT VERSION1() AS version";
$ver = $pdo->query($query);
echo $ver->fetch()['version'];
} catch (PDOException $e) {
echo "Ошибка выполнения запроса: " . $e->getMessage();
}