SQL语句分类:

DDL:Data Defination Language 数据定义语言

  CREATE,DROP,ALTER

  创建  删除 修改

DML:Data Maipulation Language 数据修改语言

  INSERT,DELETE,UPDATE,SELECT

  插入  删除  修改   查询

  GRANT:权限新增

  REVOKE:权限删除

数据类型:

字符型:

  定长字符型:CHAR(#)不区分字符大小,BINARY(#)区分字符大小写,#号为可选项,可以指定长度

  变长字符型:VARCHAR(#)不区分字符大小写,VARBINARY(#)区分字符大小写,#号为可选项,可以指定长度

  

  对象存储:

    TEXT:不区分大小

    BLOB:区分字符大小写

  内置类型:

    ENUM:枚举类型

    SET:集合

数值型

  精确数值型:

    整型:int

        tinyint:1byte

        smallint:2bytes

        mediumint:3bytes

        int:4bytes

        bigint:8bytes

    十进制:decimal

 近视数值型:

    单精度浮点型:

      float

    双精度浮点型:

      double

日期时间型

  日期:DATE

  时间:TIME

  日期时间:DATETIME

  时间戳:TIMESTAMP

  年份:YEAR(2),YEAR(4)

修饰符

  所有类型使用:

    NOT NULL,非空约束

    DEFAULT VALUE,设定默认值

    PRIMARY KEY,主键

    UNIQUE KEY,唯一键

  数值型使用:

    UNSIGNED,无符号,即正数

    AUTO_INCREMENT,自增字段


数据库操作语句:

创建数据库

CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';

例:

MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS mydb;
// 此条命令产生的效果为:如果mydb数据库不存在,就创建一个名为mydb的新数据库

删除数据库

DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';

例:

MariaDB [(none)]> DROP DATABASE IF EXISTS mydb;
// 此条命令产生的效果为:如果mydb存在,就删除这个数据库

设置默认数据库

USE DB_NAME;

MariaDB [(none)]> USE mydb;

设置字符集

CHARACTER SET 'CHAR SET NAME';

例:

MariaDB [(none)]> CHARACTER SET gb2312; // 设置字符集为gb2312

查看支持的所有字符集

SHOW CHARACTER SET;

例:

MariaDB [(none)]> SHOW CHARACTER SET;   // 查看可用字符集

设置排序规则

COLLATE 'COLLATE NAME';

例:

MariaDB [(none)]> COLLATE big5_bin;     // 设置排序规则为big5_bin

查看支持的所有排序规则

SHOW COLLATION;

例:

MariaDB [(none)]> SHOW COLLATION;       // 查看支持的所有排序规则

获取命令使用帮助

HELP KEYWORD;

例:

MariaDB [(none)]> HELP CREATE DATABASE;  // 获取CREATE DATABASE命令的相关帮助信息

查看数据库信息:SHOW DATABASES;

查看表信息:SHOW TABLES;

NOTE:删除操作不可逆且不可恢复。


表操作语句:

创建表

CREATE TABLE [IF NOT EXISTS] [db_name.]tb_name (col1 datatype 修饰符,col2 datatype 修饰符...) [ENGINE=''];

例:

MariaDB [mydb]> CREATE TABLE IF NOT EXISTS mytb1 (id int NOT NULL,name varchar
(100) NOT NULL,age int);
// db_name位数据库名,创建表时需要指定表属于哪个数据库,如果设置了默认数据库,则无需使用
此命令
// col1为列名
// datatype为数据类型
// 修饰符有NULL,NOT NULL,PRIMARY KEY,UNIQUE KEY等
//  ENGINE为数据引擎

MariaDB [mydb]>  CREATE TABLE students(id int UNSIGNED NOT NULL PRIMARYKEY,name VARCHAR(20)
 NOT NULL,age Tinyint UNSIGNED);
//  定义id字段为无符号整数,并且要求为非空,且为主键
//  定义name字段为可变字符,长度限制为20,并且要求为非空
//  定义age字段为无符号Tinyint

可以定义单个字段为主键,也可以定义多个字段为主键,只要多个字段联合起来不相同即可

例:

MariaDB [mydb]>  CREATE TABLE tbl2(id int UNSIGNED NOT NULL,name VARCHAR(20) NOT NULL,age 
tinyint UNSIGNED,PRIMARY KEY(id,name));
// PRIMARY KEY(id,name)
// 这里定义id和name同时为主键,只要id+name不重复即可

获取帮助:

MariaDB [mydb]>  HELP CREATE TABLE;


ENGINE即数据库引擎,也称之为表类型,查看表类型列表命令如下:

MariaDB [mydb]> SHOW ENGINES;

表格存储格式:

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


查看表

SHOW TABLES [FROM db_name];

例:

MariaDB [mydb]> SHOW TABLES FROM mydb;

查看表结构

MariaDB [mydb]>  DESC [DB_NAME.]tb_name;

例:

MariaDB [mydb]> DESC mydb.mytb1;

查看表创建命令

MariaDB [mydb]>  SHOW CREATE TBALE tbl_name;

例:

MariaDB [mydb]>  SHOW CREATE TABLE mytb1;

查看表状态:

MariaDB [mydb]>  SHOW TABLE STATUS LIKE 'tbl_name'[\G]

例:

MariaDB [mydb]>  SHOW TABLE STATUS LIKE mytb1 \G;
// \G表示竖排显示

删除表:NOTE:删除操作不可逆且不可恢复。

DROP TABLE [IF EXISTS] tb_name;

例:

MariaDB [mydb]> DROP TABLE IF EXISTS mytb1;


修改表操作

使用ALTER TABLE命令,这个命令下有很多子命令


添加字段

ALTER TABLE tbl_name ADD col1 data_type [FIRST|AFTER col_name]

例:

MariaDB [mydb]> ALTER TABLE students ADD age ENUM('m','f') FIRST;
即在students表中添加一个字段age,其字符类型为枚举型,只能为m或f,且位于第一个字段

ADD子命令还可以单独添加字段的约束

例:

Maria DB [mydb]> ALTER TABLE students ADD UNIQUE KEY(name);

删除字段

ALTER TABLE students DROP COLUMN col_name;

例:

MariaDB [mydb]> ALTER TABLE students DROP COLUMN age;
意为删除students表中的age字段

修改字段名和字段属性:(无法单独修改字段属性)

ALTER TABLE students CHANGE col_name col_name_new data_type options;

例:

MariaDB [mydb]> ALTER TABLE students CHANGE age ages int UNSIGGNED NOT NULL;
意为修改students表的字段age为ages,并且设置类型为int的无符号,不能为空

NOTE:需要注意的是,CHANGE命令修改字段属性时,必须修改字段名,不能只修改字段属性,而不修改字段名,但修改字段名时,可以不修改字段属性。

修改字段属性

ALTER TABLE MODIFY col_name data_type options;

例:

MariaDB [mydb]> ALTER TABLE MODIFY age int;
只修改字段属性


索引:

索引是特殊数据结构,定义在查找时作为查找条件的字段;可加速查询速度,缺点是会占据额外空间

索引可以有额外名称;如果不设置名称,并且是单键索引,那么索引名称默认为字段名

创建索引

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

例:

MariaDB [mydb]> CREATE INDEX myindex ON students (id);
// 这里是为students表的id字段创建索引,且命名为myindex
MariaDB [mydb]> CREATE INDEX myindex2 ON students (age,name);
// 这里是为students表达age和name字段创建联合索引,且命名为myindex2

删除索引

DROP INDEX index_name ON tbl_name;

例:

MariaDB [mydb]> DROP INDEX myindex ON students;
// 这里是删除表students中的名为myindex索引

ALTER TABLE tbl_name DROP INDEX(col_name);

例:

MariaDB [mydb]> ALTER TABLE students DROP INDEX(age);
// 这里是删除表students中的age字段上的索引

添加索引

ALTER TABLE tbl_name ADD INDEX(col_name);

MariaDB [mydb]> ALTER TABLE students ADD INDEX(age);
// 这里是给表students的age字段添加索引

查看索引

SHOW INDEXES FROM [db_name.]tbl_name;

MariaDB [mydb]> SHOW INDEXES FROM mydb.students;
// 这里是显示出mydb数据库下的students表中的所有索引


数据操作:


插入数据

INSERT [INTO] tbl_name [(col_name,...)] (VALUES | VALUE) (VAL1,...),(...),...

例:

MariaDB [mydb]> INSERT INTO students VALUES (1,'li','m'),(2,'wa','f');
可以一次性插入所有字段的数据
MariaDB [mydb]> INSERT INTO students (sid,name) VALUES (3,'zz'),(4,'dd');
也可以插入指定字段的数据

查询数据

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

  ORDER BY 'col_name' 根据col_name升序排序

  ORDER BY 'col_name' DESC 根据col_name降序排序

  ORDER BY 'col_name' DESC LIMIT 4 根据col_name降序排序,只显示4个

  ORDER BY 'col_name' DESC LIMIT 1,2 根据col_name降序排序,并且偏移1个,显示2个

  

  col_name可用'*'指代所有字段

  as:字段别名,col1 AS alias_name

例:

MariaDB [mydb]> select sid AS stuid,name AS stuname FROM students;
查询students表中sid和name的所有字段数据,并将sid临时改名为stusid,将name临时改名为stuname

   操作符:

     (1)<,>,>=,<=,==,!=

     (2)BETWEEN...AND...

      例:

MariaDB [mydb]> SELECT * FROM students WHERE sid>=2 and sid<=4;
MariaDB [mydb]> SELECT * FROM students WHERE sid BETWEEN 2 AND 4;
// 上面两个示例的作用相同,都是删选sid大于等于2,小于等于4的所有数据。

     (3)LIKE

       通配符:% 表示任意长度的任意字符;

           _ 表示任意单个字符;

       例:

MariaDB [mydb]> SELECT * FROM students WHERE name LIKE 'z%';
// 这里表示在students表中查找name字段为z开头的任意长度的任意字符的数据

     (4)RLIKE

       基于正则表达式作字符匹配

      例:

MariaDB [mydb]> SELECT * FROM students WHERE name RLIKE '.*u.*';
// 这里表示在students表中查找name字段中包含u字母的数据

     (5)IS NULL 为空

         IS NOT NULL 为非空

        例:

MariaDB [mydb]> SELECT * FROM students WHERE name IS NULL;
// 这里表示在students表中查找name字段为空的数据
MariaDB [mydb]> SELECT * FROM students WHERE name IS NOT NULL;
// 这里表示在students表中查找name字段为非空的数据

   条件逻辑操作:

    and 与

    or 或

    not 非

   例:

MariaDB [mydb]> SELECT * FROM students WHERE sid >=2 AND sid <= 4;
// 这里表示查找students表中sid小于等于4且大于等于2的数据
MariaDB [mydb]> SELECT * FROM students WHERE sid >=2 OR name == 'zi';
// 这里表示查找students表中sid大于等于2或者name为zi的数据 
MariaDB [mydb]> SELECT * FROM students WHERE NOT sid >=2;
// 这里表示查找students表中sid小于2的数据,即sid>=2取反


删除数据

DELETE FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m],n];

例:

MariaDB [mydb]> DELETE FROM students where sid == 3;
// 这里表示删除students表中sid为3的所有行数据

NOTE:需要注意的是,如果DELETE FROM tbl_name后不接条件语句,那么默认会删除整张表的数据。


更新数据

UPDATE tbl_name SET col1=new_val1,col2=new_val2,...[WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m],n];

例:

MariaDB [mydb]> UPDATE students SET name='zi',age=16 WHERE id == 4;
// 这里表示修改students表中的id为4的行的name字段为zi,age为16


用户帐号及权限管理:

用户帐号格式:USERNAME@HOST

  USERNAME:用户名

  HOST:此用户访问mysqld服务时允许通过哪些主机远程创建连接:其中可以是IP,主机名,通配符(%和_);


创建用户

CREATE USER USERNAME@HOST [IDENTIFIED BY 'PASSWORD'];

例:

MariaDB [mydb]> CREATE USER user1@localhost IDENTIFIED BY 'redhat';
这里表示创建一个用户名为user1且密码为redhat的用户,且此用户只能通过本机登录

删除用户:

DROP USER 'USERNAME@LOCALHOST;

例:

MariaDB [mydb]> DROP USER user1@localhost;
这里表示删除可以通过本机登录的用户user1

用户授权

权限分类:管理,数据库,表,字段,存储例程(存储过程,存储函数,触发器)等;

GRANT priv_type,...ON [object_type] db_name.tb_name TO 'USERNAME@HOST' [IDENTIFIED BY 'PASSWORD'] [WITH GRANT OPTION];

意为:给予指定登录位置的指定用户在指定数据库的指定表中的指定权限;

  选项:

  priv_type:ALL | [PRIVILEGES],ALL表示所有权限

  db_name.tb_name:

    *.*:所有数据库的所有表;

    db_name.*:制定库的所有表;

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

    db_name.routing_name:制定库的存储例程;

  WITH GRANT OPTION:意味着指定用户可以把自己的所有权限转授(复制)到其他的用户;

例:

MariaDB [mydb]> GRANT SELECT,DELETE ON mydb.students TO user1@localhost;
// 这里表示给只能在本机登录的user1用户赋予在mydb数据库中的students表的查询及删除权限

NOTE:需要注意的是,如果用户不存在,这可以在指定用户的时候加上IDENTIFIED BY PASSWORD即可创建新用户并同时指定密码

查看用户权限

SHOW GRANTS FOR USERNAME@HOST;

查看指定用户的权限

SHOW GRANTS FOR CURRENT_USER;

查看当前用户的权限

例:

MariaDB [mydb]> SHOW GRANTS FOR user1@localhost
// 这里表示查看限制本机登录的用户user1的权限

回收用户权限

REVOKE priv_type,...ON db_name.tb_name FROM USERNAME@HOST;

例:

MariaDB [mydb]> REVOKE DELETE ON mydb.students FROM user1@localhost;
// 这里表示从限制本机登录的用户user1权限中回收在mydb数据库中的students表的DELETE权限


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

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

(2)对于不能够或不能及时重读授权表的命令执行后,可手动让MariaDB的服务进程重读授权表;

    重读授权表命令:FLUSH PRIVILEGES;



写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。