1.命令行指令
(1)启动mysql
net START mysql
(2)连接与断开服务器
mysql -h 地址 -P端口 -u 用户名 -p密码
mysql -uroot -pok
2.数据库操作
(1)查看当前数据库
SELECT DATABASE();
(2)显示当前时间,用户名,数据库版本
SELECT NOW(),USER(),VERSION();
(3)创建库
CREATE DATABASE [IF NOT EXISTS] 数据库名
(4)查看已有库
SHOW DATABASES[LIKE 'pattern']
(5)查看当前库信息
SHOW CREATE DATABASE 数据库名
(6)修改库的选项信息
ALTER DATABASE 库名选项信息
(7)选择数据库
USE 数据库名
(8)删除库
DROP DATABASE[IF EXISTS]数据库名
3.表操作
(1)创建表
CREATE[TEMPORARY] TABLE[IF NOT EXISTS][库名.]表名(表的结构定义)[表选项]
注:
1)每个字段必须有数据类型,最后一个字段后不能有逗号
2)temporary表示临时表,会话结束时表自动消失
3)对于字段的定义:
字段名 数据类型 [NOT NULL][NULL][DEFAULT default_value][AUTO_INCREMENT][UNIQUE KEY]
[PRIMARY][KEY][COMMENT'string']
4)表选项
①字符集
CHARSET=charset_name
如果表没有设定,则使用数据库字符集
②存储引擎
ENGINE=engine_name
常用的存储引擎:InnoDB MYISAM MEMORY/HEAP BDB MERGE EXAMPLE CSV MaxDB ARCHIVE
不同的存储引擎在保存表的结构和数据时常采用不同的方式
MYISAM 表文件含义:.frm 表定义,.MYD 表数据,.MYI 表索引
INNODB 表文件含义:.frm 表定义,表空间数据和日志文件
SHOW ENGINES :显示存储引擎的状态信息
SHOW ENGINE 引擎名{LOGS|STATUS}:显示存储引擎的日志和状态信息
(2)查看所有表
SHOW TABLES[LIKE 'patten']
SHOW TABLES FROM 表名
(3)查看表结构
SHOW CREATE TABLE 表名
DESC 表名/DESCRIBE 表名 /EXPLAIN 表名/SHOW COLUMNS FROM 表名[LIKE 'pattern']
SHOW TABLE STATUS [FROM db_name][LIKE 'pattern']
(4)修改表
1)修改表本身的选项
ALTER TABLE 表名 表的选项
ALTER TABLE 表名 ENGINE=MYISAM;
2)对表进行重命名
RENAME TABLE 原表名 TO 新表名
3)修改表的字段结构
ALTER TABLE 表名 操作名
ADD [COLUMN]字段名 --增加字段
ADD PRIMARY KEY(字段名) --创建
ADD UNIQUE [索引名](字段名) --创建唯一索引
ADD INDEX [索引名](字段名) --创建普通索引
DROP [COLUMN]字段名 --删除字段
MODIFY [COLUMN]字段名 字段属性 --支持对字段属性进行修改
CHANGE [COLUMN]原字段名 新字段名 字段属性 --支持对字段名进行修改
DROP PRIMARY KEY --删除主键
DROP INDEX 索引名 --删除索引
DROP FOREIGN KEY 外键名 --删除外键
(5)删除表
DROP TABLE[IF EXISTS]表名
(6)清空表数据
TRUNCATE[TABLE]表名
(7)复制表结构
CREATE TABLE 表名 LIKE 要复制的表名
(8)复制表结构和数据
CREATE TABLE 表名[AS]SELECT * FROM 要复制的表名
4.数据操作
(1)增
INSERT [INTO]表名[(字段列表)]VALUES(值列表)
注:1)如果要插入的值列表包含所有字段并且顺序一致,则可省略字段列表;
2)可以同时插入多条数据记录;
3)字段列表可以用"*"代替,代替所有字段。
(2)删
DELETE FROM 表名[删除条件子句]
没有条件子句的话会删除全部数据
(3)改
UPDATE 表名 SET 字段名=新值[,字段名=新值][更新条件]
5.字符集编码
MySQL,数据库,表,字段均可设置编码。
注:数据编码与客户端编码不需一致
SHOW VARIABLES LIKE ‘character_set_%’ --查看所有字符集编码项
character_set_client --客户端向服务器发送数据时使用的编码
character_set_results --服务端将结果返回给客户端时使用的编码
character_set_connection --连接层编码
SET 变量名=变量值
setcharacter_set_client=gbk;
setcharacter_set_results=gbk;
setcharacter_set_connection=gbk;
SET NAMES GBK; --相当于完成以上三个设置
6.查询语句
SELECT [ALL|DISTINCT] select_expr
FROM ->
WHERE ->
GROUP BY[合计函数]->
HAVING ->
ORDER BY->
LIMIT
(1)select_expr
1)计算公式,函数调用,字段也是表达式
eg:selectstu,29+25,now()FROM tb;
2)可以使用as关键字为每个列这顶别名,适用于简化列标识,避免多个列标识符重复。
eg:select stu+10 AS add10 FROM tb;
(2)from子句
用来标识查询来源
1)可以使用as关键字为表起别名
eg:SELECT * FROM tb1 AS tt,tb2 AS bb;
2)from子句后可以同时出现多个表,多个表会横向叠加到一起,而数据会形成一个笛卡尔积
eg:SELECT * FROM tb1,tb2;
(3)where子句
用于从from获得的数据源中进行筛选。1表示真,0表示假
(4)GROUP by子句
分组后进行排序。升序:asc,降序:desc。
以下聚合函数可与group by一起使用
COUNT 返回不同的非null值数目
SUM 求和
MAX 求最大值
MIN 求最小值
AVG 求平均值
GROUP_CONCAT 字符串连接
(5)having子句
对筛选出的结果进行再次筛选过滤
sql标准要求having子句必须引用group by子句中的列
(6)ORDER by子句
ORDER BY 排序字段/别名排序方式
升序:asc,降序:desc。
(7)limit子句
对处理好的结果进行数量限制
(8)distinct选项
用于去除重复记录
7.多表连接查询
(1)UNION
将多个select查询结果组合成一个结果集合
SELECT ... UNION[ALL|DISTINCT]SELECT ...
(2)子查询
1)FROM 型
from后要求是一个表,必须要给子查询结果取个别名,以简化每一个查询内的条件。
eg:select * FROM (SELECT * FROM tb WHERE id>0)AS subfrom WHERE id>1;
2)WHERE 型
子查询返回一个值
eg:select * FROM tb WHERE money=(SELECT MAX(money) FROM tb);
3)列子查询
使用in或not in子查询,查询结果返回单列
使用exists和not exists条件,返回1或0,常用于判断条件
eg:select column1 FROM t1 WHERE EXISTS(SELECT * FROM t2)
(3)join连接查询
将多个表的字段进行连接,可以指定连接条件
1)内连接(INNER JOIN)
2)交叉连接(CROSS JOIN)
没有条件的内连接
eg:select * FROM tb1 corss JOIN tb2;
3)外连接(OUTER JOIN)
左外连接(LEFT OUTER JOIN): 以左表为基准,以左表来一一匹配,匹配不上,返回左表纪录,右表以null补充
右外连接(RIGHT OUTER JOIN): 以右表为基准,以右表来一一匹配,匹配不上,返回右表纪录,左表以null补充
摘抄自《MySQL数据库应用技术和实战》