书写顺序

  1. select distinct...from...join...on...where...group by....having...order by....limit....

执行顺序

  1. from...on...join...where...group by...having+聚合函数...select distinct...order by...limit...

基本语法

  1. -- 创建数据库
  2. CREATE DATABASE 数据库名;
  3. -- 删除数据库
  4. drop database 数据库名;
  5. -- 选择数据库
  6. use 数据库名;
  7. -- 创建数据库
  8. CREATE TABLE IF NOT EXISTS `user`(
  9. `id` INT UNSIGNED AUTO_INCREMENT,
  10. `title` VARCHAR(100) NOT NULL,
  11. `author` VARCHAR(40) NOT NULL,
  12. `date` DATE,
  13. PRIMARY KEY ( `id` )
  14. )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  15. -- 删除数据库
  16. DROP TABLE user ;
  17. -- 插入数据
  18. INSERT INTO user ( id, name,...fieldN ) VALUES ( 1, 2,...valueN );
  19. -- 更新数据库
  20. UPDATE user SET id=2, name='mk' where id=1
  21. -- 删除数据
  22. DELETE FROM user WHERE id=1
  23. -- 删除数据库表字段
  24. ALTER TABLE user DROP name;
  25. -- 添加数据库表字段
  26. ALTER TABLE user ADD age INT;
  27. -- 修改数据库表字段类型
  28. ALTER TABLE user MODIFY age CHAR(1);
  29. -- change后跟要【修改的字段 新字段名 类型】
  30. ALTER TABLE user CHANGE age age BIGINT;
  31. -- 删除表字段默认值
  32. ALTER TABLE user ALTER age DROP DEFAULT;
  33. -- 修改数据库引擎
  34. ALTER TABLE user ENGINE = MYISAM;
  35. -- 显示表结构
  36. SHOW COLUMNS FROM user;
  37. -- 修改表名
  38. ALTER TABLE user RENAME TO users;
  39. -- 自增 1开始
  40. ALTER TABLE t AUTO_INCREMENT = 1;

索引语法

-- 创建普通索引
CREATE INDEX indexName ON table_name (column_name);
ALTER table tableName ADD INDEX indexName(columnName);
CREATE TABLE mytable(  
  ID INT NOT NULL,   
  username VARCHAR(16) NOT NULL,  
  INDEX [indexName] (username(length))  
);
-- 删除索引
DROP INDEX [indexName] ON mytable; 
ALTER TABLE testalter_tbl DROP INDEX c;

-- 唯一索引
CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list)
-- 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)
-- 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list)
-- 添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list)
-- 该语句指定了索引为 FULLTEXT ,用于全文索引。

ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
ALTER TABLE testalter_tbl DROP PRIMARY KEY;

-- 显示表索引
SHOW INDEX FROM table_name\G

导出数据

SELECT * FROM user INTO OUTFILE '/tmp/user.sql';
-- 导出数据库
mysqldump -u root -p 数据库名 > database_dump.sql
-- 导出数据库某一个表
mysqldump -u root -p 数据库名 表名 > dump.sql
-- 导出所有数据库
mysqldump -u root -p --all-databases > database_dump.sql

导入数据

mysql -u root -p database_name < dump.txt
-- 远程导入数据
mysqldump -u root -p database_name | mysql -h other-host.com database_name

-- 导入数据
mysql -uroot -p123456 < runoob.sql
-- 执行sql文件
source /home/abc/abc.sql

常用函数

-- concat 凭借字符串
SELECT CONCAT("SQL ", "Gooogle ", "Facebook") AS ConcatenatedString;
-- 返回字符串 s 的前 n 个字符
SELECT LEFT('Gooogle',2) -- Go
-- 将字符串 s 的所有字母变成小写字母
SELECT LOWER('Gooogle') -- gooogle
-- 从字符串 s 的 start 位置截取长度为 length 的子字符串,等同于 SUBSTR(s, start, length)
SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO
SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO

-- 返回当前日期
SELECT CURDATE();
-> 2018-09-19

SELECT CURRENT_DATE();
-> 2018-09-19

-- 返回当前时间
SELECT CURRENT_TIME();
-> 19:59:02

SELECT CURTIME();
-> 19:59:02

-- 计算日期 d1->d2 之间相隔的天数
SELECT DATEDIFF('2001-01-01','2001-02-02')
-> -32