A basis,
Schemas define information about how data is stored, what data is stored, and how the data is decomposed. Both databases and tables have schemas.
Primary key values are not allowed to be modified or reused (deleted primary key values cannot be assigned to the primary key of a new row).
Structured Query Language (SQL), standard SQL is managed by the ANSI Standards Committee and is called ANSI SQL. Each DBMS has its own implementation, such as PL/SQL, Transact-SQL, etc.
SQL statements are case insensitive, but whether database table names, column names, and values are distinct depends on the specific DBMS and configuration.
SQL supports the following three types of annotations:
# # commentsSELECT *
FROM mytable; Comments -
/* Note 1 note 2 */
Copy the code
Database creation and use:
CREATE DATABASE test;
USE test;
Copy the code
Create table
CREATE TABLE mytable (
# intType, not empty, automatically increment idINT NOT NULL AUTO_INCREMENT,
# intThe value cannot be null. The default value is1, not null col1INT NOT NULL DEFAULT 1, # is a string of variable length45Can be empty col2VARCHAR(45) NULL, # date type, can be null col3DATE NULLSet primary key to idPRIMARY KEY (`id`));
Copy the code
3. Modify the table
Add columns
ALTER TABLE mytable
ADD col CHAR(20);
Copy the code
Delete the column
ALTER TABLE mytable
DROP COLUMN col;
Copy the code
Delete table
DROP TABLE mytable;
Copy the code
Four, insert,
Ordinary insert
INSERT INTO mytable(col1, col2)
VALUES(val1, val2);
Copy the code
Insert the retrieved data
INSERT INTO mytable1(col1, col2)
SELECT col1, col2
FROM mytable2;
Copy the code
Inserts the contents of a table into a new table
CREATE TABLE newtable AS
SELECT * FROM mytable;
Copy the code
Five, update,
UPDATE mytable
SET col = val
WHERE id = 1;
Copy the code
Six, delete,
DELETE FROM mytable
WHERE id = 1;
Copy the code
TRUNCATE TABLE can clear the TABLE, that is, delete all rows.
TRUNCATE TABLE mytable;
Copy the code
Use the WHERE clause when using update and delete operations, otherwise the entire table will be destroyed. You can test with a SELECT statement first to prevent false deletions.
Seven, query
DISTINCT
The same value only occurs once. It works on all columns, which means that all columns are equal if they have the same value.
SELECT DISTINCT col1, col2
FROM mytable;
Copy the code
LIMIT
Limit the number of rows returned. You can take two arguments. The first argument is the start row, starting at 0; The second argument is the total number of rows returned.
Return to the first 5 lines:
SELECT *
FROM mytable
LIMIT 5;
Copy the code
SELECT *
FROM mytable
LIMIT 0.5;
Copy the code
Return lines 3 to 5:
SELECT *
FROM mytable
LIMIT 2.3;
Copy the code
Eight, sorting,
- ASC: Ascending (default)
- DESC: descending
You can sort by more than one column and specify a different sort for each column:
SELECT *
FROM mytable
ORDER BY col1 DESC, col2 ASC;
Copy the code
Nine, filtering,
Unfiltered data is very large, resulting in excess data being transmitted over the network, wasting network bandwidth. Therefore, try to use SQL statements to filter unnecessary data, rather than transferring all data to the client and then filtering by the client.
SELECT *
FROM mytable
WHERE col IS NULL;
Copy the code
The following table shows the operators available for the WHERE clause
The operator | instructions |
---|---|
= | Is equal to the |
< | Less than |
> | Is greater than |
< >! = | Is not equal to |
< =! > | Less than or equal to |
> =! < | Greater than or equal to |
BETWEEN | Between the two values |
IS NULL | NULL values |
Note that NULL is different from either a 0 or an empty string.
AND AND OR are used to join multiple filter conditions. Priority is given to AND. When a filter expression involves more than one AND AND OR, () can be used to determine the priority, making the priority relationship clearer.
The IN operator is used to match a set of values, which can also be followed by a SELECT clause to match a set of values from a subquery.
The NOT operator is used to negate a condition.
10. Wildcards
Wildcards are also used in filter statements, but only for text fields.
-
% matches >=0 arbitrary characters;
-
_ Matches ==1 arbitrary character;
-
[] can match characters in the set. For example, [ab] will match characters a or B. It can be negated with the off character ^, that is, characters in the set that do not match.
Use Like for wildcard matching.
SELECT *
FROM mytable
WHERE col LIKE '[^AB]%'; -- Any text that does not begin with A and B
Copy the code
Don’t abuse wildcards, they match very slowly at the beginning.
11. Calculation fields
Converting and formatting data on a database server is often much faster than on a client, and less data can be converted and formatted to reduce network traffic.
A computed field usually needs to be aliased using AS, otherwise the field is printed AS a computed expression.
SELECT col1 * col2 AS alias
FROM mytable;
Copy the code
CONCAT() is used to join two fields. Many databases use Spaces to fill a value to a column width, so join results in unnecessary whitespace. TRIM() removes the leading and trailing whitespace.
SELECT CONCAT(TRIM(col1), '('.TRIM(col2), ') ') AS concat_col
FROM mytable;
Copy the code
Xii. Functions
The functions of each DBMS are not the same, so they are not portable. The following are mainly MySQL functions.
summary
Number of letter | Said Ming |
---|---|
AVG() | Returns the average value of a column |
COUNT() | Returns the number of rows in a column |
MAX() | Returns the maximum value of a column |
MIN() | Returns the minimum value of a column |
SUM() | Returns the sum of the values of a column |
AVG() ignores NULL lines.
Use DISTINCT to aggregate different values.
SELECT AVG(DISTINCT col1) AS avg_col
FROM mytable;
Copy the code
Text processing
function | instructions |
---|---|
LEFT() | Character on the left |
RIGHT() | Character on the right |
LOWER() | Convert to lowercase characters |
UPPER() | Converts to uppercase characters |
LTRIM() | Remove the Spaces on the left |
RTRIM() | Remove the Spaces on the right |
LENGTH() | The length of the |
SOUNDEX() | Convert to voice value |
Among other things, SOUNDEX() converts a string into an alphanumeric pattern describing its phonetic representation.
SELECT *
FROM mytable
WHERE SOUNDEX(col1) = SOUNDEX('apple')
Copy the code
Date and time processing
- Date format: YYYY-MM-DD
- Time format: HH:
MM:SS
Number of letter | Said Ming |
---|---|
ADDDATE() | Add a date (day, week, etc.) |
ADDTIME() | Add a time (hour, grade) |
CURDATE() | Return current date |
CURTIME() | Return current time |
DATE() | Returns the date portion of the date time |
DATEDIFF() | Calculate the difference between the two dates |
DATE_ADD() | Highly flexible date manipulation function |
DATE_FORMAT() | Returns a formatted date or time string |
DAY() | Returns the number of days of a date |
DAYOFWEEK() | For a date, return the day of the week |
HOUR() | Returns the hour portion of a time |
MINUTE() | Returns the minute portion of a time |
MONTH() | Returns the month portion of a date |
NOW() | Returns the current date and time |
SECOND() | Returns the second portion of a time |
TIME() | Returns the time portion of a date-time |
YEAR() | Returns the year portion of a date |
mysql> SELECT NOW();
Copy the code
The 2018-4-14 20:25:11Copy the code
Numerical processing
function | instructions |
---|---|
SIN() | sine |
COS() | cosine |
TAN() | tangent |
ABS() | The absolute value |
SQRT() | The square root |
MOD() | remainder |
EXP() | index |
PI() | PI |
RAND() | The random number |
13. Grouping
Put rows with the same data value in the same group.
The same group of data can be processed using a summary function, such as finding the average of the group of data.
The specified group field can be grouped and sorted automatically by the field.
SELECT col, COUNT(*) AS num
FROM mytable
GROUP BY col;
Copy the code
GROUP BY is automatically sorted BY GROUP fields, and ORDER BY can also be sorted BY summary fields.
SELECT col, COUNT(*) AS num
FROM mytable
GROUP BY col
ORDER BY num;
Copy the code
WHERE to filter rows and HAVING to filter groups. Row filtering should precede group filtering.
SELECT col, COUNT(*) AS num
FROM mytable
WHERE col > 2
GROUP BY col
HAVING num > = 2;
Copy the code
Grouping requirements:
- The GROUP BY clause appears after the WHERE clause and before the ORDER BY clause.
- Every field in the SELECT statement except the summary field must be given in the GROUP BY clause;
- NULL rows are grouped separately;
- Most SQL implementations do not support data types with variable length GROUP BY columns.
Subquery
Only one field of data can be returned in a subquery.
The result of a subquery can be used as a filter for a WHRER statement:
SELECT *
FROM mytable1
WHERE col1 IN (SELECT col2
FROM mytable2);
Copy the code
The following statement retrieves the customer’s order quantity, and the subquery executes once for each customer retrieved by the first query:
SELECT cust_name, (SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id)
AS orders_num
FROM Customers
ORDER BY cust_name;
Copy the code
Xv. Connection
Joins are used to JOIN multiple tables, use the JOIN keyword, and condition statements use ON instead of WHERE.
Joins can replace subqueries and are generally more efficient than subqueries.
Column names, computed fields, and table names can be aliased with AS to simplify SQL statements and join the same tables.
In the connection
INNER JOIN, also known as equivalent JOIN, uses the INNER JOIN keyword.
SELECT A.value, B.value
FROM tablea AS A INNER JOIN tableb AS B
ON A.key = B.key;
Copy the code
Instead of explicitly using an INNER JOIN, you can use a plain query and JOIN the columns to be joined in the two tables using an equivalent method in WHERE.
SELECT A.value, B.value
FROM tablea AS A, tableb AS B
WHERE A.key = B.key;
Copy the code
Since the connection
A self-join can be considered a type of inner join, except that the joined table is itself.
A list of employees, including the names of employees and their departments, to find the names of all employees in the same department as Jim.
Subquery version
SELECT name
FROM employee
WHERE department = (
SELECT department
FROM employee
WHERE name = "Jim");
Copy the code
Self-connecting version
SELECT e1.name
FROM employee AS e1 INNER JOIN employee AS e2
ON e1.department = e2.department
AND e2.name = "Jim";
Copy the code
A natural connection
Natural join is to join the same names through the equivalence test, there can be more than one.
The difference between an inner join and a natural join: an inner join provides joined columns, while a natural join automatically joins all the same columns.
SELECT A.value, B.value
FROM tablea AS A NATURAL JOIN tableb AS B;
Copy the code
Outer join
The outer join preserves those rows that are not associated. It is divided into left outer join, right outer join and full outer join. The left outer join is to keep the rows that are not associated with the left table.
Retrieves order information for all customers, including those who do not already have order information.
SELECT Customers.cust_id, Customer.cust_name, Orders.order_id
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
Copy the code
Customers table:
cust_id | cust_name |
---|---|
1 | a |
2 | b |
3 | c |
The orders table:
order_id | cust_id |
---|---|
1 | 1 |
2 | 1 |
3 | 3 |
4 | 3 |
Results:
cust_id | cust_name | order_id |
---|---|---|
1 | a | 1 |
1 | a | 2 |
3 | c | 3 |
3 | c | 4 |
2 | b | Null |
16. Combination query
Use UNION to combine two queries. If the first query returns M rows and the second query returns N rows, the result of the combined query is generally M+N rows.
Each query must contain the same columns, expressions, and aggregation functions.
The default is to remove the same line. If you want to preserve the same line, use UNION ALL.
Only one ORDER BY clause can be contained and must be at the end of the statement.
SELECT col
FROM mytable
WHERE col = 1
UNION
SELECT col
FROM mytable
WHERE col =2;
Copy the code
Xvii. View
A view is a virtual table that contains no data and therefore cannot be indexed.
The operation on the view is the same as the operation on the normal table.
Views have the following benefits:
- Simplify complex SQL operations, such as complex joins;
- Use only part of the data from the actual table;
- Data security is ensured by only giving users the permission to access the view.
- Change the data format and presentation.
CREATE VIEW myview AS
SELECT Concat(col1, col2) AS concat_col, col3*col4 AS compute_col
FROM mytable
WHERE col5 = val;
Copy the code
Stored Procedures
Stored procedures can be thought of as batch processing of a series of SQL operations.
Benefits of using stored procedures:
- Code encapsulation ensures certain security.
- Code reuse;
- Because it is pre-compiled, it has high performance.
Creating a stored procedure on the command line requires a custom delimiter because the command line starts with; Is the end character, and the stored procedure also contains a semicolon, so this part of the semicolon will be mistaken as the end character, resulting in syntax errors.
Contains in, out, and inout parameters.
Assigning values to variables requires the SELECT into statement.
Only one variable can be assigned at a time. Collection operations are not supported.
delimiter //
create procedure myprocedure( out ret int )
begin
declare y int;
select sum(col1)
from mytable
into y;
select y*y into ret;
end //
delimiter ;
Copy the code
call myprocedure(@ret);
select @ret;
Copy the code
19. Cursors
Cursors can be used in stored procedures to move through a result set.
Cursors are primarily used in interactive applications where users need to browse and modify arbitrary rows in a dataset.
Four steps to using a cursor:
- Declare a cursor, which does not actually retrieve the data;
- Open the cursor;
- Data retrieval;
- Close the cursor;
delimiter //
create procedure myprocedure(out ret int)
begin
declare done boolean default 0;
declare mycursor cursor for
select col1 frommytable; # define a continue handler whensqlstate '02000'When this condition occurs, it is executedset done = 1
declare continue handler for sqlstate '02000' set done = 1;
open mycursor;
repeat
fetch mycursor into ret;
select ret;
until done end repeat;
close mycursor;
end //
delimiter ;
Copy the code
20. Trigger
Triggers execute automatically when a table executes the following statements: DELETE, INSERT, UPDATE.
Triggers must specify whether to execute automatically BEFORE or AFTER the statement, using the BEFORE keyword for the previous execution and the AFTER keyword for the subsequent execution. BEFORE is used for data validation and cleansing, and AFTER is used for audit trails to log changes to a separate table.
The INSERT trigger contains a virtual table named NEW.
CREATE TRIGGER mytrigger AFTER INSERT ON mytable
FOR EACH ROW SELECT NEW.col into @result;
SELECT @result; -- Get results
Copy the code
The DELETE trigger contains a virtual table named OLD and is read-only.
The UPDATE trigger contains a virtual table named NEW, where NEW can be modified, and a virtual table named OLD, where OLD is read-only.
MySQL does not allow CALL statements in triggers, that is, stored procedures cannot be called.
21. Business management
Basic terms:
- A transaction is a group of SQL statements;
- Rollback refers to the process of revoking specified SQL statements.
- Commit refers to writing the result of an unstored SQL statement to a database table.
- Savepoints are temporary placeholders set up in a transaction to which you can publish rollback (as opposed to the entire transaction).
The SELECT statement cannot be rolled back, and there is no point in rolling back the SELECT statement. CREATE and DROP statements cannot be rolled back either.
MySQL commits transactions implicitly by default. Each statement executed is treated as a transaction and committed. When a START TRANSACTION statement occurs, implicit commit is turned off; When a COMMIT or ROLLBACK statement is executed, the transaction is automatically closed and implicit COMMIT resumes.
Setting autoCommit to 0 disables automatic commit. The AutoCOMMIT tag is per-connection, not per-server.
If no reservation point is set, ROLLBACK will ROLLBACK to the START TRANSACTION statement. If a reservation point is set and specified in ROLLBACK, it is rolled back to that reservation point.
START TRANSACTION
//.SAVEPOINT delete1
//.ROLLBACK TO delete1
//.COMMIT
Copy the code
22. Character Sets
Basic terms:
- A character set is a collection of letters and symbols;
- Encoded as an internal representation of a character set member;
- The collate character specifies how to compare and is used primarily for sorting and grouping.
In addition to specifying character set and calibration for tables, you can also specify columns:
CREATE TABLE mytable
(col VARCHAR(10) CHARACTER SET latin COLLATE latin1_general_ci )
DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
Copy the code
Collation can be specified when sorting or grouping:
SELECT *
FROM mytable
ORDER BY col COLLATE latin1_general_ci;
Copy the code
23. Permission Management
MySQL account information is stored in the MySQL database.
USE mysql;
SELECT user FROM user;
Copy the code
Create account
The newly created account does not have any permissions.
CREATE USER myuser IDENTIFIED BY 'mypassword';
Copy the code
Changing the Account Name
RENAME USER myuser TO newuser;
Copy the code
Delete the account
DROP USER myuser;
Copy the code
Check the permissions
SHOW GRANTS FOR myuser;
Copy the code
Grant permissions
The account is defined as username@host and username@% uses the default hostname.
GRANT SELECT.INSERT ON mydatabase.* TO myuser;
Copy the code
Remove permissions
GRANT and REVOKE control access at several levels:
- GRANT ALL and REVOKE ALL;
- For the entire database, use ON database.
- For a specific table, use ON database.table;
- Specific columns;
- Specific stored procedures.
REVOKE SELECT.INSERT ON mydatabase.* FROM myuser;
Copy the code
Change password
Encryption must be done using the Password() function.
SET PASSWROD FOR myuser = Password('new_password');
Copy the code
The resources
- Benforta.sql Must Know must know [M]. Posts and Telecommunications Press, 2013.
Resource portal
- Pay attention to [be a gentle program ape] public account
- In [do a tender program ape] public account background reply [Python information] [2020 autumn recruit] can get the corresponding surprise oh!
- Build their own blog address: nightmare back to life blog
“❤️ thank you.”
- Click “like” to support it, so that more people can see this content.
- Share your thoughts with me in the comments section, and record your thought process in the comments section