1.DDL 数据定义语言,开发
针对库表对象增删改
create 创库创表
drop 删库删表
alter 修改库表属性
案例1:创建一个数据库,需求如下:
1)库名为edu
2)字符集为utf8
CREATE DATABASE edu DEFAULT CHARACTER SET utf8;
帮助方式:
help create database
show create database 库名
案例2:修改edu库的字符集为utf8mb4
ALTER DATABASE edu DEFAULT CHARACTER SET utf8mb4;
案例3:在edu库中,创建一张表,要求如下:
1)表名 student
2)字段及约束如下:
sn 序号 整形int 主键 非空
name 姓名 字符串varchar(20) 非空
age 年龄 整形int 非空
gender 性别 enum('m','f') 非空 默认为'm'
use edu;
CREATE TABLE student
(
sn int primary key not null,
name varchar(20) not null,
age int not null,
gender enum('m','f') not null default 'm'
);
#通过查询表结构来判断表创建成功
DESC 库名.表名;
案例4:修改student表的属性,需求如下:
1)表名改为stu
ALTER TABLE student RENAME stu;
2)增加一个字段:联系方式tel int not null
#增加一列字段,位置默认最后
ALTER TABLE stu ADD tel int not null;
#在第一列增加字段
ALTER TABLE stu DROP tel;
ALTER TABLE stu ADD tel int not null FIRST;
#在指定列后增加字段(比如在age字段后加)
ALTER TABLE stu DROP tel;
ALTER TABLE stu ADD tel int not null AFTER age;
3)修改姓名的数据类型为char(20)
ALTER TABLE stu MODIFY name char(20) not null;
2.DML 数据操作语言,开发
针对表的内容(数据)增删改
insert 插入数据行
delete 删除数据行
truncate 删除数据行
update 更新数据行
案例1:在edu库的stu表中插入数据,如下:
1,张三,20,1391111222,m
方法一:
INSERT INTO stu(sn,name,age,tel,gender) VALUES(1,'张三',20,1391111222,'m');
方法二:
INSERT INTO stu VALUES(1,'张三',20,1391111222,'m');
方法三:
INSERT INTO stu(sn,name,age,tel) VALUES(1,'张三',20,1391111222);
案例2:在edu库的stu表中插入多行数据,如下:
2,李四,22,1301111222,m
3,小芳,19,1801111222,f
INSERT INTO stu VALUES
(2,'李四',22,1301111222,'m'),
(3,'小芳',19,1801111222,'f')
;
案例2:修改stu表的数据,如下:
1)修改小芳的年龄为18岁
2)修改张三的电话号码为1311111222
UPDATE stu SET age=18 WHERE name='小芳';
UPDATE stu SET tel=1311111222 WHERE name='张三';
案例3:删除stu表中数据sn为3的数据信息
DELETE FROM stu WHERE sn=3;
#删除stu表的所有数据
DELETE FROM stu;
DELETE FROM stu WHERE 1=1;
3.DCL 数据控制语言,运维
grant 授权
revoke 解除授权
GRANT 权限 ON 库名.表名 TO 'user'@'host' IDENTIFIED BY '密码';
注释:
权限: SQL语句的命令字
ALL 表示所有权限
USAGE 表示只能登录的权限
如果有多个权限,用","隔开
用户名: 在MySQL8.0之前的版本,可以通过GRANT来创建用户并授权
在MySQL8.0(含)之后的版本,必须先创建用户,再授权
库名表名可以使用"*"通配所有
主机名:"%" 通配any
默认情况下,MySQL只有root@'localhost'用户,意味着root用户只能本地登录
例1:授权root用户可以远程登录
GRANT ALL on *.* TO root@'%' IDENTIFIED BY '123';
例2:授权tanfei用户可以远程登录10.0.0.51,并对edu库具有所有权限
GRANT ALL ON edu.* TO tanfei@'%' IDENTIFIED BY '123';
# 用户tanfei在10.0.0.1登录数据库的时候只能对edu库具有查询权限
GRANT SELECT ON edu.* TO tanfei@'10.0.0.1' IDENTIFIED BY '123';
实例:企业中如何知道一个用户的权限有哪些?
步骤:
1.先查看mysql库的user表,看该用户有哪些客户端主机列表
select user,host from mysql.user where user='用户名';
2.根据查询到的用户名@主机名 来查询该用户的授权
show grants for '用户名'@'主机名';
REVOKE
REVOKE 权限 ON 库名.表名 FROM 'user'@'host';
4.DQL 数据查询语言,通用
select 查询数据
show 查询属性
SELECT 字段名
FROM 表名
WHERE 条件1 AND 条件2
ORDER BY 排序
GROUP BY 分类;
5.总结
DDL(针对库表的操作)
1.show tables; #查看表
2.show databases; #查看所有库
3.create database 库名 default character set utf8; #创建字符集为utf8的库
4.create table 表名
(
sn int primary key not null,
name varchar(20) not null,
age int not null,
gender enum('m','f') not null default 'm'
); #创建表以及表结构
5.alter database 库名 default character set utf8mb4; #修改库的字符集为utf8mb4
6.alter table 表名 rename 新表名; #修改表名
7.alter table 表名 add 新字段名 约束 约束 约束; #新增字段名以及约束(加在最后)
8.alter table 表名 drop 字段名; #删除字段
9.alter table 表名 add 新字段名 约束 约束 约束 first; #在第一列增加字段
10.alter table 表名 add 新字段名 约束 约束 约束 after 字段名A; #在字段名A后面添加新字段及约束
11.alter table 表名 modify 字段名A 约束 约束 约束; #修改字段名A的约束
DML(针对数据的操作)
1.insert into 表名(字段,字段,字段,字段,字段) values(值,值,值,值,值);
insert into 表名 values(值,值,值,值,值); #往表中增加数据
2.insert into 表名 values
(值,值,值,值,值),
(值,值,值,值,值)
; #往表中插入多条数据
3.update 表名 set 字段=值 where 字段=值; #通过where后的条件匹配数据并修改值
4.delete from 表名 where 字段=值; #通过where后的条件匹配数据并删除
5.delete from 表名;
delete from 表名 where 1=1; #删除表中的所有数据
DCL(授权)
1.grant 权限 on 库名.表名 to '用户名'@'主机名' identified by '密码';
#mysql8.0之前使用 创建用户并授权
2.create user '用户名'@'主机名' identified by '密码';
grant 权限 on 库名.表名 to '用户名'@'主机名'
#mysql8.0(含)之后先创建用户,再授权
3.ALL 表示所有权限 USAGE 表示只能登录的权限
4.库名表名可以使用"*"通配所有
5.主机名:"%" 通配any
6.select user,host from mysql.user where user='用户名'; #查看用户所有的主机
7.show grants for '用户名'@'主机名'; #查看所有特定主机下的用户权限
8.revoke 权限 on 库名.表名 from '用户名'@'主机名'; #取消对应权限
DQL(查询)
1.select 字段名 from 表名 where 条件1 and 条件2 order by 排序 group by 分类;
#从特定的表中查出对应的数据并做出处理