XOOPS Brasil


D.2. Alterações na distribuição 4.1.x (Alpha)

A versão 4.1 do servidor MySQL inclui muitos melhoramentos e novos recursos. Os binários desta versão estão disponíveis para download em http://www.mysql.com/downloads/mysql-4.1.html.

  • Subqueries:

    SELECT * FROM t1 WHERE t1.a=(SELECT t2.b FROM t2);
    SELECT * FROM t1 WHERE (1,2,3) IN (SELECT a,b,c FROM t2);

  • Tabelas derivadas:

    SELECT t1.a FROM t1, (SELECT * FROM t2) t3 WHERE t1.a=t3.a;

  • Sintaxe INSERT ... ON DUPLICATE KEY UPDATE .... Ela lhe permite fazer um UPDATE de um registro existente se a inserção criasse um valor duplicado em uma chave PRIMARY ou UNIQUE. (REPLACE lhe permite sobrescrever um registro existente, o que é totalmente diferente). Veja mais informações sobre isto na Seção 6.4.3, “Sintaxe INSERT.

  • Uma nova função de agrupamento GROUP_CONCAT(). Veja mais informações sobre isto na Seção 6.3.7, “Funções e Modificadores para Usar com Cláusulas GROUP BY.

  • Suporte a Unicode Extensivo (UTF8).

  • Os conjuntos de caracteres podem ser definidos por colunas, tabelas e bancos de dados.

  • Nova cache de chaves para tabelas MyISAM com vários parâmetros de ajustes. Você pode tem multiplas caches de cahves, índices precarregados em caches para batches ...

  • Índices BTREE em tabelas HEAP.

  • Suporte a OpenGIS (Dados Geográficos). Veja mais informações sobre isto na Capítulo 10, Extensões Espacias em MySQL.

  • SHOW WARNINGS mostra avisos para o último comando. Veja mais informações sobre isto na Seção, “SHOW WARNINGS | ERRORS.

  • Protocolo binário mais rápido com instruções prepardas e ligação de parâmetros. Veja mais informações sobre isto na Seção 12.1.4, “Instruções Preparadas da API C”.

  • Agora você pode executar várias instruções com uma única chamada a API C e de uma vez e então ler o resultado Veja mais informações sobre isto na Seção 12.1.8, “Tratando a Execução de Múltiplas Consultas na API C”.

  • Create Table: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tabela LIKE tabela.

  • Comando HELP baseado no servidor que pode ser usado no cliente mysql de linha de comando (e outros clientes) para obter ajuda para comandos SQL.

Para uma lista completa das atualizações, veja a seção de alterações para cada distribuição 4.1.x individual.

D.2.1. Alterações na distribuição 4.1.2 (not released yet)

Functionality added or changed:

  • ENGINE is now a synonym for the TYPE option for CREATE TABLE and ALTER TABLE.

  • Added init_connect and init_slave server variables. The values should be SQL statements to be executed when each client connects or each time a slave's SQL thread starts, respectively.

  • C API enhancement: SERVER_QUERY_NO_INDEX_USED and SERVER_QUERY_NO_GOOD_INDEX_USED flags are now set in server_status field of MYSQL structure. It is these flags that make the query to be logged as slow if mysqld was started with --log-slow-queries --log-queries-not-using-indexes.

Bugs fixed:

  • Fixed a bug with the INTERVAL() function when 8 or more comparison arguments are provided. (Bug#1561)

  • Packaging: Fixed a bug in the Mac OS PKG postinstall script (mysql_install_db was called with an obsolete argument).

  • Packaging: Added missing file mysql_create_system_tables to the server RPM package. This bug was fixed for the 4.1.1 RPMs by updating the MySQL-server RPM from MySQL-server-4.1.1-0 to MySQL-server-4.1.1-1. The other RPMs were not affected by this change.

  • Fixed a bug in myisamchk and CHECK TABLE that sometimes resulted in a spurious error Found key at page ..... that points to record outside datafile for a table with a FULLTEXT index. (Bug#1977)

  • Fixed a hang in full-text indexing of strings in multi-byte (all besides utf8) charsets. (Bug#2065)

  • Fixed a crash in full-text indexing of UTF-8 data. (Bug#2033)

  • Replication: a rare race condition in the slave SQL thread that could lead to an incorrect complaint that the relay log is corrupted. (Bug#2011)

  • Replication: if an administrative command on a table (OPTIMIZE TABLE, REPAIR TABLE etc) was run on the slave, this could sometimes stop the slave SQL thread (this did not lead to any corruption; one just had to type START SLAVE to get replication going again). (Bug#1858)

  • Replication: in the slave SQL thread, a multi-table UPDATE could produce an incorrect complaint that some record was not found in one table, if the UPDATE was preceded by a INSERT ... SELECT. (Bug#1701)

D.2.2. Alterações na distribuição 4.1.1 (01 de Dez de 2003)

Funcionalidades adicionadas ou alteradas:

  • Added IGNORE option for DELETE statement.

  • The MySQL source distribution now also includes the MySQL Internals Manual internals.texi.

  • Added mysql_set_server_option() C API client function to allow multiple statement handling in the server to be enabled or disabled.

  • The mysql_next_result() C API function now returns -1 if there are no more result sets.

  • Renamed CLIENT_MULTI_QUERIES connect option flag to CLIENT_MULTI_STATEMENTS. To allow for a transition period, the old option will continue to be recognized for a while.

  • Require DEFAULT before table and database default character set. This enables us to use ALTER TABLE table_name ... CHARACTER SET=... to change the character set for all CHAR, VARCHAR, and TEXT columns in a table.

  • Added MATCH ... AGAINST( ... WITH QUERY EXPANSION) and the ft_query_expansion_limit server variable.

  • Removed unused ft_max_word_len_for_sort server variable.

  • Full-text search now supports multi-byte character sets and the Unicode utf8 character set. (The Unicode ucs2 character set is not yet supported.)

  • Phrase search in MATCH ... AGAINST ( ... IN BOOLEAN MODE) no longer matches partial words.

  • Added aggregate function BIT_XOR() for bitwise XOR operations.

  • Replication over SSL now works.

  • The START SLAVE statement now supports an UNTIL clause for specifying that the slave SQL thread should be started but run only until it reaches a given position in the master's binary logs or in the slave's relay logs.

  • Produce warnings even for single-row INSERT statements, not just for multiple-row INSERT statements. Previously, it was necessary to set SQL_WARNINGS=1 to generate warnings for single-row statements.

  • Added delimiter (\d) command to the mysql command-line client for changing the statement delimiter (terminator). The default delimiter is semicolon.

  • CHAR, VARCHAR, and TEXT columns now have lengths measured in characters rather than in bytes. The character size depends on the column's character set. This means, for example, that a CHAR(n) column for a multi-byte character set will take more storage than before. Similarly, index values on such columns are measured in characters, not bytes.

  • LIMIT no longer accepts negative arguments (they used to be treated as very big positive numbers before).

  • The DATABASE() function now returns NULL rather than the empty string if there is no database selected.

  • Added --sql-mode=NO_AUTO_VALUE_ON_ZERO option to suppress the usual behaviour of generating the next sequence number when zero is stored in an AUTO_INCREMENT column. With this mode enabled, zero is stored as zero; only storing NULL generates a sequence number.

  • Warning: Incompatible change! Client authentication now is based on 41-byte passwords in the user table, not 45-byte passwords as in 4.1.0. Any 45-byte passwords created for 4.1.0 must be reset after running the mysql_fix_privilege_tables script.

  • Added MySQL Server option and global variable 'secure-auth' that disallows authentication for accounts that have old (pre-4.1.1) passwords.

  • Added MySQL command line client option 'secure-auth'. If this option is set, client will refuse to send password in old (pre-4.1.1) format.

  • Warning: Incompatible change! Renamed the C API mysql_prepare_result() function to mysql_get_metadata() as the old name was confusing.

  • Added DROP USER 'username'@'hostname' statement to drop an account that has no privileges.

  • The interface to aggregated UDF functions has changed a bit. You must now declare a xxx_clear() function for each aggregate function XXX().

  • The CONCAT_WS() function no longer skips empty strings.


  • Added new syntax for ADDDATE() and SUBDATE(). The second argument now may be a number representing the number of days to be added to or subtracted from the first date argument.


  • Added new %f microseconds format specifier for DATE_FORMAT() and TIME_FORMAT().

  • All queries in which at least one SELECT does not use indexes properly now are written to the slow query log when long log format is used.

  • It is now possible to create a MERGE table from MyISAM tables in different databases. Formerly, all the MyISAM tables had to be in the same database, and the MERGE table had to be created in that database as well.

  • Adicionada as novas funções COMPRESS(), UNCOMPRESS() e UNCOMPRESSED_LENGTH().

  • Ao fazer SQL SQL_MODE=#, para um modo complexo (como ANSI) agora atualizamos a variável SQL_MODE para incluir todas as opções que o modo exige.

  • Adicionada a função ROLLUP OLAP (Online Analytical Processing - Processamento Analítico Online), que lhe dá um resumo para cada nível GROUP BY.

  • Adicionado os códigos SQLSTATE para todos os erros do servidor.

  • Adicionado mysql_sqlstate() e mysql_stmt_sqlstate() que retornam o código de erro SQLSTATE para o último erro.

  • --lower-case-table-names=1 agora também faz a aliases caso insensitivo. (Bug#534)

  • Colunas TIME com valor de horas maior do que 24 eram retornadas incorretamente para o cliente.

  • As instruções ANALYZE, OPTIMIZE, REPAIR e FLUSH são agora armazenados no log binário e assim replicados para o slave. Este registro não ocorre se a palavra chave opcional NO_WRITE_TO_BINLOG (ou seu alias LOCAL) for usada. As exceções são que FLUSH LOGS, FLUSH MASTER, FLUSH SLAVE e FLUSH TABLES WITH READ LOCK, não são registrados no log em qualquer caso. Para uma sintaxe completa, veja Seção 4.6.4, “Sintaxe de FLUSH.

  • Nova variável global RELAY_LOG_PURGE para habilitar ou desabilitar automaticamente a remoção de relay logs.

  • LOAD DATA agora produz avisos que podem ser buscados com SHOW WARNINGS.

  • Adicionado o suporte a sintaxe CREATE TABLE nome_tabela (LIKE nome_tabela2).

  • CREATE TABLE nome_tabela (...) TYPE=storage_engine agora gera um aviso se o mecanismo de armazenamento não for respeitado. A tabela ainda é criada como MyISAM, como antes.

  • Muitas sub selectas são muito mais rápidas que antes.

  • Disabled the PURGE LOGS statement that was added in in version 4.1.0. The statement now should be issued as PURGE MASTER LOGS or PURGE BINARY LOGS.

  • Added SHOW BDB LOGS as an alias for SHOW LOGS.

  • Added SHOW MASTER LOGS (which had been deleted in version 4.1.0) as an alias for SHOW BINARY LOGS.

  • Added Slave_IO_State and Seconds_Behind_Master columns to the output of SHOW SLAVE STATUS. Slave_IO_State indicates the state of the slave I/O thread, and Seconds_Behind_Master indicates the number of seconds by which the slave is late compared to the master.

  • --lower-case-table-names=1 now also makes aliases case insensitive. (Bug#534)

Bugs corrigidos:

  • Fixed merging types and length of fields in UNION

  • Fixed a bug in privilege handling that caused connections from certain IP addresses to be assigned incorrect database-level privileges. A connection could be assigned the database privileges of the previous successful authentication from one of those IP addresses, even if the IP address username and database name were different. (Bug#1636)

  • Error-handling functions were not called properly when an error resulted from [CREATE | REPLACE| INSERT] ... SELECT statements.

  • HASH, BTREE, RTREE, ERRORS, and WARNINGS no longer are reserved words. (Bug#724)

  • Fix for bug in ROLLUP when all tables were const tables. (Bug#714)

  • Fixed a bug in UNION that prohibited NULL values from being inserted into result set columns where the first SELECT of the UNION retrieved NOT NULL columns.

  • Fixed name resolution of columns of reduced subqueries in unions. (Bug#745)

  • Fixed memory overrun in subqueries in select list with WHERE clause bigger than outer query WHERE clause. (Bug#726)

  • Fixed a bug that caused MyISAM tables with FULLTEXT indexes created in 4.0.x to be unreadable in 4.1.x.

  • Fixed a data loss bug in REPAIR TABLE ... USE_FRM when used with tables that contained TIMESTAMP columns and were created in 4.0.x.

  • Fixed reduced subquery processing in ORDER BY/GROUP BY clauses. (Bug#442)

  • Fixed name resolution of outer columns of subquery in INSERT/REPLACE statements. (Bug#446)

  • Fixed bug in marking columns of reduced subqueries. (Bug#679)

  • Fixed a bug that made CREATE FULLTEXT INDEX syntax illegal.

  • Fixed a crash when a SELECT that required a temporary table (marked by Using temporary in EXPLAIN output) was used as a derived table in EXPLAIN command. (Bug#251)

  • Fixed a rare table corruption bug in DELETE from a big table with a new (created by MySQL-4.1) fulltext index.

  • LAST_INSERT_ID() now returns 0 if the last INSERT statement didn't insert any rows.

  • Corrigido a perda dos últimos caracteres na saída da função (Bug#447)

  • Corrigido um erro de replicação raro quando um transação extendia em dois ou mais relay logs e o escravo era parada enquanto ele estava executando a parte da transação que estava no segundo relay log ou em um adicional. Então a replicação parava no inicio do segundo relay log ou adicional, o que estava incorreto. (ele deve parar no BEGIN, no primeiro relay log). (Bug#53)

  • Agora CONNECTION_ID() é replicado apropriadamente (Bug#177).

  • A nova função PASSWORD() na versão 4.1 é replicada apropriadamente (Bug#344).

  • Corrigida a dupla liberação de memória

  • Corrigido um erro em UNION envolvendo tabelas temporárias.

  • Corrigido um erro de falha em DERIVED TABLES quando EXPLAIN é usado em um DERIVED TABLES com um join

  • Corrigido um erro de falha no DELETE com ORDER BY e LIMIT causado pala inicialização do vetor do ponteiro de referências.

  • Corrigido um erro na função USER() causado pelo erro no tamanho da string alocada

  • Corrigido um erro de falha quando se tentava criar uma tabela com coluna do tipo GEOMETRY com um mecanismo de armazenamenti que não a suporta.

  • Corrigido um erro de falha no UNION causado pela lista de select vazia e um campo não existente sendo usado em algumas das instruções SELECTs individuais.

  • Corrigido um erro de replicação com um master na versão 3.23 e um slave na 4.0: o slave perdia a replicação de tabelas temporárias se FLUSH LOGS era executado no master (Bug#254).

  • Corrigido um bug de segurança: Um servidor compilado ser suporte a SSL ainda permitia conexões de utilizadores que possuiam a opção REQUIRE SSL especificado para as suas contas.

  • Quando um utilizador indefinido era usado em uma atualização de consulta no master (como INSERT INTO t VALUES(@a) onde @a nunca havia sido definido por esta conexão), então o slave podia replicar a consulta de forma incorreta se uma transação anterior no master usava uma variável de utilizador de mesmo nome. (Bug#1331)

  • Corrigido um erro com instruções preparadas: O uso do parâmetro ? de instruções preparadas como argumento de certas funções e cláusulas fazia com que o servidor falhasse durante chamadas mysql_prepare(). (Bug#1500)

  • Corrigido um erro com instruções preparadas: depois da chamada de mysql_stmt_prepare, colchetes são permitidos em todas as instruções consequentes, mesmo se eles não forem preparados (Bug#1946)

D.2.3. Alterações na distribuição 4.1.0 (03 Apr 2003: Alpha)

Funcionalidades adicionadas ou alteradas:

  • Nova autenticação do cliente, mais segura, baseada em senha de 45-byte na tabela user.

  • Nova função CRC32() para calcular valor de verificação de redundância cíclica.

  • No Windows, agora estamos usando memória compartilhada para comunicar entre servidor e cliente quando eles estão executando na mesma máquina e você está conectando a localhost.

  • REPAIR das tabelas MyISAM agora usam menos espaço temporário em disco ao ordenar as colunas de caracteres.

  • A verificação de DATE/DATETIME agora é um bit estritamente para suportar a habilidade de deitiguir automaticamente entre date, datetime e time com microsegundos. Por exemplo, tipos de dados YYYYMMDD HHMMDD não são mais suportados; deve-se também ter separadores entre as partes DATE/TIME ou não.

  • Ajuda do lado do servidor para todas as funções do MySQL. Pode-se agora digitar help week no cliente mysql e conseguir ajuda para a função week().

  • Adionada a nova função da API C mysql_get_server_version().

  • Corrigido um buh na libmysqlclient que buscava campos padrões.

  • Corrigido um bug no cliente mysql.cc ao ignorar comentários

  • Adicionado o método record_in_range() para tabelas MERGE poderem escolher o índice certo quando houverem muitos para serem escolhidos.

  • A replicação agora funciona com RAND() e variáveis de utilizadores @var.

  • Permite-se alterar o modo para ANSI_QUOTES com o servidor no ar.

  • Agora pode se matar EXPLAIN SELECT. Veja mais informações sobre isto na Seção 4.6.7, “Sintaxe de KILL.

  • Agora pode se matar REPAIR TABLE. Veja mais informações sobre isto na Seção 4.6.7, “Sintaxe de KILL.

  • Permiti-se especificar lista de chaves vazias para USE INDEX, IGNORE INDEX e FORCE INDEX.

  • Agora DROP TEMPORARY TABLE apenas apaga tabelas temporárias e não finaliza transações.

  • Adicionado suporte para UNION em tabelas derivadas.

  • Warning: Alteração imcompatível! TIMESTAMP agora é retornado comi uma string do tipo 'YYYY-MM-DD HH:MM:SS' e tamanhos de timestamp diferentes não são suportados.

    Esta alteração era necessária para compatibilidade com o padrão SQL. Em uma versão futura, uma alteração adicional será feita (compatível co esta alteração), permitindo que o tamanho do timestamp indique o número de dígitos desejado para a fração de segundos.

  • Novo protocolo cliente/servidor mais rápido que suporta instruções preparadas, limitar parâmetros e colunas de resultados, transferância binaria de dados, avisos.

  • Adicionado nome de banco de dados e de nomes reais de tabela (no caso de alias) à estrutura MYSQL_FIELD.

  • Consultas multi linhas: Agora você pode executar diversas consultas de uma vez e então ler o resultados.

  • Em CREATE TABLE foo (a INT not null primary key) a palavra PRIMARY agora é opcional.

  • Em CREATE TABLE o atributo SERIAL agora é um apelido para BIGINT NOT NULL AUTO_INCREMENT UNIQUE.

  • SELECT ... FROM DUAL é um apelido para SELECT .... (Para ser compatível com alguns outros bancos de dados).

  • Se é criado um CHAR/VARCHAR muito grande, ele á alterado automaticamente para TEXT ou BLOB; Será exibido um aviso neste caso.

  • POde-se especificar os tipos BLOB/TEXT diferentes com a sintaxe BLOB(tamanho) e TEXT(tamanho). O MySQL irá alterá-los automaticamente para um dos tipos internos BLOB/TEXT.

  • CHAR BYTE é um apelido para CHAR BINARY.

  • VARCHARACTER é um apelido para VARCHAR.

  • Novos operadores inteiro MOD inteiro e inteiro DIV inteiro.

  • Adicionado SERIAL DEFAULT VALUE como um alias para AUTO_INCREMENT.

  • Adicionado TRUE e FALSE como alias para 1 e 0, respectivamente.

  • Agora aliases são forçados em tabelas dferivadas, como no SQL-99.

  • orrigido SELECT .. LIMIT 0 para retornar a contagem aproriada de linhas para SQL_CALC_FOUND_ROWS.

  • Pode-se especificar muitos diretórios temporários para serem usados de modo round-robin com: --tmpdir=nomedir1:nomedir2:nomedir3.

  • Subqueries: SELECT * from t1 where t1.a=(SELECT t2.b FROM t2).

  • Tabelas derivadas:

    SELECT a.col1, b.col2
    FROM (SELECT MAX(col1) AS col1 FROM root_table) a,
    other_table b
    WHERE a.col1=b.col1;

  • Conjuntos de caracteres a serem definidos por colunas, tabelas e banco de dados.

  • Suporte a Unicode (UTF8).

  • Nova sintaxe CONVERT(... USING ...) para conversão de valores strings entre conjunto de caracteres.

  • Índices BTREE em tabelas HEAP.

  • Servidor embutido mais rápido (novo protocolo de comunicação interno).

  • Pode-se adicionar um comentário por coluna em CREATE TABLE.

  • SHOW FULL COLUMNS FROM nome_tabela exibe os comentários das colunas.


  • Suporte a GIS (dados geometricos). Veja mais informações sobre isto na Capítulo 10, Extensões Espacias em MySQL.

  • SHOW [COUNT(*)] WARNINGS mostra avisos sobre o último comnado.

  • Pode se especificar um tipo de coluna para em um CREATE TABLE ... SELECT definindo a coluna na parte CREATE.

    CREATE TABLE foo (um tinyint não nulo) SELECT b+1 AS 'a' FROM bar;
  • expr SOUNDS LIKE expr é o mesmo que SOUNDEX(expr)=SOUNDEX(expr).

  • Adicionada nova função VARIANCE(expr) que retorna a variância de expr

  • Pode se criar um tabela a partir de uma existente usando CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tabela (LIKE tabela). A tabela também pode ser normal ou temporária.

  • Novas opções --reconnect e --disable-reconnect para o cliente mysql, para reconectar automaticamente ou não se a conexão for perdida.

  • START SLAVE (STOP SLAVE) não retorna mais um erro se o slave já está iniciado (parado); ele retorns um aviso.

  • SLAVE START e SLAVE STOP não é mais aceitada pelo analisador de consulta; use START SLAVE e STOP SLAVE em seu lugar.