Maximum Query Length in DelphiXE4 and MySQL Community 5.6.12 - mysql

I use delphixe4 to send query to MySQL Community 5.6.12 database using ADO.
In one of tables there is many varchar fields and I'm worry about sending insert query cause it will be too long !
Is there any Maximum Length for queries?
f1:='This is a test !';
ADOQuery1.SQL.ADD('INSERT INTO MyTable (field1,field2,field3,.....,field30)VALUES('+QuotedStr(f1)+','+....+QuotedStr(f30));

E.10.4. Limits on Table Column Count and Row Size
There is a hard limit of 4096 columns per table, but the effective maximum may be less for a given table. The exact limit depends on several interacting factors.
So you do not have problems to add data on it (if you do not try to add more).
If Mysql accept this number of columms in a table, I think it is unrelated about Ado or other driver connector sql query.

Related

Why does my MySQL database's INFORMATION_SCHEMA not accurately represent the tables

I was migrating a database from a server to the AWS cloud, and decided to double check the success of the migration by comparing the number of entries in the tables of the old database and the new one.
I first noticed that of the 46 tables I migrated, 13 were different sizes, on further inspection I noticed that 9 of the 13 tables were actually bigger in the newer database than the old one. There are no scripts/code currently setup with either database that would change the data, let alone the amount of data.
I then further inspected one of the smaller tables (only 43 rows) in the old database and noticed that when running the below sql query, I was getting a return of 40 TABLE_ROWS, instead of the actual 43. The same was the case for another smaller table in the old database where the query said 8 rows, but there were 15. (I manually counted multiple times to confirm these two cases)
However, when I ran the same below query on the new, migrated, database as I did on the old database, it was displaying the correct number of rows for those two tables.
SELECT TABLE_ROWS, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE.SCHEMA = 'db_name';
Any thoughts?
Reading the documentation: https://dev.mysql.com/doc/refman/8.0/en/tables-table.html
TABLE_ROWS
The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.
Were there any error/warning in the migration log? There are so many ways to migrate mysql table data, I personally like to use mysqldump and importing the resuting sql file using mysql command line client. In my experience importing using GUI clients always have some shortcomings.
In order for information_schema to not be painfully slow when retrieving this for large tables, it uses estimates, based on the cardinality of the primary key, for InnoDB tables. Otherwise it would end up having to do SELECT COUNT(*) FROM table_name, which for a table with billions of rows could take hours.
Look at SHOW INDEX FROM table_name and you will see that the number reported in information_schema is the same as the cardinality of the PK.
Running ANALYZE TABLE table_name will update the statistics which may make them more accurate, but it will still be an estimate rather than just-in-time checked row-count.

MySQL/InnoDB result set limited to 1000 records?

I'm loading a RDB with dummy data to practice query optimization. MySQL Workbench executed 10,000 INSERTs without returning an error into my customers table. Yet, when I SELECT * from that table I am only getting back exactly 1000 records in the result set. I am using InnoDB as my table engine
According to this link I should have unlimited records available and a 64TB overall sizelimit.. Im inserting 10,000 records with 4 VARCHAR(255)columns and 2 BOOLEAN columns each and I don't think that tops 1 TB. Am I wrong in this assumption?
Is the result grid limited to 1000 records? Is there an alternative to InnoDB which supports foreign keys? Is the problem that VARCHAR(255) is way too large and I need to reduce to something like VARCHAR(50)? What am I not understanding.
THANK YOU IN ADVANCE
In the query editor toolbar there's a drop down where you can limit the number of records you want to have returned. Default is 1000, but you can change that in a wide range, including no limitation.
No, it is not limited to 1000 records. I have InnoDB complex tables of more than 50 million records with blobs and multiple indexes. InnoDB is perfectly fine, you don't have to look for another engine. Could you be more precise about the context where you executed the query? Was it from a programming language? command line mysql client? Another Mysql client?
Many database query tools limit the number of rows returned. Try selecting some data from a high row number to see if your data is there (it should be).
I thought this would be useful for future reference:
In Microsoft SQL Server Management Studio, under Tools->Options->SQL Server Object Explorer->Value for Select Top <n> Rows Command change the number of rows returned:

mysql - can I determine or limit the amount of memory query is allowed to use

I am running a query that creates a temporary table however the limit is 64mb and I am not able to change the limit due to access permissions etc. When a large date range is selected the temporary table runs out of space and results in a mysql error.
Is there anyway I can determine the size or amount of memory the query will use before attempting to run the query, so I can avoid the above problem gracefully?
There's no way to limit the size of the temp table directly, except by querying for a smaller number of rows in your base SQL query.
Can you be more specific about the error you're seeing? MySQL temporary tables can exist in memory up to the lesser of tmp_table_size and max_heap_table_size. If the temp table is larger, MySQL converts it to an on-disk temp table.
This will make the temp table a lot slower than in-memory storage, but it shouldn't result in an error unless you have no space available in your temp directory.
There's also a lot of ways MySQL uses memory besides temp table storage. You can tune variables for many of these, but it's not the same as placing a limit on the memory a query uses.
The error 1114 indicates that you've run out of space. If it were an InnoDB table on disk, this probably means you have an ibdata1 file without autoextend defined for the tablespace. For a memory table, it means you're hitting the limit of max_heap_table_size.
Since you can't change max_heap_table_size, your options are to reduce the number of rows you put into the table at a time, or else use an on-disk temp table instead of in memory.
Also be careful about using the most current release of the major version of MySQL. I found bug 18160 that reports MySQL calculating table size incorrectly for heap tables (which are used for in-memory temp tables). So for example make certain you're using at least MySQL 5.0.23 or 5.1.10 to get the fix for that bug.
I'm not aware of a direct way to accomplish this, but you could use the information about the used tables provided by SHOW TABLE STATUS like for example the average row size and then calculate the number of records returned by your query using SELECT COUNT(*) .... If you need to be really save calculate the maximum size of a row by using the columns types.
Maybe it would be easier to check the number of records which can be handled and then either specify a fixed LIMIT clause or to react on SELECT COUNT(*) ....

What is maximum records quantity a MySQL table can store?

How many records can a MySQL MyISAM table store? How many InnoDB can?
You can't count by number of records because your table can have really short records with only a few int fields or your records might be really long with hundreds of fields.
So it has to be measured in the file size of the tables.
For MYSQL: The table size limit is based on the operating system drive file system that MySQL is installed on, ranging from 2GB to 2TB.
See the MySQL reference manual for full explanations of limits for each operating system.
Concerning InnoDb and MyIsam i do not know.
From the MySQL site:
Support for large databases. We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 200,000 tables and about 5,000,000,000 rows.
The more practical limit will be the size of your key -- if your primary key is an int field, then the max number of rows will be the largest number that can be held in an int.
So if you're expecting a big table size, use bigint ... or something even bigger.

Maximum Row in DBMS

Is there any limit to maximum row of table in DBMS (specially MySQL)?
I want create table for saving logfile and it's row increase so fast I want know what shoud I do to prevent any problem.
I don't think there is an official limit, it will depend on maximum index sizes and filesystem restrictions.
From mySQL 5.0 Features:
Support for large databases. We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 200,000 tables and about 5,000,000,000 rows.
You should periodically move log rows out to a historical database for data mining and purge them from the transactional database. It's a common practice.
There's probably some sort of limitation, dependent on the engine used and the table structure. I've got a table with appx 45 million entries in a database I administrate, I've heard of (much) higher numbers.