sql 语言分类
常用的SQL的语言类型有:DCL(数据库管理) DDL(数据定义) DML(数据操作) TCL(事务语句)
DCL (Date Control Language)
1. 建立数据库账号:create user (help create user 查看使用方法)
- 建立程序使用的数据库账号:
查看插件show plugins;
CREATE USER mc_test@'192.168.1.%' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 1;
CREATE USER test_uesr@'192.168.%.%' IDENTIFIED WITH 'mysql_native_password' BY '123456' WITH MAX_USER_CONNECTIONS 100;
2. 对用户授权:grant
-
MySQL的常用权限
权限名称 说明 Insert 向表中插入数据的权限 Delete 删除表中数据的权限 Update 修改表中数据的权限 Select 查询表中数据的权限 Execute 执行存储过程的权限 -
查看权限列表
SHOW PRIVILEGES; show privileges\G
-
授权例子
- 给用户test_user授予mysql.user表上的user和host列的查询权限
GRANT select(user, host) on mysql.user to test_user@'192.168.1.%';
- 给用户test_user授予mysql.user表所有列的查询权限
GRANT select on mysql.user to test_user@'192.168.1.%';
- 给用户test_user授予mysql库下所有表所有列的查询和插入权限
GRANT select,insert on mysql.* to test_user@'192.168.1.%';
- 给用户授予对imc_db下的所有表的 所有权限
grant all privileges on imc_db.* to imc_user@'192.168.1.%';
- 给用户test_user授予mysql.user表上的user和host列的查询权限
-
GRANT命令的注意事项
- 使用grant授权的数据库账号必须存在
- 用户使用grant命令授权必需具有grant option 的权限
- 获取命令帮助
\h grant
3. 收回用户权限:revoke
- 授予test_user 对mysql数据库下所有表的 增删改查 权限
GRANT select,insert,delete,update ON mysql.* TO test_uesr@'192.168.1.%';
- 收回test_user 对mysql数据库下所有表的 增删改 权限
REVOKE insert,delete,update ON mysql.* FROM test_uesr@'192.168.1.%';
DDL (Data Definition Language) 创建数据库对象
- 建立/修改/删除数据库:create/alter/drop database
- 建立/修改/删除数据表:create/alter/drop table
- 建立/删除索引:create/drop index
- 清空表:truncate table
- 重命名:rename table
- 建立/修改/删除视图:create/alter/drop view
1. 创建数据库
CREATE DATABASE dba;
2. 创建表
SHOW CREATE TABLE imc_class;
CREATE TABLE `imc_class` (
`class_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT '课程分类ID',
`class_name` varchar(10) NOT NULL DEFAULT '' COMMENT '分类名称',
`add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '填加时间',
PRIMARY KEY (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='课程分类';
3. 创建索引
CREATE INDEX index_name on table1_name(index_col_name,)
DROP INDEX index_name ON tal_name
CREATE UNIQUE INDEX uqx_classname ON imc_class(class_name);
4. 清空表
TRUNCATE TABLE imc_db;
5. 重命名
RENAME TABLE imc_db TO bak_imc_db;
DML(Date Manipulation Language)
- 新增表中的数据:
insert into
- 删除表中的数据:
delete
- 修改表中的数据:
update
- 查询表中的数据:
select
1. INSERT 插入数据语句 https://www.runoob.com/sql/sql-insert.html
USE dba;
INSERT INTO
imc_class(class_name)
VALUES("Python"), ("GO");
2. SELECT 编写查询语句的思路
- 首先要确定要获取的数据存在哪些表中: 确定FROM子句
- 其次要确定要获取表中哪些列:确定select子句
- 确定是否要对表中数据进行过滤:确定where子句
2.1 MySQL的比较运算符
比较运算符 | 说明 |
---|---|
= > < >= <= <> != | <> 和 != 都表示不等于 |
BETWEEN min AND max | 列的值大于等于最小值, 小于等于最大值 |
IS NULL , IS NOT NULL | 判断列的值是否为NULL |
LIKE , NOT LIKE | %代表任何数量的字符串, _代表任何一个字符 |
IN , NOT IN | 判断列的值是否在指定的范围内 |
-
学习人数大于1000人的课程都有哪些?
SELECT title, study_cnt FROM imc_course WHERE study_cnt>1000;
-
学习人数大于等于1000人并且小于等于2000人的课程都有哪些?
SELECT title, study_cnt FROM imc_course WHERE study_cnt BETWEEN 1000 AND 2000;
-
学习人数不为空(NULL)的课程都有哪些?
SELECT title, study_cnt FROM imc_course WHERE study_cnt IS NOT NULL;
-
查询出课程表中课题含有 MYSQL 的课程标题
SELECT title FROM imc_course WHERE title LIKE "%MYSQL%";
-
课程id为 1,3,5,7,9 的课程
SELECT course_id, title FROM imc_course WHERE course_id IN (1, 3, 5, 7, 9);
2.2 MySQL的逻辑运算符
如何合并where子句中的多个过滤条件?
逻辑运算符 | 说明 |
---|---|
AND, && | AND 两边的表达式都为真时,返回结果才为真 |
OR, || | OR 两边的表达式有一条为真时,返回结果就为真 |
XOR | XOR 两边的表达式一真一假时返回真,两真两假返回假 |
注意: