|
|
|
|||
| WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Этот раздел описывает различные способы записи строк и чисел в MySQL.
Это также покрывает различные нюансы, с которыми Вы можете сталкиваться,
когда имеете дело с этими базисными типами в MySQL. Строка представляет собой последовательность символов, окруженных
одиночными кавычками (') или двойными кавычками
("). Допустима только одиночная кавычка, если Вы работаете в
ANSI-режиме. Примеры: Внутри строки некоторые последовательности имеют специальное значение.
Каждая из этих последовательностей начинается с наклонной черты влево
(\), известной как escape character. MySQL распознает
следующие управляющие последовательности: Обратите внимание, что, если Вы используете \% или
\_ в некоторых контекстах, они возвратят строки \%
и \_ вместо % и _. Имеется несколько способов включить кавычки в строку:
Инструкции Если Вы хотите вставлять двоичные данные в столбец
Если Вы пишете код на C, Вы можете использовать функцию
C API Вы должны использовать функцию escape на любой строке, которая могла
бы содержать любой из специальных символов, перечисленных выше! Целые числа представляются как последовательность цифр. Числа с плавающей
точкой используют точку (.) как десятичный разделитель. Любому
типу числа может предшествовать знак -, чтобы указать
отрицательное значение числа. Примеры имеющих силу целых чисел: Примеры чисел с плавающей запятой: Целое число может использоваться в контексте с плавающей запятой: это
интерпретируется как эквивалентное число с плавающей запятой. MySQL поддерживает шестнадцатеричные значения. В контексте числа это
аналогично целому числу (64-разрядная точность). В контексте строки такое
число эквивалентно двоичной строке, где каждая пара шестнадцатеричных цифр
преобразована в соответствующий символ: Синтаксис x'hexstring' (нововведение в версии 4.0) основан на ANSI SQL и
синтаксисе 0x из ODBC. Шестнадцатеричные строки часто используются ODBC,
чтобы задать значения для столбцов типа BLOB. Значение Имена для баз данных, таблиц, индексов, столбцов и псевдонимов задаются по
общим правилам в MySQL. Обратите внимание, что правила изменились, начиная с MySQL Version 3.23.6,
когда авторы представили цитирование идентификаторов (имена баз данных,
таблиц и столбцов) с помощью апострофа (`). Двойная кавычка
(") также будет работать, чтобы цитировать идентификаторы, если
Вы выполняетесь в ANSI-режиме. Подробности в разделе
"1.4.3 Запуск MySQL в ANSI-режиме". Обратите внимание, что в дополнение к вышеупомянутому, Вы не можете иметь
в идентификаторе символы цитирования, а также ASCII(0) или ASCII(255). Обратите внимание, что, если идентификатор представляет собой ограниченное
слово или содержит специальные символы, Вы должны всегда цитировать его с
В предыдущих версиях MySQL правила для имен были следующими: Рекомендуется, чтобы Вы не использовали имена, подобные В MySQL Вы можете обратиться к столбцу, используя любую из следующих форм:
Вы не должны определять префикс Синтаксис В MySQL базы данных и таблицы соответствуют каталогам и файлам внутри тех
каталогов. Следовательно, чувствительность операционной системы определяет
чувствительность к регистру имен таблицы и базы данных. Это означает, что
имена баз данных и таблиц чувствительны к регистру в Unix и нечувствительны в
Windows. Подробности в разделе "1.4.1
MySQL-расширения для ANSI SQL92". ОБРАТИТЕ ВНИМАНИЕ: Несмотря на отсутствие чувствительности
к регистру имен баз данных и таблиц в Windows, СУБД все же такое различие
делает. Так что в рамках одного запроса надо использовать одно и то же имя.
Например, этот запрос не сработает из-за одновременного применения
Имена столбца нечувствительны к регистру символов во всех случаях. Псевдонимы для таблиц чувствительны к регистру. Например, этот запрос не
сработает из-за одновременного применения Псевдонимы для столбцов нечувствительны к регистру. Если Вы имеете проблему при запоминании используемых имен таблиц, примите
непротиворечивое соглашение, типа всегда создавать базы данных и таблицы,
использующих имена нижнего регистра. Один способ избежать этой проблемы состоит в том, чтобы запустить
Если MySQL поддерживает поточно-зависимые переменные с синтаксисом
Переменные не должны быть инициализированы. Они содержат Вы можете устанавливать переменную через вызов Вы можете также устанавливать переменную в выражении
Здесь надо использовать синтаксис Переменные пользователя могут применяться там, где позволяются выражения.
Обратите внимание, что это в настоящее время не включает использование в
контекстах, где явно требуется число, например, в предложении
ОБРАТИТЕ ВНИМАНИЕ: В инструкции Причина: Сервер MySQL поддерживает стили комментариев Обратите внимание, что стиль комментария Хотя сервер понимает синтаксис комментария, имеются некоторые ограничения
на путь, которым клиент Эти ограничения применяются, когда Вы выполняете MySQL не поддерживает ANSI SQL стиль комментария `--'.
Подробности в разделе "1.4.4.8
`--' как начало комментария". Пробемы возникают при попытке создать таблицу с именами столбцов, которые
используют имена типов или функций, встроенных в MySQL, подобно
Следующие слова явно зарезервированы в MySQL. Большинство их запрещается
ANSI SQL92 для имен таблицы или столбца (например, Следующие символы (из таблицы выше) отвергнуты ANSI SQL, но позволены
MySQL как имена столбца/таблицы. Это потому, что некоторые из них
представляют собой очень естественные и удобные имена, и много людей уже
использовали их в работе:
3 Структура языка
3.1 Литералы: как писать строки и числа
3.1.1 Строки
'a string'
"another string"
\0
NUL).
\'
\"
\b
\n
\r
\t
\z
mysql database < filename.
\\
\%
\_
SELECT, приведенные ниже, показывают как работают
цитирование и экранировка:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "This\nIs\nFour\nlines";
+--------------------+
| This
Is
Four
lines |
+--------------------+
BLOB,
следующие символы должны представляться в соответствии с управляющими
последовательностями, экранирующими их:
NUL
\
'
"
mysql_escape_string() для инструкции INSERT.
В языке Perl Вы можете использовать метод quote пакета
DBI, чтобы преобразовать специальные символы в соответствующие
управляющие последовательности.3.1.2 Числа
1221
0
-32
294.42
-32032.6809e+10
148.00
3.1.3 Шестнадцатеричные значения
mysql> SELECT x'FF'
-> 255
mysql> SELECT 0xa+0;
-> 10
mysql> select 0x5061756c;
-> Paul
3.1.4 Значения
NULLNULL не означает "никакие данные" и отличается от
значений типа 0 для числовых типов или пустой строки для типов
строковых. Подробности в разделе "
11.5.3 Проблемы со значениями NULL".NULL может представляться как \N при
использовании импортирования текстового файла или экспортных форматов
(LOAD DATA INFILE, SELECT ... INTO OUTFILE).
Подробности в разделе "8.4.9 Синтаксис
LOAD DATA INFILE".3.2 Имена баз данных, таблиц,
индексов, столбцов и псевдонимов
Идентификатор Максимальная длина
Допустимые символы База данных 64 Любые символы, допустимые в имени
каталога, кроме / или .. Таблица 64 Любые символы, допустимые в имени файла,
кроме / или .. Столбец 64 Все символы. Псевдоним 255 Все символы. `:
SELECT * from `select` where `select`.id > 100;
--default-character-set в mysqld.
1e
потому, что выражение вроде 1e+1 неоднозначно. Это может
интерпретироваться как выражение 1e+1 или как число
1e+1.
Ссылка на столбец Значение
col_nameСтолбец col_name из любой
таблицы, используемой в запросе, содержащем это имя.tbl_name.col_nameСтолбец col_name
из таблицы tbl_name текущей базы данных.db_name.tbl_name.col_nameСтолбец
col_name из таблицы tbl_name базы данных
db_name. Эта форма доступна в MySQL Version 3.22 или позже.`column_name`Столбец, который является ключевым
словом или содержит специальные символы. tbl_name или
db_name.tbl_name для столбца в инструкции, если ссылка
однозначна. Например, есть таблицы t1 и t2, каждая
содержит столбец c, и Вы получаете c командой
SELECT, которая использует t1 и t2. В
этом случае c неоднозначен потому, что он не уникален среди
таблиц, используемых в инструкции, так что Вы должны указать, что Вы имеете
в виду: t1.c или t2.c. Точно так же, если Вы
получаете данные из таблицы t в базе данных db1 и
из таблицы t в базе данных db2, Вы должны
обратиться к столбцам в тех таблицах как db1.t.col_name и
db2.t.col_name..tbl_name
означает таблицу tbl_name в текущей базе данных. Этот синтаксис
принят для ODBC-совместимости потому, что некоторые ODBC-программы используют
имена таблиц с префиксом-точкой (.).3.3 Чувствительность к регистру в именах
my_table и MY_TABLE:
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
a и A:
mysql> SELECT col_name FROM tbl_name AS a
WHERE a.col_name = 1 OR A.col_name = 2;
mysqld с опцией -O lower_case_table_names=1. По
умолчанию эта опция установлена в 1 под Windows и в 0 под Unix.lower_case_table_names равен 1, MySQL преобразует все
имена таблицы в строчные буквы. Обратите внимание, что, если Вы изменяете
эту опцию, Вы должны сначала преобразовать Ваши старые имена таблиц в
строчные буквы перед запуском сервера mysqld.3.4 Пользовательские переменные
@variablename. Имя переменной может состоять из
алфавитно-цифровых символов из текущего набора символов, а также из
_, $ и ..NULL
по умолчанию и могут сохранять целое число, реальное или строковое значение.
Все переменные для потока будут освобождены, когда поток завершится.SET:
SET @variable = {integer expression|real expression|string expression}
[,@variable= ...].
@variable:=expr:
select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 |
+----------------------+------+------+------+
| 5 | 5 | 1 | 4 |
+----------------------+------+------+------+
:= потому, что
= был зарезервирован для сравнений.LIMIT вызова SELECT, или в предложении IGNORE
number LINES в инструкции LOAD DATA.SELECT
каждое выражение вычислено только тогда, когда оно послано пользователю. Это
означает, что в HAVING, GROUP BY или ORDER
BY Вы не можете обратиться к выражению, которое включает переменные,
которые установлены в SELECT. Например, следующая инструкция НЕ
будет работать как ожидается:
SELECT (@aa:=id) AS a, (@aa+3) AS b FROM table_name HAVING b=5;
@aa будет содержать не значение текущей строки, а
значение id предыдущей принятой строки.3.5 Комментарии
# до конца
строки, -- до конца строки и /* в строке или в
нескольких строках */:
mysql> select 1+1; # Этот комментарий продолжается до конца строки.
mysql> select 1+1; -- Этот тоже.
mysql> select 1 /* это комментарий, встроенный в строку */ + 1;
mysql> select 1+
/*
Это комментарий,
занимающий несколько строк.
*/
1;
-- требует, чтобы Вы
имели по крайней мере один пробел после --!mysql анализирует комментарии
/* ... */:mysql в интерактивном
режиме, Вы можете крепко запутаться с приглашением командной строки, которое
меняется с mysql> на '> или на
">.
mysql в
интерактивном режиме и тогда, когда Вы помещаете команды в файл и сообщаете,
чтобы mysql читал ввод из этого файла командой
mysql < some-file.3.6
Как MySQL работает с зарезервированными словами
TIMESTAMP или GROUP. Вам позволяют делать это
(например, ABS позволенное имя столбца), но пробелы между именем
функции и ( при использовании функций, чьи имена также являются
именами столбцов, не допускаются.group).
Несколько слов зарезервированы потому, что MySQL нуждается в них и (в
настоящее время) использует синтаксический анализатор yacc:
actionadd
aggregateallalterafter
andasascavgavg_row_lengthauto_incrementbetweenbigint
bitbinaryblobboolboth
bycascadecase
charcharacterchangecheck
checksumcolumncolumnscomment
constraintcreatecrosscurrent_date
current_timecurrent_timestampdatadatabase
databasesdatedatetimeday
day_hourday_minuteday_seconddayofmonth
dayofweekdayofyeardecdecimal
defaultdelayeddelay_key_writedelete
descdescribedistinctdistinctrow
doubledropendelseescape
escapedenclosedenum
explainexistsfieldsfile
firstfloatfloat4float8
flushforeignfromforfull
functionglobalgrant
grantsgrouphavingheap
high_priorityhourhour_minute hour_second
hostsidentifiedignoreinindex
infileinnerinsert
insert_idintintegerinterval
int1int2int3int4int8
intoifisisam
joinkeykeyskill
last_insert_idleadingleftlength
likelineslimitload
locallocklogslong
longbloblongtextlow_priority
maxmax_rowsmatchmediumblob
mediumtextmediumintmiddleintmin_rows
minuteminute_secondmodifymonth
monthnamemyisamnaturalnumericno
notnullonoptimize
optionoptionallyororder
outeroutfilepack_keys
partialpasswordprecisionprimary
procedureprocessprocesslistprivileges
readrealreferencesreload
regexprenamereplacerestrict
returnsrevokerlikerowrows
secondselectsetshow
shutdownsmallintsoname
sql_big_tablessql_big_selectssql_low_priority_updatessql_log_off
sql_log_updatesql_select_limit
sql_small_resultsql_big_result
sql_warningsstraight_joinstartingstatus
stringtabletablestemporary
terminatedtextthentimetimestamp
tinyblobtinytexttinyint
trailingtotypeuseusing
uniqueunlockunsigned
updateusagevaluesvarchar
variablesvaryingvarbinarywithwrite
whenwhereyearyear_month
zerofillACTIONBITDATEENUMNOTEXTTIMETIMESTAMP
| Найди своих коллег! |