SQL:
DDL: CREATE, ALTER, DROP, GRANT, REVOKE
DML: INSERT, DELETE, UPDATE, SELECT
MySQL数据类型
字符型
固定长度:CHAR
可变长度:VARCHAR
mysql: BINARY, VARBINARY - 区分大小写
数值型
精确数值型
int: tinyint, smallint, mediumint, int, bigint
浮点型
float, double
日期时间
date
time
datetime
year(4)
year(2)
内置类型
枚举
ENUM(仍是字符)
集合
SET(元素可自由组合)
类型修饰:
NULL 可为空
NOT NULL 不可为空
DEFAULT 给一个默认值
UNSIGNED 无符号
AUTO_INCREMENT 自增长,限于整形,且字段必须为主键或唯一键
PRIMARY KEY 主键
UNIQUE KEY 唯一键
在MySQL中,数值不可加引号,字符需加引号
DDL:
CREATE DATABASE
CREATE TABLE
CREATE USER
DROP DATABASE
DROP TABLE
DROP USER
GRANT
REVOKE
DML:
INSERT
DELETE
UPDATE
SELECT
创建数据库:
CREATE DATABASE DB_NAME;
DROP DATABASE DB_NAME; - 危险操作,只能靠备份恢复
SHOW DATABASES;
SHOW TABLES;
创建表:
CREATE TABLE [DB_NAME].TABLE_NAME (COLUMN DEFINATION)
COLUMN DEFINATION:
(col1_name data_type [修饰符], col2_name data_type [修饰符]..)
例子:
创建一个学生表:students(SID, Name, Age, Gender, Class)
CREATE TABLE students (
ID INT UNSIGNED NOT NULL UNIQUE KEY AUTO_INCREMENT,
Name CHAR(10) NOT NULL,
Age TINYINT,
Gender ENUM('f', 'm') NOT NULL,
Class VARCHAR(50));
查看表,删除表
DESC TB_NAME; - 查看
DROP TABLE TB_NAME; - 删除
管理用户:
CREATE USER USER_NAME@HOST [INDENTIFIED BY ‘password’];
例如:
CREATE USER 'tuser'@'192.168.%.%' IDENTIFIED BY 'guli123';
HOST表示格式:
IP
网络地址
MySQL的字符通配符:
%: 匹配任意长度的任意字符
_: 匹配任意单个字符
DROP USER USER_NAME@HOST; - 删除用户
创建用户并赋予权限
GRANT 权限列表 ON DB_NAME.TB_NAME TO USERNAME@HOST [INDENTIFIED BY ‘password’];
权限列表:
ALL PRIVILEGES, 可简写为 ALL
DB_NAME:
*:所有库
TB_NAME:
*:所有表
刷新授权表,使得权限修改生效
FLUSH PRIVILEGES; - 刷新授权表,使得权限修改生效
回收权限
REVOKE 权限列表 ON DB_NAME.TB_NAME FROM USERNAME@HOST; - 回收权限
DML:
插入数据:
INSERT INTO tb_name [(col1, col2, ..)] VALUE|VALUES (val1, val2, ..), (val1, val2, ..);
字段和值必须一一对应。
VALUE 和 VALUES 都可以。
INSERT INTO students (Name,Age,Gender,Class) VALUES ('tom',20,'f','class 01'), ('jerry', 23,'f','class 03');
查看刚才插入的数据
SELECT * FROM test.students;
查询数据:
SELECT 字段列表 FROM 表 WHERE 条件子句 ORDER BY 字段;
条件的组合:
and 与
or 或
not 非
条件子句,某个数据等于、大于、不等于..:
=
>
>=
<=
!=
字段值在某个区间内
BETWEEN start_value AND end_value
模糊匹配的条件子句
LIKE:模糊匹配
WHERE Name LIKE “vir%”;
缺点是速度较慢,较消耗资源
RLIKE: 正则匹配
删除数据:
DELETE FROM tb_name WHERE 条件子句 [LIMIT n];
DELETE FROM students WHERE Gender == ‘f’;
更新数据:
UPDATE tb_name SET col1=new_value1 WHERE 条件子句;
几个常用SHOW命令:
查看支持哪些存储引擎:
SHOW ENGINES;
查看表的元数据信息:
SHOW TABLE STATUS;
SHOW TABLE STATUS\G; - 竖排显示
SHOW 输出信息的部分字段说明:
Data_free - 剩余空间,0表示无限制
MySQL存储数据的方式:
创建一张表之后,会先分配一段空间在磁盘上,之后根据需要增加。
Collation - 排序规则
字符集内部,字符的排序有所不同。
比如 abcd..zABCD..Z
aAbBcC..
SHOW CHARACTER SET; - 查看支持的字符集
SHOW COLLATION; - 限制排序规则
SHOW TABLES;
SHOW DATABASES;
MySQL的各种工作属性是通过服务器变量来定义的:
SHOW {GLOBAL|SESSION} VARIABLES [LIKE ‘xxx’]; - 查看全局或者会话的变量
MySQL运行时的诸多统计数据会被记录在状态变量中:
SHOW {GLOBAL|SESSION} STATUS [LIKE ‘xxx’];
MySQL 的日志:
事务日志,二进制日志,查询日志,慢查询日志,错误日志
MySQL中字符的大小写:
1,SQL关键字、函数名不区分大小写
但注意遵循同一种风格,因为缓存命中与此相关。
2,数据库、表、索引、视图名称是否区分大小写,取决于底层的OS和FileSystem
例如,Windows 不区分大小写,Linux区分大小写。
尽量以不区分大小写来对待。
3,存储过程、存储函数、事件调度器不区分字符大小写,但触发器区分
4,表的别名不区分大小写
5,字段中的字符数据,类型为 binary,blob 时,区分大小写,其他字符型不区分大小写。
MySQL中的引号:
MySQL中可用 '',"", ``,及单引号,双引号,反引号,MySQL 并不区别对待他们,意义相同。