前言
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,详细见下表(来源于网络,如有侵权联系博主)
十进制: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 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);
mysql> INSRET INTO tab1 (id,name) VALUES (3,'李华'),(4,'Tom');
#方式二
SELECT语句
SELECT col1,col2,... FROM tal_name [WHERE clause] [ORDER BY 'co_name'] [LIMIT [m,]n];
表示降序,默认是升序
LIMIT 偏移
字段表示法:
*:所有字段;
:字段别名,col1 AS alias1;
如:select id as uid from 表名;列的id会显示为uid
示例:查找id号大于3的用户
mysql> SELECT * FROM tab1 WHERE id>3;
示例:查找name为L开头的用户
mysql> SELECT * FROM tab1 WHERE name LIKE 'L%';
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';
DELETE语句
DELETE FROM tal_name [HWERE clause] [LIMIT [m,]n]
示例:删除Tom用户
mysql> DELETE FROM tab1 WHERE name='Tom';
创建用户账号
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'];
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
<center>END</center>