Merge pull request #968 from rstacruz/mysql-formatting
mysql: Update formatting
This commit is contained in:
commit
b2b544e9bd
327
mysql.md
327
mysql.md
|
@ -1,163 +1,266 @@
|
||||||
---
|
---
|
||||||
title: MySql
|
title: MySQL
|
||||||
|
updated: 2018-12-25
|
||||||
|
layout: 2017/sheet
|
||||||
category: Databases
|
category: Databases
|
||||||
---
|
---
|
||||||
|
|
||||||
### Create / Delete Database
|
### Create / Delete Database
|
||||||
CREATE DATABASE dbNameYouWant
|
|
||||||
CREATE DATABASE dbNameYouWant CHARACTER SET utf8
|
```sql
|
||||||
DROP DATABASE dbNameYouWant
|
CREATE DATABASE dbNameYouWant
|
||||||
ALTER DATABASE dbNameYouWant CHARACTER SET utf8
|
CREATE DATABASE dbNameYouWant CHARACTER SET utf8
|
||||||
|
DROP DATABASE dbNameYouWant
|
||||||
|
ALTER DATABASE dbNameYouWant CHARACTER SET utf8
|
||||||
|
```
|
||||||
|
|
||||||
### Backup Database to SQL File
|
### Backup Database to SQL File
|
||||||
mysqldump -u Username -p dbNameYouWant > databasename_backup.sql
|
|
||||||
|
```bash
|
||||||
|
mysqldump -u Username -p dbNameYouWant > databasename_backup.sql
|
||||||
|
```
|
||||||
|
|
||||||
### Restore from backup SQL File
|
### Restore from backup SQL File
|
||||||
mysql - u Username -p dbNameYouWant < databasename_backup.sql
|
|
||||||
|
```bash
|
||||||
|
mysql - u Username -p dbNameYouWant < databasename_backup.sql
|
||||||
|
```
|
||||||
|
|
||||||
### Repair Tables After Unclean Shutdown
|
### Repair Tables After Unclean Shutdown
|
||||||
mysqlcheck --all-databases
|
|
||||||
mysqlcheck --all-databases --fast
|
```bash
|
||||||
|
mysqlcheck --all-databases
|
||||||
|
mysqlcheck --all-databases --fast
|
||||||
|
```
|
||||||
|
|
||||||
### Browsing
|
### Browsing
|
||||||
SHOW DATABASES
|
|
||||||
SHOW TABLES
|
```sql
|
||||||
SHOW FIELDS FROM table / DESCRIBE table
|
SHOW DATABASES
|
||||||
SHOW CREATE TABLE table
|
SHOW TABLES
|
||||||
SHOW PROCESSLIST
|
SHOW FIELDS FROM table / DESCRIBE table
|
||||||
KILL process_number
|
SHOW CREATE TABLE table
|
||||||
|
SHOW PROCESSLIST
|
||||||
|
KILL process_number
|
||||||
|
```
|
||||||
|
|
||||||
### Select
|
### Select
|
||||||
SELECT * FROM table
|
|
||||||
SELECT * FROM table1, table2, ...
|
```sql
|
||||||
SELECT field1, field2, ... FROM table1, table2, ...
|
SELECT * FROM table
|
||||||
SELECT ... FROM ... WHERE condition
|
SELECT * FROM table1, table2, ...
|
||||||
SELECT ... FROM ... WHERE condition GROUPBY field
|
SELECT field1, field2, ... FROM table1, table2, ...
|
||||||
SELECT ... FROM ... WHERE condition GROUPBY field HAVING condition2
|
SELECT ... FROM ... WHERE condition
|
||||||
SELECT ... FROM ... WHERE condition ORDER BY field1, field2
|
SELECT ... FROM ... WHERE condition GROUPBY field
|
||||||
SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC
|
SELECT ... FROM ... WHERE condition GROUPBY field HAVING condition2
|
||||||
SELECT ... FROM ... WHERE condition LIMIT 10
|
SELECT ... FROM ... WHERE condition ORDER BY field1, field2
|
||||||
SELECT DISTINCT field1 FROM ...
|
SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC
|
||||||
SELECT DISTINCT field1, field2 FROM ...
|
SELECT ... FROM ... WHERE condition LIMIT 10
|
||||||
|
SELECT DISTINCT field1 FROM ...
|
||||||
|
SELECT DISTINCT field1, field2 FROM ...
|
||||||
|
```
|
||||||
|
|
||||||
### Select - Join
|
### Select - Join
|
||||||
SELECT ... FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition
|
|
||||||
SELECT ... FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition
|
```sql
|
||||||
SELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ...
|
SELECT ... FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition
|
||||||
|
SELECT ... FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition
|
||||||
|
SELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ...
|
||||||
|
```
|
||||||
|
|
||||||
### Conditions
|
### Conditions
|
||||||
field1 = value1
|
|
||||||
field1 <> value1
|
```sql
|
||||||
field1 LIKE 'value _ %'
|
field1 = value1
|
||||||
field1 IS NULL
|
field1 <> value1
|
||||||
field1 IS NOT NULL
|
field1 LIKE 'value _ %'
|
||||||
field1 IS IN (value1, value2)
|
field1 IS NULL
|
||||||
field1 IS NOT IN (value1, value2)
|
field1 IS NOT NULL
|
||||||
condition1 AND condition2
|
field1 IS IN (value1, value2)
|
||||||
condition1 OR condition2
|
field1 IS NOT IN (value1, value2)
|
||||||
|
condition1 AND condition2
|
||||||
|
condition1 OR condition2
|
||||||
|
```
|
||||||
|
|
||||||
### Insert
|
### Insert
|
||||||
INSERT INTO table1 (field1, field2, ...) VALUES (value1, value2, ...)
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO table1 (field1, field2, ...) VALUES (value1, value2, ...)
|
||||||
|
```
|
||||||
|
|
||||||
### Delete
|
### Delete
|
||||||
DELETE FROM table1 / TRUNCATE table1
|
|
||||||
DELETE FROM table1 WHERE condition
|
```sql
|
||||||
DELETE FROM table1, table2 FROM table1, table2 WHERE table1.id1 =
|
DELETE FROM table1 / TRUNCATE table1
|
||||||
table2.id2 AND condition
|
DELETE FROM table1 WHERE condition
|
||||||
|
DELETE FROM table1, table2 FROM table1, table2 WHERE table1.id1 =
|
||||||
|
table2.id2 AND condition
|
||||||
|
```
|
||||||
|
|
||||||
### Update
|
### Update
|
||||||
|
|
||||||
UPDATE table1 SET field1=new_value1 WHERE condition
|
```sql
|
||||||
UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... WHERE
|
UPDATE table1 SET field1=new_value1 WHERE condition
|
||||||
table1.id1 = table2.id2 AND condition
|
UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... WHERE
|
||||||
|
table1.id1 = table2.id2 AND condition
|
||||||
|
```
|
||||||
|
|
||||||
### Create / Delete / Modify Table
|
### Create / Delete / Modify Table
|
||||||
|
|
||||||
*Create*
|
#### Create
|
||||||
CREATE TABLE table (field1 type1, field2 type2, ...)
|
|
||||||
CREATE TABLE table (field1 type1, field2 type2, ..., INDEX (field))
|
|
||||||
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1))
|
|
||||||
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1,
|
|
||||||
field2))
|
|
||||||
|
|
||||||
CREATE TABLE table1 (fk_field1 type1, field2 type2, ...,
|
```sql
|
||||||
FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA))
|
CREATE TABLE table (field1 type1, field2 type2, ...)
|
||||||
[ON UPDATE|ON DELETE] [CASCADE|SET NULL]
|
CREATE TABLE table (field1 type1, field2 type2, ..., INDEX (field))
|
||||||
|
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1))
|
||||||
|
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1,
|
||||||
|
field2))
|
||||||
|
```
|
||||||
|
|
||||||
CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ...,
|
```sql
|
||||||
FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB))
|
CREATE TABLE table1 (fk_field1 type1, field2 type2, ...,
|
||||||
|
FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA))
|
||||||
|
[ON UPDATE|ON DELETE] [CASCADE|SET NULL]
|
||||||
|
```
|
||||||
|
|
||||||
CREATE TABLE table IF NOT EXISTS (...)
|
```sql
|
||||||
|
CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ...,
|
||||||
|
FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB))
|
||||||
|
```
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE table (...)
|
```sql
|
||||||
|
CREATE TABLE table IF NOT EXISTS (...)
|
||||||
|
```
|
||||||
|
|
||||||
*Drop*
|
```sql
|
||||||
DROP TABLE table
|
CREATE TEMPORARY TABLE table (...)
|
||||||
DROP TABLE IF EXISTS table
|
```
|
||||||
DROP TABLE table1, table2, ...
|
|
||||||
|
|
||||||
*Alter*
|
#### Drop
|
||||||
ALTER TABLE table MODIFY field1 type1
|
|
||||||
ALTER TABLE table MODIFY field1 type1 NOT NULL ...
|
|
||||||
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1
|
|
||||||
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL ...
|
|
||||||
ALTER TABLE table ALTER field1 SET DEFAULT ...
|
|
||||||
ALTER TABLE table ALTER field1 DROP DEFAULT
|
|
||||||
ALTER TABLE table ADD new_name_field1 type1
|
|
||||||
ALTER TABLE table ADD new_name_field1 type1 FIRST
|
|
||||||
ALTER TABLE table ADD new_name_field1 type1 AFTER another_field
|
|
||||||
ALTER TABLE table DROP field1
|
|
||||||
ALTER TABLE table ADD INDEX (field);
|
|
||||||
|
|
||||||
*Change field order*
|
```sql
|
||||||
ALTER TABLE table MODIFY field1 type1 FIRST
|
DROP TABLE table
|
||||||
ALTER TABLE table MODIFY field1 type1 AFTER another_field
|
DROP TABLE IF EXISTS table
|
||||||
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 FIRST
|
DROP TABLE table1, table2, ...
|
||||||
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 AFTER
|
```
|
||||||
another_field
|
|
||||||
|
#### Alter
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ALTER TABLE table MODIFY field1 type1
|
||||||
|
ALTER TABLE table MODIFY field1 type1 NOT NULL ...
|
||||||
|
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1
|
||||||
|
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL ...
|
||||||
|
ALTER TABLE table ALTER field1 SET DEFAULT ...
|
||||||
|
ALTER TABLE table ALTER field1 DROP DEFAULT
|
||||||
|
ALTER TABLE table ADD new_name_field1 type1
|
||||||
|
ALTER TABLE table ADD new_name_field1 type1 FIRST
|
||||||
|
ALTER TABLE table ADD new_name_field1 type1 AFTER another_field
|
||||||
|
ALTER TABLE table DROP field1
|
||||||
|
ALTER TABLE table ADD INDEX (field);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Change field order
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ALTER TABLE table MODIFY field1 type1 FIRST
|
||||||
|
ALTER TABLE table MODIFY field1 type1 AFTER another_field
|
||||||
|
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 FIRST
|
||||||
|
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 AFTER
|
||||||
|
another_field
|
||||||
|
```
|
||||||
|
|
||||||
### Keys
|
### Keys
|
||||||
CREATE TABLE table (..., PRIMARY KEY (field1, field2))
|
|
||||||
CREATE TABLE table (..., FOREIGN KEY (field1, field2) REFERENCES table2
|
|
||||||
(t2_field1, t2_field2))
|
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE table (..., PRIMARY KEY (field1, field2))
|
||||||
|
CREATE TABLE table (..., FOREIGN KEY (field1, field2) REFERENCES table2
|
||||||
|
(t2_field1, t2_field2))
|
||||||
|
```
|
||||||
|
|
||||||
### Users and Privileges
|
### Users and Privileges
|
||||||
GRANT ALL PRIVILEGES ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
|
|
||||||
GRANT SELECT, INSERT, DELETE ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
|
|
||||||
REVOKE ALL PRIVILEGES ON base.* FROM 'user'@'host'; -- one permission only
|
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; -- all permissions
|
|
||||||
|
|
||||||
SET PASSWORD = PASSWORD('new_pass')
|
```sql
|
||||||
SET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass')
|
GRANT ALL PRIVILEGES ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
|
||||||
SET PASSWORD = OLD_PASSWORD('new_pass')
|
GRANT SELECT, INSERT, DELETE ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
|
||||||
|
REVOKE ALL PRIVILEGES ON base.* FROM 'user'@'host'; -- one permission only
|
||||||
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; -- all permissions
|
||||||
|
```
|
||||||
|
|
||||||
DROP USER 'user'@'host'
|
```sql
|
||||||
host ‘%’ indicates any host.
|
SET PASSWORD = PASSWORD('new_pass')
|
||||||
|
SET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass')
|
||||||
|
SET PASSWORD = OLD_PASSWORD('new_pass')
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DROP USER 'user'@'host'
|
||||||
|
```
|
||||||
|
|
||||||
|
Host ‘%’ indicates any host.
|
||||||
|
|
||||||
### Main Data Types
|
### Main Data Types
|
||||||
TINYINT (1o: -217+128) SMALLINT (2o: +-65 000)
|
|
||||||
MEDIUMINT (3o: +-16 000 000) INT (4o: +- 2 000 000 000)
|
|
||||||
BIGINT (8o: +-9.10^18)
|
|
||||||
|
|
||||||
Precise interval: -(2^(8*N-1)) -> (2^8*N)-1
|
```sql
|
||||||
/!\ INT(2) = "2 digits displayed" -- NOT "number with 2 digits max"
|
TINYINT (1o: -217+128)
|
||||||
|
SMALLINT (2o: +-65 000)
|
||||||
|
MEDIUMINT (3o: +-16 000 000)
|
||||||
|
INT (4o: +- 2 000 000 000)
|
||||||
|
BIGINT (8o: +-9.10^18)
|
||||||
|
```
|
||||||
|
|
||||||
FLOAT(M,D) DOUBLE(M,D) FLOAT(D=0->53)
|
```sql
|
||||||
/!\ 8,3 -> 12345,678 -- NOT 12345678,123!
|
Precise interval: -(2^(8*N-1)) -> (2^8*N)-1
|
||||||
|
```
|
||||||
|
|
||||||
TIME (HH:MM) YEAR (AAAA) DATE (AAAA-MM-JJ) DATETIME (AAAA-MM-JJ HH:MM; années 1000->9999)
|
⚠ INT(2) = "2 digits displayed" -- NOT "number with 2 digits max"
|
||||||
TIMESTAMP (like DATETIME, but 1970->2038, compatible with Unix)
|
|
||||||
|
|
||||||
VARCHAR (single-line; explicit size) TEXT (multi-lines; max size=65535) BLOB (binary; max size=65535)
|
```sql
|
||||||
Variants for TEXT&BLOB: TINY (max=255) MEDIUM (max=~16000) LONG (max=4Go)
|
FLOAT(M,D)
|
||||||
Ex: VARCHAR(32), TINYTEXT, LONGBLOB, MEDIUMTEXT
|
DOUBLE(M,D)
|
||||||
|
FLOAT(D=0->53)
|
||||||
|
```
|
||||||
|
|
||||||
ENUM ('value1', 'value2', ...) -- (default NULL, or '' if NOT NULL)
|
⚠ 8,3 -> 12345,678 -- NOT 12345678,123!
|
||||||
|
|
||||||
|
```sql
|
||||||
|
TIME (HH:MM)
|
||||||
|
YEAR (AAAA)
|
||||||
|
DATE (AAAA-MM-JJ)
|
||||||
|
DATETIME (AAAA-MM-JJ HH:MM; années 1000->9999)
|
||||||
|
TIMESTAMP (like DATETIME, but 1970->2038, compatible with Unix)
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
VARCHAR (single-line; explicit size)
|
||||||
|
TEXT (multi-lines; max size=65535)
|
||||||
|
BLOB (binary; max size=65535)
|
||||||
|
```
|
||||||
|
|
||||||
|
Variants for TEXT&BLOB: `TINY` (max=255), `MEDIUM` (max=~16000), and `LONG` (max=4Go). Ex: `VARCHAR(32)`, `TINYTEXT`, `LONGBLOB`, `MEDIUMTEXT`
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ENUM ('value1', 'value2', ...) -- (default NULL, or '' if NOT NULL)
|
||||||
|
```
|
||||||
|
|
||||||
### Reset Root Password
|
### Reset Root Password
|
||||||
$ /etc/init.d/mysql stop
|
|
||||||
$ mysqld_safe --skip-grant-tables
|
```bash
|
||||||
$ mysql # on another terminal
|
$ /etc/init.d/mysql stop
|
||||||
mysql> UPDATE mysql.user SET password=PASSWORD('new_pass') WHERE user='root';
|
```
|
||||||
## Switch back to the mysqld_safe terminal and kill the process using Control + \
|
|
||||||
$ /etc/init.d/mysql start</code>
|
```bash
|
||||||
|
$ mysqld_safe --skip-grant-tables
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ mysql # on another terminal
|
||||||
|
mysql> UPDATE mysql.user SET password=PASSWORD('new_pass') WHERE user='root';
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
## Switch back to the mysqld_safe terminal and kill the process using Control + \
|
||||||
|
$ /etc/init.d/mysql start
|
||||||
|
```
|
||||||
|
|
||||||
|
Your commands may vary depending on your OS.
|
||||||
|
|
Loading…
Reference in New Issue