Перейти к содержимому

Реферальная программа Мегаплана

Выбрать шаблон и создать сайт

Вопросы по SQL

#21 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0
0

Отправлено 05 Июль 2009 - 09:50

это просто еще один способ добавления инфы в базу... мне он нравится больше

INSERT INTO `gbook` SET autor='Вася', text='Привет всем'


  • 0

#22 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 05 Июль 2009 - 09:53

Евгений, не знал, что так можно :)
  • 0

#23 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 05 Июль 2009 - 10:15

это просто еще один способ добавления инфы в базу... мне он нравится больше

оу... а я уже и забыл совсем про этот способ))
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#24 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Июль 2009 - 21:14

Banderas, пара слов по поводу первичного ключа
Например поле id является главным ключём:
id INT([число]) NOT NULL AUTO_INCREMENT PRIMARY KEY
поле id - целочисленный столбец типа INT, который снабжен атрибутом AUTO_INCREMENT и является первичным ключём таблицы(PRIMARY KEY). При вставке новой записи при помощи оператора INSERT поле id можно не заполнять или передавать ему значение NULL - MySQL автоматически присвоит ему увеличенное на единицу значение относительно последнего занесённого.
Важно: в таблице больше не может быть первичных ключей и столбцов, снабженных атрибутом AUTO_INCREMENT. Кроме того, поле id должно быть помечено атрибутом NOT NULL.

Немного про AUTO_INCREMENT
AUTO_INCREMENT - при вставке в таблицу новой записи передача в поле, снабженное данным атрибутом, величины 0 или NULL приводит к назначению ему величины, равной максимальному значению заносившемуся ранее плюс единица. Таблица может содержать только один столбец, снабженный атрибутом AUTO_INCREMENT, значения первичного ключа должны быть уникальными, т.е. повторение в пределах одной таблицы не допускаются. Также для этого столбца не допускается использование ключевого слова DEFAULT.

Насколько я понял, то при использовании char(40) если ввести текст с количеством символов 28, то остальные 12 заполняются пробелами. А в varchar(n) сколько ввели символов, столько там и их есть, но не более 255.

Всё правильно сказал. Поэтому поле CHAR нельзя использовать для данных которые сравниваются с введёнными из API. Вообщем-то можно, но нужно применять функцию TRIM().

пс. неа, не катит, в данном случае SQL не чувствителен к регистру. Переименовывал 2 раза, с news на test, и с test на NEWS.

Ты прав к именам полей и имени таблицы не чувствительна. Да и ко многому другому. Для того чтоы корректно сравнивать строки, хранимые не в поле BINARY стоит использовать ключевое слово BINARY.
Сравнение текстовых строк в MySQL не зависит от регистра сопоставляемых строк.
Например
SELECT "name" = "NAME"; //выдаст истину

SELECT BINARY "name" = "NAME"; //выдаст ложь

v1ex,

Изображение

согласись что хранить многострочный текст в таком поле ты не будешь. А что мы обычно храним в одной строке? Конечно же данные из одного двух или чуть более слов. Поэтому создавать VARCHAR(1000) не рентабельно. Особенно если в ней будут храниться данные различных размеров. Например одна запись имеет 300 символов, а другая 1000. Но память под них выделено одна и таже.
Не стоит злоупотреблять памятью...

По поводу занесения данных в таблицу. Существует 4 способа:
1) Прямое добавление данных без отсрочки
INSERT INTO [таблица] VALUES([данные]),([данные]),([данные]);
2) Добавление данных с использованием оператора SET
INSERT INTO [таблица] SET [поле]=[значение],[поле]=[значение],[поле]=[значение];
3) Прямое добавление данных без отсрочки с возможной заменой
REPLACE INTO [таблица] VALUES([данные]),([данные]),([данные]);
Оператор REPLACEработает аналогично INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY, что и новая, то старя запись перед занесением новой будет удалена. Следует учитывать, что если не используются индексы UNIQUE или PRIMARY KEY, то применение команды REPLACE не имеет смысла, т.к. она будет работать просто как INSERT.

Считаю, что третий способ удобен сразу для добавления и изменения записей. Если добавлять, то просто полю с PRIMARY KEY приравниваем NULL, а если исправлять, то передаём нужный ID. И поверьте ваш код сразу же сократится.

4) Отложенная вставка записей
INSERT DELAYED [таблица] VALUES([данные]),([данные]),([данные]);
Позволяет сразу вернуть управление клиентскому коду(или API), не дожидаясь реальной вставки данных. То есть сервер запоминает введённые в операторе INSERT записи и вставляет их в таблицу, когда у него появится свободное время. Это приводит к тому, что записи реально появляются лишь спустя некоторое время.

Моё замечание: считаю что данный случай нужен для разгрузки сервера, особенно данных часто добавляющихся.
Ключевое слово DELAYED можно использовать только совместно с таблицами типа MyISAM и только в операторе INSERT

P.S.
Ой, "спасибо" случайно щелкнул


Поржал :)
  • 0

#25 ilyazh

ilyazh
  • Пользователь
  • 356 сообщений
  • Репутация: 1

Отправлено 06 Июль 2009 - 22:33

К слову о 255 симоволов? А вам этого мало для ид? 255 симовлов - это же огромное число (еденица и 254 нуля).
А для того, чтобы записывать огромное кол-во данных в столбец делайте его TEXT.
  • 0

#26 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 07 Июль 2009 - 00:32

ilyazh, для id используют тип INT так как приведение типов занимает так же время, а сравнивать число с числом быстрее чем сторку со строкой.
  • 0


Оформление форума – IPBSkins.ru