书写顺序
select distinct...from...join...on...where...group by....having...order by....limit....
执行顺序
from...on...join...where...group by...having+聚合函数...select distinct...order by...limit...
基本语法
-- 创建数据库CREATE DATABASE 数据库名;-- 删除数据库drop database 数据库名;-- 选择数据库use 数据库名;-- 创建数据库CREATE TABLE IF NOT EXISTS `user`( `id` INT UNSIGNED AUTO_INCREMENT, `title` VARCHAR(100) NOT NULL, `author` VARCHAR(40) NOT NULL, `date` DATE, PRIMARY KEY ( `id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 删除数据库DROP TABLE user ;-- 插入数据INSERT INTO user ( id, name,...fieldN ) VALUES ( 1, 2,...valueN );-- 更新数据库UPDATE user SET id=2, name='mk' where id=1-- 删除数据DELETE FROM user WHERE id=1-- 删除数据库表字段ALTER TABLE user DROP name;-- 添加数据库表字段ALTER TABLE user ADD age INT;-- 修改数据库表字段类型ALTER TABLE user MODIFY age CHAR(1);-- change后跟要【修改的字段 新字段名 类型】 ALTER TABLE user CHANGE age age BIGINT;-- 删除表字段默认值ALTER TABLE user ALTER age DROP DEFAULT;-- 修改数据库引擎ALTER TABLE user ENGINE = MYISAM;-- 显示表结构SHOW COLUMNS FROM user;-- 修改表名ALTER TABLE user RENAME TO users;-- 自增 从1开始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