前言

SQL语句有以下几个类别:

  • DDL:Data Defination Language(数据定义语言)

CREATE:创建
DROP:删除
ALTER:修改

  • DML:Data Manipulation Language(数据操作语言)

INSERT:插入
DELETE:删除
UPDATE:更新
SELECT:查看

  • DCL:Data Command Language(数据指令语言、权限语言)

GRANT:
REVOKE:

数据库的数据类型:
字符型

定长字符型:CHAR(#), BINARY(#) <--第二个是区分大小写的定长字符型
变长字符型:VARCHAR(#), VARBINARY(#) <--第二个是区分大小写的定长字符型

对象存储:
TEXT:不区分大小写
BLOB:区分字符大小写

数值型

精确数值型
整型:int,详细见下表(来源于网络,如有侵权联系博主)

mysql整数类型.png

十进制:decimal

日期时间型:
日期:DATE
时间:TIME
日期时间:DATETIME
时间戳:TIMESTAMP
年份:YEAR(2), YEAY(4)
近似数值型:
单精度浮点型: float
双精度浮点型: double

修饰符

所有类型适用:

NOT NULL:非空约束
DEFAULT VALUE:设定默认值
PRIMARY KEY:定义主键
UNIQUE KEY:定义唯一键

数值类型适用:

UNSIGNED:无符号整数
AUTO_INCREMENT:自增长

字段修饰符:

待补充


数据库

新建数据库

CREATE DATABASE|SCHEMA [IF NOT EXISTS] DB_NAME;

示例:新建数据库testdb,如果不存在才新建

mysql> CREATE DATABASE IF NOT EXISTS testdb;
mysql> CREATE DATABASE testdb character set = 'utf8';
#表示在建立数据库testdb的同时,指定字符集为uft8;

查看数据库支持的字符集:SHOW CHARACTER SET;

查看数据库支持的排序方式:SHOW COLLATION;

设置字符集:
CHARACTER SET = '字符集'
设置排序规则:
COLLATE 'collate naem'

删除数据库

DROP DATABASES|SCHEMA [IF NOT EXISTS] 'DB_NAME';

示例:删除数据库"testdb"

mysql> DROP DATABASE testdb;

此操作是不可逆转的,一旦删除无法恢复

数据表

新建数据表

CREATE TABLE [IF EXISTS] 'table_name' (col1 type1, col2 type2,...)

col type1
定义类型
PRIMARY KEY(col1,col2...)
定义主键
INDEX(col1,...)
为字段添加索引
UNIQUE KEY(col1,..)
定义唯一键

表选项

ENGINE [=] engine_name
设置存储引擎

ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
指明行格式

SHOW ENGINES
查看支持的存储引擎

示例:新建数据表tbl1,有三个字段,分别是 id name age

mysql> CREATE TABLE tab1 (id INT NOT NULL,name CHAR(10) NOT NULL,age TINYINT);

#新建表的同时把id设置为主键
mysql> CREATE TABLE tab1 (id INT NOT NULL **PRIMARY KEY**,name CHAR(10) NOT NULL,age TINYINT);

删除表

DROP TABLE tab_name;

注意,此操作是不可逆的
数据库的删除操作和Linux相似,不存在回收站这一说法,使用DROP时应当慎之又慎

数据操作命令

SELECT
UPDATE
INSERT
DELETE

INSERT语句

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

示例:表中的字段为id,name,age,添加两条记录

mysql> INSRET INTO tab1 VALUES (1,'张三',28),(2,'李四',20);

insret.png

mysql> INSRET INTO tab1 (id,name) VALUES (3,'李华'),(4,'Tom');
#方式二

INSERT1.png

SELECT语句

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

示例:查找id号大于3的用户

mysql> SELECT * FROM tab1 WHERE id>3;

SELECT1.png

示例:查找name为L开头的用户

mysql> SELECT * FROM tab1 WHERE name LIKE 'L%';

SELECT2.png

UPDATE语句

UPDATE tbl_name SET col1_new_val1,col2=new_val2,... [WHERE clause] [ORDEY BY 'clo_name' [DESC] ] [LIMIT [m,]n]

示例:更新Tom的年龄为50

mysql> UPDATE tab1 SET age=50 WHERE name='Tom';

UPDATE.png

DELETE语句

DELETE FROM tal_name [HWERE clause] [LIMIT [m,]n]

示例:删除Tom用户

mysql> DELETE FROM tab1 WHERE name='Tom';

DELETE.png

不使用WHERE将会删除表中的所有数据!


创建用户账号

CREATE USER 'user'@'host' [IDENTIFIED BY 'password'];
示例:创建一个test用户,允许任何ip登录,密码为123456

mysql> CREATE USER 'test'@'%'  IDENTIFIED BY '123456';

删除用户

DROP USER 'user'@'host';
示例:删除test用户

mysql> DROP USER 'test'@'%';

用户授权

GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [INDETIFIED BY 'password'];

priv_type: ALL(表示所有权限)
db_name.tb_name:
*.*: 表示所有库的所有表
db_name.*: 指定数据库的所有表
db_name.tb_name: 指定库的指定表
db_name.routine_name: 指定库的存储例程

示例:给test用户testdb库所有权限

mysql> GRANT all ON testdb.* TO 'test'@'%';

示例:只给test用户所有表的SELECT权限

mysql> GRANT SELECT ON testdb.* TO 'test'@'%';

查看当前用户权限

SHOW GRANTS FOR 'user'@'host';
查看指定用户的权限
SHOW GRANTS FOR CURRENT_USER;
查看当前用户的权限

撤销权限

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

示例:撤销test用户在testdb所有表的DELETE权限

mysql> REVOKE DELETE ON testdb.* FROM 'test'@'%';

每次修改授权数据库都会自己刷新权限;一般操作用户授权,最好手动刷新一下授权,让系统重读授权信息;
FLUSH PRIVILEGES


END
Last modification:September 30th, 2019 at 08:42 pm
If you think my article is useful to you, please feel free to appreciate