SQL语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句相关的知识,希望对你有一定的参考价值。
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;
以上是关于SQL语句的主要内容,如果未能解决你的问题,请参考以下文章