DDL——数据定义语言

DML——数据操作语言

DCL——数据控制语言

DQL——数据查询语言

一、DDL

1、库操作:

数据库的命名规则:

区分大小写、唯一性、不能使用关键字如”create、select“等、不能使用数字;

查看数据库:

mysql> show databases;
mysql> show create database db_name;
mysql> select database();
mysql> use db_name;
mysql> drop database db_name; 

2、表的操作:

mysql> show tables;
mysql> create table tb_name 字段 (...);
mysql> desc tb_name;
mysql> show create table tb_name\G
mysql> select * from tb_name;
mysql> select 指定字段 from tb_name;

修改表的操作语句:

mysql> alter table tb_name1 rename tb_name2;
mysql> rename table tb_name1 to tb_name2;
#修改表名
mysql> create table add tb_name (新的字段);
#添加新的字段
mysql> alter table tb_name modify 旧字段名 新字段名 数据类型 修饰符;
mysql> alter table tb_name change 旧字段名 新字段名 数据类型 修饰符; 
#modify用来修改字段的修饰符;change可以用来修改字段名称,数据类型,修饰符;单独用来修改数据类型的时候可以将字段名称重复就可以了;
mysql> alter table tb_name drop 字段;   #删除字段

二、DML数据操作语言

1、插入数据:

mysql> insert into tb_name(指定字段) values(数据与指定字段一一对应);  #插入数据
mysql> update tb_name set '新的数据' where '条件';  #更新记录数据
mysql> delete from tb_name where '条件';  #删除数据
mysql> delete from tb_name;  #删除表内所有数据
mysql> truncate table tb_name;  #先删除整表,再创建同一张空表,也叫高效删除
mysql> create table tb_name2 select * from tb_name;  #复制表1的所有数据
mysql> create table tb_name2 select 指定字段 from tb_name1;  #复制表1的指定字段数据
mysql> create table tb_name3 select from tb_name where "2=1";  #复制表结构
mysql> insert into tb_name3 select * from tb_name1 where "指定字段"; #复制记录数据
mysql> drop table tb_name;  #删除表

三、DQL数据库查询语言

1、单表查询

mysql> select * from tb_name;
mysql> select 指定字段 from tb_name;
mysql> select distinct post from tb_name;  #避免重复查询
mysql> select id,name,salary*16 as annual_salary from tb_name;  # 通过运算符查询数据 
mysql> select concat (name,'annual salary',salaey*16) as annual_salary from tb_name;  #连接符查询
mysql> select name from tb_name where salary=5000;   #条件查询
mysql> select name from tb_name where salary>5000 and salary<10000;
mysql> select name from tb_name where salary bot BETWEEN 5000 and 10000;
mysql> select name,id from tb_name where id IS NULL;  #关键字NULL
mysql> select name,salary from tb_name where salary=5000 or salary=10000;
mysql> select name,salary from tb_name where salary IN (5000,10000);  #关键字IN查询
mysql> select name from tb_name order by name;(默认asc)   #排序查询
mysql> select name from tb_name order by name desc;   #倒序查询
mysql> select name from tb_name order by name desc LIMIT 3;  #限制查询次数
mysql> select name from tb_name order by name desc LIMIT 2,3;   #分页查询
mysql> select * from tb_name order by hire_date desc,salary desc;  #按多列排序,先按入职时间,再按薪水排序
mysql> select dep_id,GROUP_CONCAT(name) from tb_name GROUP BY dep_id;  #group by 和group_concat函数一起使用;
#模糊查询特殊字符:(% 所有字符)、(_ 单个字符)
#函数:(count、max、min、avg、database、user、now、sum、password);

2、多表联查:(交叉查询、内连接、外连接)

以上两张表用来演示;

(1)内连接:

#使用where条件:(找出所有部门的员工)
mysql> select emp.emp_name,dep.dept_name from emp,dep where emp.dept_id=dep.dept_id;

+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| tianyun  | hr        |
| tom      | it        |
| jack     | it        |
| alice    | sale      |
| robin    | hr        |
+----------+-----------+
#由上可以看到语句很繁琐,此时可以使用别名简化;例如
mysql> select e.emp_name,d.dept_name from emp e,dep d where e.dept_id=d.dept_id;
#使用inner join连接:
mysql> select e.emp_name,d.dept_name from emp e inner join dep d on e.dept_id=d.dept_id;	#此处的‘inner’可以省略不写

(2)外连接:

左连接LEFT;
mysql> select e.emp_name,d.dept_name from emp e LEFT join dep d on e.dept_id=d.dept_id;
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| tianyun  | hr        |
| robin    | hr        |
| tom      | it        |
| jack     | it        |
| alice    | sale      |
| natasha  | NULL      |
+----------+-----------+
#左连接会找出员工所属的部门,包括没有部门的员工(也就是以前表为主)
右连接RIGHT:
mysql> select e.emp_name,d.dept_name from emp e RIGHT join dep d on e.dept_id=d.dept_id;
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| tianyun  | hr        |
| tom      | it        |
| jack     | it        |
| alice    | sale      |
| robin    | hr        |
| NULL     | fd        |
+----------+-----------+
右连接会找出所有部门包含的员工共,包括空部门(也就是以后表为主);

(3)复合条件连接查询

#例1:以内连接的方式找出公司所有部门中年龄大于25岁的员工
mysql> select e.emp_name,e.age,d.dept_name from emp e inner join dep d on e.dept_id=d.dept_id and e.age>25;
+----------+------+-----------+
| emp_name | age  | dept_name |
+----------+------+-----------+
| robin    |   40 | hr        |
| tom      |   26 | it        |
| jack     |   30 | it        |
+----------+------+-----------+
#例2;以age字段升序方式显示
mysql> select e.emp_name,e.age,d.dept_name from emp e,dep d where e.dept_id=d.dept_id ORDER BY age;
#子查询(将一个查询语句嵌套在另一个查询语句中)
#子查询可以包含:IN、NOT IN、ANY、ALL、EXISTS和NOT EXISTS等关键字
例如:查询hr部门和it部门的员工
mysql> select emp_name,age from emp where dept_id IN (select dept_id from dep where dept_name In ('hr','it'));
+----------+------+
| emp_name | age  |
+----------+------+
| tianyun  |   19 |
| tom      |   26 |
| jack     |   30 |
| robin    |   40 |
+----------+------+
例:查询年龄大于25岁员工所在部门;
mysql> select dept_name from dep where dept_id IN (select dept_id from emp where age>25);
+-----------+
| dept_name |
+-----------+
| it        |
| hr        |
+-----------+
#临时表
mysql> create temporary table t1 select emp_name,age from emp;

四、DCL数据库管理语言

grant——授权

revoke——撤回授权

1、用户管理

创建用户:create user '用户名'@'客户端来源ip地址' identified by '密码';
删除用户:drop user '用户名'@'客户端来源ip地址';
修改用户:rename suer '用户名'@'客户端来源ip地址' to '新用户名'@'客户端来源IP地址';
修改密码:
	第一种方法:set password for '用户名'@'客户端来源ip地址'=password(新密码);
	第二种方法:alter user '用户名'@'客户端来源ip地址' identified by '新密码';
	第三种方法: (忘记密码时,必须使用此方法修改密码)
	update mysql.user set authentication_string=password where user='root' and
host='localhost';
root用户修改自己密码
mysqladmin -uroot -p'123' password '456';
#用户权限相关数据保存在mysql数据库的user表中,所以可以直接对其进行操作;

2、权限管理

grant 权限 on 数据库.表 to '用户名'@'客户端来源ip地址' identified by '密码';
revoke 权限 on 数据库.表 from '用户名'@'客户端来源ip地址'   ---撤回权限
mysql> flush privileges;  #关于权限方面的修改,在修改之后都需要刷新授权表;

3、查看授权信息

查看授权语句:
mysql> show grant for '用户名'@'客户端来源ip地址';
msyql> show grants for ehome@'%';
查看所有库和表的权限,比如*.*,在mysql.user中看
针对具体到库的权限,比如db_name.*,在mysql.db中看
此作者没有提供个人介绍
最后更新于 2024-11-09