SQL语句


DDL: CREATE, DROP, ALTER

DML: INSERT(REPLACE), DELETE, UPDATE, SELECT

DCL: GRANT, REVOKE

数据类型:

字符:

变长字符:VARCHAR(#),VARBINARY(#)

定长字符: CHAR(#), BINARY(#)

内建类型: ENUM, SET

对象: TEXT, BLOB

数值:

精确数值

整型: INT

TINYINT, AMALLINT, INT, MEDIUMINT, BIGINT

十进制:DECIMAL

近似数值

单精度: FLOAT

双精度:  DOUBLE

日期时间型:

DATE:    日期

TIME:   时间

DATATIME: 日期时间

TIMESTAMP: 时间戳

YEAR(2|4):  年份

修饰符:

NOT NULL

DEFAULT VALUE

UNSIGNED 

AUTO_INCREMENT

PRIMARY KEY


DDL:

数据库

CREATE DATABASE [IF NOT EXISTS] db_name;

CHARACTER SET [=] charset

COLLATE [=] collate

SHOW CHARACTER SET;    查看字符集

SHOW COLLATIONS;       查看排序规则

DROP DATABASE [IF EXISTS] db_name;  删除数据库

数据表

CREATE TABLE [IF NOT EXISTS] tb_name (col1 type1,col2,type2,...)

PRIMARY KEY(col1,col2,...)

INDEX(col1,col2,...)

UNIQUE(col1,col2,...)

表选项

ENGINE [=] engine_name

ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

SHOW ENGINES;  查看存储引擎;

获取帮助:

mysql> HELP CREATE TABLE;

查看创建命令:

SHOW CREATE TABLE tb_name;

查看表状态:

SHOW TABLE STATUS LIKE 'tb_name'\G

删除表:

DROP TABLE [IF EXISTS] tb_name;

修改表:

ALTER TABLE tb_name;

字段:

添加字段: ADD

ADD col1 data_type [FIRST | AFTER col_name]

删除字段: DROP

修改字段: ALTER ,CHANGE,MODIFY

改字段名称: CHANGE

改属性定义:  MODIFY

索引:

添加索引: add

删除索引:  drop {INDEX} INDEX_NAME;

表选项


查看表上的索引:

SHOW INDEXES FROM [db_name.]tb_name;

删除索引:

ALTER TABLE tb_name DROP INDEX index_name;


索引:

索引是一种特殊数据结构; 定义在查找时作为查找条件的字段; 

索引,要有索引名称;

创建索引:

CREATE INDEX index_name ON tb_name(index_col_name,...);

删除索引:

DROP INDEX index_name ON tb_name;

DML: 

INSERT :

INSERT [INTO] tbl_name [(col_name,...)]{VALUES | VALUE}(val1,...)


例:

#INSERT INTO tb1 VALUES (1,'yanguo','m'),(2,'xiaolongnv','f');

#INSERT INTO tb1 (id,name) VALUES (3,'zhangwuji'),(4,'zhaomin');

DELETE:

DELETE FROM tbl_name [WHERE where_condition]

例:

DELETE FROM tb1 WHERE id=3;

    

SELECT:

SELECT col1,col2,... FROM tb_name;

SELECT col1,col2,... FROM tb_name [WHERE clause][ORDER BY 'col_name'][LIMIT [m,]n];

字段表示法:

* : 表示所有字段

as : 字段别名, col1 AS alias1

WHERE clase:

操作符

<, > ,==,>=,<=,!=

BETWEEN ... AND... (在..和..之间)

LIKE:

% 任意长度的任意字符

— 任意单个字符

RLIKE:

正则表达式,不建议使用;

条件逻辑操作:

and 

or

not

例:

SELECT * FROM tb1;

SELECT * FROM tb1 WHERE id <3;

SELECT * FROM tb1 WHERE gender IS NULL;

SELECT * FROM tb1 ORDER BY id DESC;

SELECT * FROM tb1 WHERE id BETWEEN 2 AND 4;

SELECT * FROM tb1 WHERE name LIKE 'z%';

SELECT * FROM tb1 WHERE name LIKE 'z%';



UPDATE

UPDATE tb_name SET col1=new-val1,col2=new_val2,... [WHERE clause]

注意:后面一定要指定条件WHERE,不然会更改整个表;

例:

UPDATE tb1 SET gender='f' WHERE id=4;



用户账号及权限管理:


用户账号: ‘user’@'host'

user: 用户名

host: 此用户访问mysql服务时允许通过哪些主机远程创建连接;

IP, 网络地址, 主机名, 通配符(%和_);

禁止检查主机名

my.cnf [mysqld]

skip_name_resove = yes  跳过主机名解析

创建用户

CREATE USER 'username'@'host' [IDENTIFIED BY 'passwd'];

例:

CREATE USER 'candy'@'%' IDENTIFIED BY 'candy';

SELECT User,Host,Password FROM mysql.user;

删除用户:

DROP USER ‘username’@'host';

授权:

权限: 管理权限,数据库,表,字段,存储例程

GRANT priv_type,...ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'passwd']

[with option];

priv_type: ALL [PRIVILEGES]

db_name.tb_name:

*.* 所有库的所有表;

db_name.* 指定库的所有表;

db_name.tb_name: 指定库的指定表;

db-name.routine_name: 指定库的存储例程;

查看指定用户获得的授权:

SHOW GRANTS FOR 'user'@'host';

 

查看当前用户的授权:

SHOW GRANTS FOR CURRENT_USER;

撤消授权:

REVOKE priv_type,... ON db_name.tb_name FROM 'user'@'host';

注意:mariaDB服务进程启动时会读取mysql库中的所有授权表至内存中;

1.GRANT或REVOKE等执行权限操作会保存于表中,mariadb的服务进程会自动重读授权表;

2.对于不能够或不能及时重读授权表的命令,可手动让mariadb的服务进程重读授权表;

mysql> flush privileges;