What is the difference between SQL and mySQL
Queries are processed through a SQL database through a language called Structured Query Language. MySQL is one kind of SQL system, and it differs from other examples of the SQL language like Oracle in that it performs better for web-based applications.
MySQL is free, open-source, and available for both Windows and Linux. The SQL language has been implemented in a wide variety of products, including Microsoft's SQL Server, Oracle, Sybase, and PostgreSQL.
There were two main versions of MySQL, but MySQL version 5 has been the most popular and is still in use. Version 6 is used by most Linux distributions, can be installed on Mac OS X, and is offered for free download from?https://www.mysql.com. MySQL is not open-source but still available in source form:?https://dev.mysql.com/doc/refman/5.0/en/download-source.html.
MySQL+ is a proprietary add-on for MySQL 5.0, and originally for Windows only. Version 6.0 was released in October 2006, with this MySQL version being free and open-source. The first implementation of the MySQL source code was written by Oracle. MySQL + includes MySQL Workbench, which is a visual tool for developing and editing databases.
MySQL is much simpler to use than Oracle and has a smaller memory footprint. MySQL does not require a dedicated server whereas Oracle does. MySQL can be used for inexpensive shared and dedicated hosting. MySQL is based on client/server architecture, with a client program called the MySQL. A typical use of the. is to connect to a remote server using TCP/IP and run SQL commands, which are processed by the server's CPU.
MySQL databases are stored in files called tables. The structure of a table consists of rows and columns. Each database has a single table called "information_schema" that lists all the other database tables in its database and their descriptions.
MySQL can use a variety of data types:
1. VARCHAR – variables with a maximum length of 255 characters. For example, "text"
2. CHAR – characters with a maximum length of 255. For example, "text"
3. TINYTEXT – variable-length character string with a maximum length of 255 characters. For example, "text"
4. TEXT – variable-length character string that may be indexed. For example, "text"
5. MEDIUMTEXT – character string between 3 and 1,024 characters long, or up to 4KB; can be indexed. For example, "text"
6. LONGTEXT – variable-length character string that may be indexed. Maximum length is 4GB and up to 64KB. For example, "text"
7. BLOB – variable length binary, such as an image or document. For example, "picture.jpg"
8. BINARY – binary string, between 0 and 2 GB in length. For example, "blah"
9. VARBINARY – variable length binary string, between 0 and 2 GB in length. For example, "blah"
10. IBINARY – variable-length binary string that may be indexed. For example, "blah"
11. DATE – date and time, for example, "2004-02-24 13:35:00"
12. TIME – time, for example, "13:35:00"
13. DATETIME – date and time since the beginning of the epoch. For example, "2004-02-24 13:35:00"
14. YEAR – year, for example, "2001"
15. DATE_SUB – numeric value of a date, for example, "2001-02"
16. TIMESTAMP – date and time since the beginning of the epoch, using UNIX_TIMESTAMP() as the default value. For example, "2004-02-24 13:35:00"
When MySQL is installed, it creates a database called "information_schema", which lists all the tables in the other databases and their descriptions. The database "information_schema" is the only one that has no ".tablename" entry. For example, the table for a database called "messages" may have a description of:
The database "messages" does not exist yet. Before SQL statements are created, they must be added to the database "information_schema" with a CREATE TABLE statement, which adds a row to one of the tables in "information_schema". To create the table in the database "messages", first the table must be added to "information_schema":
Now that the table exists, it can be created with a SQL statement:
To insert information into a column, use INSERT INTO to create a new row. For example, to insert the value of "Hello" into the "name" column in the table "messages":
To delete information from a column, use DELETE FROM to delete one. Deleting from a non-existent table will return an error. For example, to delete the columns "msgtype" and "hello" from the table "messages":
To change the value of a column, use ALTER TABLE to modify all the rows in one table. For example, to change the value of "subject" to "Hello":
To retrieve information from a table, use SELECT. The value of the word IN() determines the column names in the list. The word FROM declares the table's name, and a WHERE clause may be used to filter out rows. For example, to retrieve the value of "subject" from the table "messages":
The "" can be used to output a column. The () can be used to get a column's position number, which is useful when deleting from tables. For example, to retrieve the position number of "subject" and output the value of "hello":
An asterisk (*) can be used to return a list of all columns in a table. For example, to retrieve all columns in the table "messages":
The query below retrieves all rows with text equal to the given string:
To update real-time data, such as stock market quotes, it is necessary to execute the UPDATE statement multiple times:
To. MySQL will have to be shut down and later restarted to make the update take effect.
It is necessary to create a file with SQL queries and run it before running a batch file. For example, to run the script "run_quotes.sql":
To list all databases, use the following command:
To delete a database or table, use the following command:
And then to delete the database "messages":
And then to reset the options file for "messages" by using a SQL query:
And. To delete the table "messages":
And to delete all tables:
To delete a database, first use the following command:
And then use the following command:
And then to recreate the database "messages":
Now that. To run a query:
To get a list of databases, use the following command:
MySQL can be used to create and delete tables, insert information into them, read the information back out and perform many other database operations.
Each MySQL database is given its own name. The name of the database is followed by a ":\" (backslash), which represents the root directory of the database. The default database is "information_schema".
MySQL can be used to create databases, tables, both temporary and permanent, and database objects. The use of the "CREATE" keyword is necessary to create a database, table, and database object.
The database can be created with a SQL statement:
And then the database would look like this:
To create a table in the database "messages", use the following command:
And then add fields to it, as follows:
The database "messages" now contains all. To the database "messages" can be added a table like this:
To do that, run the following:
And then run the following command:
The "create table" command is useful to create temporary tables. The "SELECT" command can be used to retrieve data out of created temporary tables.
To. The table is emptied using an SQL query:
And then to empty the "messages" table:
And when it is emptied, the above message is displayed.
To drop a table, first use the following command:
And then drop the table "messages":
And then the table is no longer available.
To insert data into a table, use the following command:
And then to insert data into a table named "<table name>":
The "INSERT" command is useful to insert temporary tables. The "" command can be used to get information about a table. The "" command is useful to delete data from a table. The "" command can be used to retrieve data out of a table. The "SUM" command is useful to get the sum of a column value. The "COUNT" command can be used to get the number of rows in a table. The "CAPTURE" command can be used to capture the value of a column. The "" command can be used to execute a query on a table.
The query below adds all accounts whose name ends with ".com" to the table "bank accounts":
And then to add all accounts whose name begins with "" and ends with ".com" to the table "bank accounts":
The question mark () can be used to output a column. The () can be used to get a column's position number, which is useful when deleting from tables.
The query below uses an inner join to retrieve the number of rows in the table "messages":
And then to get the number of rows in the table "messages":
The """ command can be used to get a list of columns in a table. The "" command can be used to execute a query on a table. The "" command can be used to execute the SELECT statements.
By default, "insert" creates a new table and inserts the data from the INSERT INTO XML statement into that table. When you use this form of the INSERT command, it is not possible to specify columns from the table.
By specifying "<tablename>" after the "INSERT", you can insert multiple rows into an existing table. If a table does not exist, it is created as if the "CREATE" command had been used.
The INSERT … SELECT statement inserts data from one table into another. The columns in the SELECT statement must match those in the table from which data is being inserted. If a column does not appear in one table, it will not be included in the other table.
The question mark (?) can be used to output a column. The () can be used to get a column's position number, which is useful when deleting from tables. And then to insert data into the table "messages":
The name of a primary key must be unique for each row and cannot contain any spaces.
The query below retrieves the primary key and output column name of the table "bank accounts":
And then to get the primary key and output column name of the table "bank accounts":
The "" command can be used to retrieve a list all tables in a database. The "" command can be used to execute a query on all tables. The "" command can be used to retrieve column data from all tables. The "" command can be used to define database triggers. The "ALTER" command is useful to rename a table. The "DROP" command can be used to delete a database.
The query below creates a new table named "stuff" and inserts some data into it. If a column does not exist in the table "bank accounts", it is created.
The query below creates a new table named "stuff" and inserts some data into it. If a column does not exist in the table "balance", then it is created.
The query below creates a new table named "stuff" and inserts some data into it. If a column does not exist in the table "near", then it is created.
The query below creates a new table named "stuff" and inserts some data into it. If a column does not exist in the table "items", then it is created.
SUM is used for calculations on numeric columns.
The query below returns the sum of all accounts ending with .com and .net:
And then to get the sum of all accounts ending with .com and .net:
CAPTURE is used for outputting numeric columns.
The query below retrieves the row count of "bank accounts" and the name of its output column.
The query below outputs the name of the output column for "bank accounts".
WHERE is used to further filter a result set.
The query below retrieves accounts that contain "soft" in their account name.
The query below retrieves an account whose name ends with ".com".
WHERE is used to further filter the result set.
The query below retrieves accounts whose name begins with "" and ends with ".com".
AND is used to specify multiple conditions.
The query below retrieves all accounts whose names begin with "soft" and end with ".net".
NOT is used to negate a condition.
The query below retrieves all accounts whose names begin with "soft" and do not end with ".net".
OR is used to combine multiple conditions.
The query below retrieves all accounts whose name ends with ".com".
The question mark (?) can be used to output a column. The () can be used to get a column's position number, which is useful when deleting from tables.
The query below retrieves accounts that have soft in their names.
The query below retrieves accounts whose names end with .net.
The question mark (?) can be used to output a column. The () can be used to get a column's position number, which is useful when deleting from tables.
The query below retrieves accounts whose names end with .com.
The question mark (?) can be used to output a column. The () can be used to get a column's position number, which is useful when deleting from tables.
The query below retrieves accounts that have beginning with "soft" in their names.
The query below retrieves accounts beginning with "soft" and ending with ".net".
Not all SQL commands allow their parameters to be split across multiple lines of input. In general, the single-line syntax of SQL statements can be used when you are typing in a query interactively. However, when creating a large batch of SQL statements or embedding queries in other software applications, the multi-line format may be preferred. The multi-line format is also useful when you want to write down a query to be executed by someone else. The multi-line format is specified by starting the text with "--" rather than "SELECT." The SELECT statement itself still must follow the same format as used in the single-line syntax.
The query below retrieves information about all accounts:
And then to get information about all accounts:
The query below retrieves account names that begin with "soft".
The query below retrieves account names that end with .com
Not all SQL commands allow their parameters to be split across multiple lines of input. In general, the single-line syntax of SQL statements can be used when you are typing in a query interactively. However, when creating a large batch of SQL statements or embedding queries in other software applications, the multi-line format may be preferred. The multi-line format is also useful when you want to write down a query to be executed by someone else. The multi-line format is specified by starting the text with "--" rather than "SELECT." The SELECT statement itself still must follow the same format as used in the single-line syntax.
The query below returns balance for accounts that have beginning with "soft" and ended with ".net".?
The query below returns account names that begin with "soft" and end with ".com".
The keywords CREATE and DROP cannot be used together. DROP takes the place of CREATE, but the CREATE statement is required in most cases. The DROP command cannot be used more than once on a table or view. In other words, a table cannot be dropped multiple times in its lifetime. However, you can use DROP more than once within an SQL statement as long as you do not try to create something else at the same time.
The query below drops the "order_items" table.?
By default, SQLite will not delete any rows from the tables in your database, nor will it drop tables that you have created. The command below will delete all rows (if any) in the "bank accounts" table dropped by the above command:
In this example, if a row is dropped in a table then no rows are deleted from that table:
In this example, if a row is deleted from an existing table then all its rows must be deleted:
The query below creates a new base table with two columns: name and type.
CREATE TABLE IF NOT EXISTS "things" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "type" TEXT);
The query below creates a new base table with four columns: id, name, type, and class.
CREATE TABLE IF NOT EXISTS "things" ("id", PRIMARY KEY, INTEGER UNIQUE) ("name", TEXT UNIQUE), ("type", TEXT UNIQUE), ("class", TEXT);
The query below creates two new tables that use the two tables above: thing_details and thing_pairs.
CREATE TABLE IF NOT EXISTS "thing_details" ("id" INTEGER PRIMARY KEY, "details", "class", "type") ("id" INTEGER PRIMARY KEY, "name", TEXT UNIQUE);
CREATE TABLE IF NOT EXISTS "thing_pairs"("id1", "id2");
The query below creates the view thing(name, type) as a combination of things and thing_pairs.
The query below creates the view thing(name, class) as a combination of things and thing_pairs.
The query below drops the table thing().
DROP TABLE IF EXISTS "things";
The query below creates a table called pet_info with five fields.
CREATE TABLE IF NOT EXISTS "pet_info" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "color" TEXT, "type" TEXT);
The query below drops the table pet_info.
DROP TABLE IF EXISTS "pet_info";
SQLite supports three data types: INTEGER and REAL (also called the signed and unsigned integer data types), and TEXT (also called the text data type). Here is a list of the various types, how to use them, and how they compare to each other.
The INTEGER type is used for integer numbers. Whenever there is more than one integer number, the real part (the fractional number) will be stored in the INTEGER column. If you want to use an INTEGER tabled as text, then you must use quotes around the contents of this variable. For example:
Int(5) 'a' The INTEGER type accepts variables of any length between -32,768 and +32,767 inclusive and uses 33-bit precision internally. The DECIMAL data type can only store integers with a range between -1 , 0 . . . 1 , ?999 and ?999 , 999 . . . 997. The DECIMAL type (from SQLite version 3.2.0–3.2.17) can store integers with a range between -3 , ?1038 … ?999 and +3 , +1038 … +997 (including the special cases of ?3,283 and +3,283).?
The REAL type is the same as INTEGER but with 32-bit signed quantities only (meaning it will store hexadecimal numbers in scientific notation). It is used for floating-point numbers with a range of ?3.4 × 10 to +3.4 × 10 inclusively and has 15-bit precision. The INTVAL function can be used to convert between INTEGER and REAL, but only if they are both stored in the same table:
The TEXT type stores text data as well as numbers. When there is more than one value, they will be stored in the TEXT column in their original order, but with all the text separated by double quotes "". If no quotes are used, the text will be stored as a single string. If data is stored as lists, then each element will be separated by a comma and a space. Also, each value must be separated by an empty string "". Values that contain spaces or new lines can be put in quotes to avoid splitting them across multiple columns:
A bound variable (or a variable with both the column name and "=" clause) can use either INTEGER or REAL types:
The query below adds account names that begin with "soft" to the account table. The query also adds test accounts that have been created specifically for testing purposes.
SQLite supports three boolean operators: AND, OR, and NOT. These are used in forming expressions where the final result is true or false. In other words, you can use these operators to evaluate any number of conditions on a single truth value. The expression (1 + 2) AND (3 + 4) evaluates to true even though the first part evaluates to false. When there are three or more conditions then the operators work like short circuits to the left:
The above statement is true if the first part is true and if it is also the case that all parts on the left evaluate to true; otherwise, it will evaluate as false.
Boolean operators are often used in the WHERE clause to narrow down a query. For example, the following query computes the minimum temperature across a few locations:
The above query will only return temperature data for locations where every day's temperature is higher than at least one other location's.
SQLite can convert an integer value to a string using the TO_CHAR() function. This can be useful if you want to display values as strings instead of numbers in your program:
To convert any number of integer values into one long string, you can use the CONCAT() function which takes three parameters: two integers and one string. The result of the CONCAT() function will be a single string:
The query below converts all integer values in the account table to strings.
The query below converts all integer values in the account table to strings and counts them:
To convert a string into an integer, we use either CAST(x AS INTEGER) or CONVERT(x, INTEGER). They both do the same thing but are there for different reasons. The CAST() function is used to explicitly convert a string into an integer whereas CONVERT() is designed for converting a string directly into any other data type. CONVERT() can be used for any data type as well as returning NULL if no conversion is possible. For example, let's convert the words "a" and "two" into a signed integer:
SELECT CAST("a" AS INTEGER) as a1, 'two' AS INTEGER FROM test; a1 | two -----+---- 1 | 2 (2 rows)
The query below converts all strings in the account table to integers.
SQLite supports three functions that can be used to generate random numbers. These are RANDOM(), RANDOM() DEPENDING ON, and RNDRAND(). All of these functions have similar syntax:
This function generates a random integer between 0 and N-1 inclusive where N is the value of x,y, or z. The DEPENDING ON operator checks the random value against its current value to ensure that the integer is not repeated in a row. This is a simple way to generate truly random numbers but still retain a maximum of about four digits of accuracy. The default behavior for each of these functions can be controlled using the SQLITE_ GetENV() and SQLITE_ SetENV() functions (which are defined in sqlite3ext.h).?
The query below uses a series of RANDOM() functions to produce two different random numbers:
The similarity between these statements is that the query will output two different random numbers. The first is computed by the statement SELECT RANDOM() the second involves the SELECT RANDOM() DELAY 15 statement. Both return a pair of numbers with a small amount of random variation. The difference is that one can be computed immediately with no performance penalty, while the other must wait 15 seconds before it can run and therefore incur a slight performance penalty. This can make a difference if you are using the random number as part of a transaction that is included in a sequence of statements.
The RANDOM() function always produces the same result when called twice with the same parameters. Moreover, it only returns different results if it is called twice with different parameters. This can be used to include an extra field that is required to be somewhat random during INSERT operations:
领英推荐
INTERNAL TABLE x contains additional data that must be randomized in each row, but this must also produce repeatable results during INSERT operations. The statement below adds the value "something" to the random column of x:
The query below can be run on any connected server to generate a random number.
If you want to create a table that will contain a large number of rows and you have queries that might need to refer to one or more of those rows, consider using the TRUNCATE TABLE command instead. TRUNCATE TABLE deletes all existing data from the table and then inserts an identical copy into its place. This allows you to (a) remove all data from a table instantly and (b) save on disk space by using a smaller file size. If you create a table with 100,000 rows, for example, then delete all of that table's data, you will save (a) 100,000 x 8 bytes or 800 KB in file size.
It is important to use UNIQUE constraints when creating tables. Using UNIQUE constraints can be more efficient than other methods because SQLite stores indices on the unique column(s) rather than on the entire row set of that column(s). Only one row per unique key will ever be stored in the index and this can save a considerable amount of disk space. This is important for tables with a large number of columns and rows, but even for small tables, it can still prove useful to add UNIQUE constraints to speed up queries.
The query below creates a new table called users that contains a UNIQUE constraint on the "user_id" column:
The query below computes the average number of minutes per month across all students where each student has exactly 12 hours of class meetings:
The above query requires two tables; one with monthly class schedules and another for computing monthly averages. The query below computes the average number of minutes per month across all students:
When dealing with a large number of rows, you may want to break the query up into multiple queries. This is more efficient because it reduces the amount of data that must be passed over the network. The following two queries accomplish exactly the same thing but they use different techniques to do it:
The logical AND operator returns TRUE if all its arguments are TRUE. If any argument is FALSE, then the entire expression evaluates to FALSE. This makes it a very useful operator for combining multiple conditions into a single query:
Standard SQLite expressions can be evaluated using one or more scalar values and/or subqueries. The scalar value(s) must be surrounded by parentheses and separated from the expression using the comma operator. The example below computes the maximum number of characters in a single string:
The query below uses a scalar value of 1000 to retrieve a single character from each of five strings contained in col1:
The following query is identical to the above one, but it uses NULL instead of 1,000:
SQLite functions can be used in any SQL query. Functions are distinguished by their name and are always enclosed within square brackets. The function name is followed by one or more parameters separated by commas. Each parameter can be optional (specified as "?") or mandatory ("?"). An input value is required when it contains no question mark but is optional otherwise.
The following query computes the factorial of the number 5:
Alternatively, if you would like to demonstrate the use of SQL functions, with implicit, or named arguments and output only one column instead of an entire table:
In addition to scalar values, all functions take a list (LISTS) as their first parameter. This list can contain any value that can be cast into a PQS_ResultSet (see below). The function will return a result set from the list. If no parameters are specified then it returns options for non-specified parameters by default in PQS_ResultSet format; i.e. an array of arrays of strings. The following query is identical to the above factorial query, but it demonstrates using an implicit PQS_ResultSet parameter:
A SQLite function returns a result set, which is an unordered combination of one or more scalar values and/or subqueries. Result sets are enclosed within a pair of parentheses. This can be noticed on both sides of the equal sign in the "SELECT" statement and the return type from a function call. Any function that returns a result set must have two pairs of parentheses behind it, even if they are empty (as seen in the above factorial example). The following query creates a result set that contains two columns, "a" and "b":
As previously mentioned, a scalar value can be returned as an individual value:
A subquery is a SELECT statement that is enclosed within a pair of parentheses. This can be noticed on both sides of the equals sign in the "SELECT" statement and the return type from a function call. The subquery can have any number of parameters, but only the first one is required. Like functions, the first parameter can be a scalar value or a result set, but subsequent parameters must be scalar values. Subqueries can take any number of special characters as an argument.
The following query computes the factorial of the number 5:
The following query creates a subquery that returns an array of arrays (result sets):
The following query constructs an inner query in which each row of x is passed to the subquery as a parameter and then multiplied by 2:
To see how to use regular expression matching in SQLite with libpq you can see it here?
SQLite supports CAST() for casting one data type into another. However, this is only done internally and is not part of the SQL*Plus command set, so it is ignored by any other client.
The following example demonstrates casting a numeric value (1) into DATE:
SQLite supports three different types of dates: DATE, TIME, and TIMESTAMP. To create a new time or timestamp column with just "TIMESTAMP", use the new keyword in the CREATE statement:
There are some differences between TIMESTAMP and DATETIME. The first difference is that DATETIME can show fractional seconds whereas TIMESTAMP cannot. TIMESTAMP uses UTC, whereas DATETIME uses the local timezone. So TIMESTAMP will be equal to DATETIME if they are expressed in the same timezone. The final difference is that no TIME data takes part in sorting or returning a result set, it is always cast into a string and returned as "YYYY-MM-DD HH:MM:SS".
SQLite supports trigonometric functions that can take radians or degrees as an argument. The following query converts from degrees to radians:
The following query converts from radians to degrees:
SQLite can perform binary and unary bitwise operations on integers. It accepts all the usual bitwise operators except "AND", "OR", and "XOR".
The following query performs a bit-wise AND of two integers:
The following query performs a bit-wise OR of two integers:
The following query performs a bit-wise XOR of two integers:
SQLite supports three different types of strings. Strings can be single or double-quoted and prefixed with '". The single quotes in this context do not mean that the string must not be quoted anywhere else, only within the string itself. The SQLite standard defines both single and double quotes as escape sequences. The rules for escaping and unescaping strings are as follows:
"" or """" is a single quote (')
" or ' are double quotes.
The following query defines a table and inserts into the table a string containing three single quotes separated by commas:
SQLite supports two different types of lists: tuples and lists. Tuples are enclosed by parentheses, with optional horizontal whitespace, followed by an expression that must be of the same type as the outer list tag. Lists are enclosed by square brackets, with optional vertical whitespace, followed by an expression that must be of the same type as the outer list tag. To create a list using the following syntax:
The following example creates a list and inserts one value for each element in the list:
To insert multiple values into a single row, instead of a comma-separated list you can use the table literal construct:
The following example creates an INSERT statement that inserts one result set into three different arrays depending on which column is being inserted. This is accomplished using array slices to generate dynamic lists.
The SQLite Library (libpq) supports almost all SQLite commands. However, the following commands have been reduced in functionality or are not supported at all:
The following example demonstrates how to create a temporary table in libpq using an anonymous block. The advantage of using this method is that it allows multiple occurrences of the same named table within a single query. This is especially useful when joining tables together.
The following example demonstrates how to create a temporary table in libpq using an explicit block. The advantage of using this method is that it will return the new id for the created table and any constraint violations will be reported via PQerrorMessage() rather than throwing an error.
The following example demonstrates how to create a temporary table in libpq using a named block. The advantage of using this method is that it does not require any lines to be prefixed with CREATE TEMPORARY TABLE. This is especially useful if you do not want to see any output from the query or if you want to make use of the DROP TEMPORARY TABLE statements.
The following example performs a recursive SELECT statement on the column where_id in every row and returns a data structure that contains all rows affected by this query:
Note: as SQLite supports only one WHERE clause, the outer query will always return one row regardless of what values are in the WHERE clause.
The following example performs a recursive SELECT statement on the column where_id in every row and returns the id of each parent along with an array containing all rows affected by this query. This is useful when returning hierarchical data and it is important to know the parent-child relationships between tables.
Note: as SQLite supports only one WHERE clause, the outer query will always return one row regardless of what values are in the WHERE clause.
The following example demonstrates how to create a temporary table in libpq using an anonymous block. The advantage of using this method is that it allows multiple occurrences of the same named table within a single query. This is especially useful when joining tables together.
The following example demonstrates how to create a temporary table in libpq using an explicit block. The advantage of using this method is that it will return the new id for the created table and any constraint violations will be reported via PQerrorMessage() rather than throwing an error.
The following example demonstrates how to create a temporary table in libpq using a named block. The advantage of using this method is that it does not require any lines to be prefixed with CREATE TEMPORARY TABLE. This is especially useful if you do not want to see any output from the query or if you want to make use of the DROP TEMPORARY TABLE statements.
The following query is executed in a persistent environment and creates two temporary tables (t1 and t2) that must be dropped after the query has been executed. Both tables are defined within the same block:
The following query is executed in a persistent environment and creates two temporary tables (t1 and t2) that must be dropped after the query has been executed. Both tables are defined within two separate blocks:
By default, all SQLite databases should be UTF-8 encoding. It is unsafe to assume this, so applications must check that their database files use UTF-8 encoding. They must do this at least once before creating the database and after every database upgrade. The required SQL statement to check if a database file uses UTF-8 encoding is:
If the database file uses UTF-8 then the output of this statement will be 'true' otherwise it will be 'false'. If the result is false, then you must make sure that the encoding of your database matches the encoding defined in your application's CREATE DATABASE statement. The following examples demonstrate how to check if a database uses UTF-8:
The following example demonstrates initializing libpq with a connection string containing an explicit host, port, and dbname.
The following example demonstrates initializing libpq with a connection string containing no explicit hostname, port, or dbname.
The following example demonstrates initializing libpq with a connection string containing an explicit host, port, and dbname. This is useful if the values of these variables may vary depending on how you will be using libpq e.g. embedded versus client/server mode:
In this example, the unix path to the file holding the database is hard coded to store data in a single file (test1.db). The file is created by the following statement:
In this example, the unix path to the file holding the database is hard coded to store data in a single file (test1.db). The file is created by the following statement:
If multiple users and/or schema files are stored within a single SQLite database, the application must make sure that it does not try and use those files before all other users have finished using them. The use of an explicit locking mechanism such as SQLITE_FCNTL_NestedLocks() would be an easy way to avoid this issue.
Warning: the SQLITE_FCNTL_NestedLocks() function is not part of the SQLite interface and is essentially a private implementation detail. Applications should not rely on their existence or even on their correctness. Future versions of SQLite might or might not support this function. Use Cases for SQLITE_FCNTL_NestedLocks() (the manual page) for an explanation of its purpose and use cases.
This section contains a variety of examples that demonstrate how to implement various aspects of libpq. All of the examples in this chapter use C code as it is the recommended language for programming against libpq.
The following examples are all taken from the command line psql program. This example connects to a database called testdb and issues a few queries:
The next example shows how to send a query from a file:
In this example, the \ I filename command is used to include a file of SQL commands into the current session.
This last example shows how to drop table test_table:
This section contains examples that demonstrate how to use libpq for client/server communication. These examples are taken from the command line psql program. The following example starts a trivial client using the psql program to send a query to the database Postgres on host localhost and port 5432:
The next example shows how to connect to a database called testdb on host localhost and port 5432 with the password:
The next example shows how to connect to a database called testdb on host localhost and port 5432 with no password required:
The next example shows how to send a query from a file called /etc/postgresql/testdb.sql. The query file is assumed if it exists; otherwise, it is created as part of libpq's pre-connection processing.
The next example shows how to connect to a database called testdb and issue a query from a file called /etc/postgresql/testdb.sql. The query file is assumed if it exists; otherwise, it is created as part of libpq's pre-connection processing.
The next example shows how to connect to a database called testdb using the host localhost and port 5432. The host can be omitted:
As you can see, libpq may present slightly different command line options depending on whether or not the connection is via a local Unix socket or TCP/IP i.e.:
Note that the above examples used plaintext authentication with no security enhancements e.g. TLS encryption. The next example shows how to connect to a database called testdb using TLS:
The next example shows how to connect to a database called testdb on host localhost and port 5432 with the password. This should be used with caution:
This section contains examples for all the supported SQLite commands. These examples are taken from the command line psql program.
The following command sends a message back to the caller with libpq's SQLITE_BUSY error code.
The following command retrieves the same data as the query above.
The following command deletes all rows in the sales table.
The next command seizes control of a shared-cache prepared statement:
The following commands are similar to the examples above, but change the exit status to that expected by popular clients:
These examples illustrate the use of various SQL functions issued from within libpq's psql client program against an SQLite database via a Unix socket:
This example updates table test_table with DateTime values representing when the rows were inserted. The result_type indicates that this is an SQLITE_UPDATE operation and that both old and new values are returned in the additional arguments. The message field contains a human-readable description of the operation.
This example deletes all rows in the sales table.
This example inserts some data into the busy_info table.
This example deletes all rows in the busy_info table.
This example returns a sequence of numbers from 1 to 10.
This example returns the same sequence of numbers as above, but reverses the order.
This example returns all rows whose last_name field contains the value “Abraxastrophe”.
This example uses the SQLITE_INSERT command to insert some data into tables sales and customers. The table names are resolved at runtime, so a column named xyz created in one schema is not visible within another schema.
This example searches a table for all records where exactly two of the values in an ordered triple match a criterion i.e. they satisfy the given predicate.
This example searches a table for all records where exactly two of the values in an ordered triple match a criterion i.e. they satisfy a criterion but not any of the given predicates.
This example searches a table for all records where all three of the values in an ordered triple match a criterion i.e. they satisfy the given predicate.
This example searches a table for all records where all three of the values in an ordered triple match a criterion i.e. they satisfy a criterion and any of the given predicates.
This example searches a table for all records with any two or more of the values in an ordered triple matching a criterion i.e. they satisfy at least one of the given predicates.
This example searches a table for all records with any two or more of the values in an ordered triple matching a criterion i.e. they satisfy at least one but not necessarily both of the given predicates.
This example searches a table for all records with exactly three of the values in an ordered triple matching a criterion i.e. they satisfy the given predicate.
This example searches a table for all records where exactly three of the values in an ordered triple match a criterion i.e. they satisfy a criterion and any of the given predicates.
This example searches a table for all records where all three of the values in an ordered triple match a criterion i.e. they satisfy both of the given predicates.
This example searches a table for all records where all four of the values in an ordered quadruple match a criterion i.e. they satisfy the given predicate.
This example searches a table for all records where all four of the values in an ordered quadruple match a criterion i.e. they satisfy a criterion and any of the given predicates.
This example searches a table for all records where the four values in an ordered quadruple are equal, but not necessarily to the SQLITE_NULL value.
This example searches a table for all records with any three or more of the values in an ordered triple matching a criterion i.e. they satisfy at least one but not necessarily all of the given predicates.
This example searches a table for all records with any three or more of the values in an ordered triple matching a criterion i.e. they satisfy at least one and not potentially both of the given predicates.
This example searches a table for all records with exactly three or more of the values in an ordered quadruple matching a criterion i.e. they satisfy at least one and not potentially both of the given predicates.
This example searches a table for all records where every value in an unordered set is equal to every other value in that set.
This example searches a table for all records where every value in an unordered set is equal to itself.
This example searches a table for all records where exactly two of the values in an unordered set are equal to each other.
This example searches a table for all records with exactly two of the values in an unordered set matching a criterion i.e. they satisfy a criterion and any of the given predicates.
This example searches a table for all records with every value in an unordered set matching every other value in that set.
The following example prompts the user to enter text and then writes it out to a database as INSERT INTO message (text) VALUES ("Hello World").
The SQLite database is created with the create database command, it opens the first database file, named “test.db”, and then executes the connect and execute commands against it. The result_type field indicates that this is an SQLITE_CREATE operation and that a pointer to a new shared-cache prepared statement is returned in the result. The message field contains a human-readable description of the operation.
This example prompts the user to enter text and then write it out to a database as INSERT INTO message (text) VALUES ("Hello World") . The SQLite database is created with the create database command, it opens the first database file, named “test.db”, and then executes the connect and execute commands against it. The result_type field indicates that this is an SQLITE_CREATE operation and that a pointer to a new shared-cache prepared statement is returned in the result. The message field contains a human-readable description of the operation.