From fa0b69ea8faaea56ffe09d8734c9ea012ce1c7d8 Mon Sep 17 00:00:00 2001 From: Yahya Bahsoun Date: Mon, 19 Nov 2018 21:17:42 -0600 Subject: [PATCH] Create mysql.md (#941) Cheatsheet for MySQL --- mysql.md | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 mysql.md diff --git a/mysql.md b/mysql.md new file mode 100644 index 000000000..48c579f7c --- /dev/null +++ b/mysql.md @@ -0,0 +1,162 @@ +--- +title: MySql +--- + ### Create / Delete Database + CREATE DATABASE dbNameYouWant + CREATE DATABASE dbNameYouWant CHARACTER SET utf8 + DROP DATABASE dbNameYouWant + ALTER DATABASE dbNameYouWant CHARACTER SET utf8 + + ### Backup Database to SQL File + mysqldump -u Username -p dbNameYouWant > databasename_backup.sql + +### Restore from backup SQL File + mysql - u Username -p dbNameYouWant < databasename_backup.sql + +### Repair Tables After Unclean Shutdown + mysqlcheck --all-databases + mysqlcheck --all-databases --fast +### Browsing + SHOW DATABASES + SHOW TABLES + SHOW FIELDS FROM table / DESCRIBE table + SHOW CREATE TABLE table + SHOW PROCESSLIST + KILL process_number + + ### Select + SELECT * FROM table + SELECT * FROM table1, table2, ... + SELECT field1, field2, ... FROM table1, table2, ... + SELECT ... FROM ... WHERE condition + SELECT ... FROM ... WHERE condition GROUPBY field + SELECT ... FROM ... WHERE condition GROUPBY field HAVING condition2 + SELECT ... FROM ... WHERE condition ORDER BY field1, field2 + SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC + SELECT ... FROM ... WHERE condition LIMIT 10 + SELECT DISTINCT field1 FROM ... + SELECT DISTINCT field1, field2 FROM ... + + ### 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 + SELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ... + + ### Conditions + field1 = value1 + field1 <> value1 + field1 LIKE 'value _ %' + field1 IS NULL + field1 IS NOT NULL + field1 IS IN (value1, value2) + field1 IS NOT IN (value1, value2) + condition1 AND condition2 + condition1 OR condition2 + +### Insert + INSERT INTO table1 (field1, field2, ...) VALUES (value1, value2, ...) + +### Delete + DELETE FROM table1 / TRUNCATE table1 + DELETE FROM table1 WHERE condition + DELETE FROM table1, table2 FROM table1, table2 WHERE table1.id1 = + table2.id2 AND condition + +### Update + + UPDATE table1 SET field1=new_value1 WHERE condition + UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... WHERE + table1.id1 = table2.id2 AND condition + +### Create / Delete / Modify Table + + *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, ..., + FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA)) + [ON UPDATE|ON DELETE] [CASCADE|SET NULL] + + CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ..., + FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB)) + + CREATE TABLE table IF NOT EXISTS (...) + + CREATE TEMPORARY TABLE table (...) + + *Drop* + DROP TABLE table + DROP TABLE IF EXISTS table + DROP TABLE table1, table2, ... + + *Alter* + 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* + 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 + CREATE TABLE table (..., PRIMARY KEY (field1, field2)) + CREATE TABLE table (..., FOREIGN KEY (field1, field2) REFERENCES table2 + (t2_field1, t2_field2)) + + +### 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') + SET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass') + SET PASSWORD = OLD_PASSWORD('new_pass') + + DROP USER 'user'@'host' + host ‘%’ indicates any host. + + +### 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 + /!\ INT(2) = "2 digits displayed" -- NOT "number with 2 digits max" + + FLOAT(M,D) DOUBLE(M,D) FLOAT(D=0->53) + /!\ 8,3 -> 12345,678 -- NOT 12345678,123! + + 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) + + 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) LONG (max=4Go) + Ex: VARCHAR(32), TINYTEXT, LONGBLOB, MEDIUMTEXT + + ENUM ('value1', 'value2', ...) -- (default NULL, or '' if NOT NULL) + +### Reset Root Password + $ /etc/init.d/mysql stop + $ mysqld_safe --skip-grant-tables + $ mysql # on another terminal + 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