MySQL
Archived Posts from this Category
Archived Posts from this Category
Короткие вопросы с довольно запутанными ответами. В рамках MySQL (и баз данных в общем).
1. Что такое character set?
2. Что такое collation?
3. Как они взаимодействуют?
4. Является ли это чем-то о чём стоит беспокоиться?
Опубликовано с разрешения Carsten Pedersen. Оригинал
0 comments Monday 31 Mar 2008 | Andrew Dashin | Quiz, MySQL
Где можно найти классные вопросы (и уловки) о синтаксисе CASE-выражений?
Опубликовано с разрешения Carsten Pedersen. Оригинал
0 comments Monday 31 Mar 2008 | Andrew Dashin | Quiz, MySQL
Дано:
SELECT * FROM car_parts: +---------+---------+-------+--------+ | part_id | car_id | price | weight | +---------+---------+-------+--------+ | 1 | 1 | 2.20 | 3.00 | | 2 | 1 | 3.30 | 5.00 | | 3 | 1 | 4.40 | 7.00 | | 4 | 2 | 2.20 | 9.00 | | 5 | 2 | 3.30 | 11.00 | | 6 | 2 | 4.40 | 13.00 | +---------+---------+-------+--------+ Мы хотим найти самую дешёвую часьт машины и узнать сколько она весит: SELECT car_id, MIN(price), weight FROM parts GROUP BY car_id; +---------+------------+--------+ | car_id | MIN(price) | weight | +---------+------------+--------+ | 1 | 2.20 | 3.00 | | 2 | 2.20 | 9.00 | +---------+------------+--------+
Врод всё в порядке, теперь мы хотим найти самую дорогую часть каждой машины и опять же - узнать сколько она весит:
SELECT car_id, MAX(price), weight FROM parts GROUP BY part_of Результат: +---------+------------+--------+ | car_id | MAX(price) | weight | +---------+------------+--------+ | 1 | 4.40 | 3.00 | | 2 | 4.40 | 9.00 | +---------+------------+--------+
Вопрос: Почему во втором запросе содержимое колонки “weight” неверно?
Опубликовано с разрешения Carsten Pedersen. Оригинал
0 comments Monday 31 Mar 2008 | Andrew Dashin | Quiz, MySQL
Создадим две идентичные таблицы с внешними ключами, ссылающимися на поля внутри этих же таблиц:
CREATE TABLE t ( id INT NOT NULL PRIMARY KEY, type INT, pid INT, FOREIGN KEY (pid) REFERENCES t (id) ) ENGINE=INNODB; CREATE TABLE t1 ( id INT NOT NULL PRIMARY KEY, type INT, pid INT, FOREIGN KEY (pid) REFERENCES t1 (id) ) ENGINE=INNODB;
Теперь когда уже таблицы созданы выполним следующие действия:
INSERT INTO t VALUES (1,1, NULL);
INSERT INTO t VALUES (2,1, NULL);
UPDATE t SET pid = 2 WHERE id = 1;
Следующим шагом добавим данные в таблицу table из таблицы t:
INSERT INTO t1 SELECT * from t;
Но тут увидим сообщение об ошибке:
ERROR 1452 : Cannot add or update a child row: a foreign key constraint fails
Вопрос №1: Почему не удалось выполнить последний запрос INSERT?
Вопрос №2: Что вы можете сделать что бы избежать проблемы?
Опубликовано с разрешения Carsten Pedersen. Оригинал
0 comments Monday 31 Mar 2008 | Andrew Dashin | Quiz, MySQL
Имеем:
CREATE TABLE parts (
type CHAR(10) NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
description CHAR(30) NOT NULL,
PRIMARY KEY (type, id)
) ENGINE=MyISAM;
INSERT INTO parts (type, description) VALUES
('car part', 'brake'),
('car part', 'steering wheel'),
('furniture', 'table leg'),
('printer', 'toner cartridge'),
('furniture', 'shelf');
Что возвратит нам следующий запрос:
SELECT DISTINCT id FROM parts;
Опубликовано с разрешения Carsten Pedersen. Оригинал
0 comments Monday 31 Mar 2008 | Andrew Dashin | Quiz, MySQL
Выполняются следующие запросы (на системе 5.0.45-Debian_1ubuntu3.1-log): CREATE TABLE t ( ID INT NOT NULL PRIMARY KEY, PID INT, FOREIGN KEY (PID) REFERENCES t(ID) ) ENGINE=INNODB; INSERT INTO t VALUES (1, NULL); INSERT INTO t VALUES (2, NULL); SELECT * FROM t Результат: +----+------+ | ID | PID | +----+------+ | 1 | NULL | | 2 | NULL | +----+------+ Теперь выполняется следующее: UPDATE t SET PID = 2 WHERE ID = 1 Чтобы узать что хранится в таблице выполним: SELECT * FROM t Результат: +----+------+ | ID | PID | +----+------+ | 2 | NULL | | 1 | 2 | +----+------+
Вопрос №1: Можете ли вы объяснить почему записи возвращены в обратном порядке?
Вопрос №2: Есть здесь что-то что вы можете или должны исправить?
Опубликовано с разрешения Carsten Pedersen. Оригинал
0 comments Monday 31 Mar 2008 | Andrew Dashin | Quiz, MySQL