MySQL入门
- Structured Query Language:结构化查询语言,定义了操作关系型数据库的规则
1.1.通用语法
- SQL语句可以单行或多行书写,以分号标记结尾
- 可使用空格或缩进增强SQL语句的可读性
- MySQL数据库的SQL语句不区分大小写,但关键字建议使用大写
- 注释方法
- 单行注释:
SQL语句; -- 单行注释
SQL语句; #单行注释
- 多行注释:
SQL语句; /* 多行注释 */
- 单行注释:
1.2.SQL分类
- DDL:数据定义语言,用于定义数据库对象,直接操作数据库与表对象
- DML:数据操作语言,用于操作数据库中表的数据
- DQL:数据查询语言,用于查询数据库中表的数据
- DCL;数据控制语言,用于定义数据库的访问权限,安全级别及创建用户
1.3.DDL:数据库对象操作
1.操作数据库:CRUD
- C(Create):创建
- 创建数据库 :
create database (判断存在:if not exists) dbname (设定字符集:character set 字符集类型);
- 创建数据库 :
- R(Retrieve):查询
- 查询所有数据库的名称:
show databases;
- 查询指定数据库的创建语句及其字符集:
show create database dbname;
- 查询所有数据库的名称:
- U(Update):修改
- 修改数据库字符集:
alter database dbname character 字符集类型;
- 修改数据库字符集:
- D(Delete):删除
- 删除数据库:
drop database (判断存在:if exists) dbname;
- 删除数据库:
- 使用数据库
- 查询正在使用的数据库名称:
select database();
- 使用数据库:
use dbname;
- 查询正在使用的数据库名称:
2.操作表
-
Create
-
语法
-
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…
列名n 数据类型n
);
数据类型
- int:整数类型
- age int
- double:小数类型
- score double(小数最大位数,小数点后几位)
- date:日期(年-月-日,yyyy-MM-dd)
- datetime:日期(年-月-日-时-分-秒,yyyy-MM-dd HH:mm:ss)
- timestamp:时间戳,添加记录不赋值或赋值为null时,自动添加当前系统时间
- varchar:字符串
- tel varchar(最大字符数)
- int:整数类型
-
-
-
Retrieve
- 查询当前使用数据库的所有表名称:
show tables;
- 查询表结构:
desc 表名;
- 查询当前使用数据库的所有表名称:
-
Update
- 修改表名:
alter table 表名 rename to 新表名;
- 修改表的字符集:
alter table 表名 character set 字符集名称;
- 添加列:
alter table 表名 add 列名 数据类型;
- 同时修改列名与数据类型:
alter table 表名 change 列名 新列名 新数据类型;
- 仅修改列的数据类型:
alter table 表名 modify 列名 新数据类型;
- 删除列:
alter table 表名 drop 列名;
- 修改表名:
-
Delete
- 删除表:drop table tablename;
1.4.DML:table数据操作
- 添加数据:
insert into 表名(添加数据的列名:列名1,列名2,...) values(添加值:值1,值2,...);
- 添加的列名需与添加值对应
- 不定义列名时,则默认给所有列添加值,无添加值需以Null替代:
insert into 表名 values(添加值:值1,值2,...);
- 除数字类型外,其余数据类型添加值需要以引号标记,单双均可
- 删除数据:
delete from 表名 where [条件]
- 未加条件逐行删除表中的数据(低效率)
- 删除表建议使用:
truncate table 表名;
,先删除表对象,再创建一张空的同数据结构的表
- 修改数据:
update 表名 set [修改值:列名1 = 值1,列名2 = 值2,...] where [条件]
- 未加条件则表中所有记录均会被修改。
1.5.DQL:table数据查询
-
语法
select [字段列表] from [表名列表] where [条件列表] group by [分组字段] having [分组后条件] order by [排序] limit [分页限定]
-
基础查询
-
select [字段列表] from [表名];
-
查询结果集去重:
select distinct [字段列表] from [表名]
将查询出完全相同的字段合并去重
-
数字字段查询四则运算:
select num1,num2,num1+ifnull(num2,0) from [表名]
将查询得到的数字字段进行计算生成新的一列num1+num2,当字段中有值为null时,ifnull判断其是否为null,是则替换为后值。
-
-
条件查询
-
where子句后接条件
-
运算符
-
`>,<,=,>=,<=,!=或<>,
大于,小于,等于,大于等于,小于等于和不等于
-
between…and…
划定取值范围
-
in(值1,值2,…);
划定取值集合
-
与:
and 或 &&
,或:or 或 ||
,非:not 或 !
可通过与,或,非连接条件子句,例:
age>10 and age <20;
-
is null / is not null
判断值是否为null
-
like:模糊查询
-
占位符:
- _:单个任意字符
- %:多个任意字符
-
例:
-
查询姓马的有哪些?
SELECT * FROM student WHERE NAME LIKE '马%';
-
查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";
-
查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-
查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
-
-
-
-
-
排序查询
-
order by 排序字段1 排序方式1,排序字段2 排序方式2....
-
排序方式:
- ASC:升序,默认排序方式
- DESC:降序
-
排序序列:
若有多种排序方式,后执行的排序方式仅能对前一种排序方式中数据一样的数据进行排序
-
-
聚合函数
将一列数据作为一个整体,排除null值进行纵向的计算,若需计算null个数可使用ifnull函数
- count:计算个数,
select count(name) from student;
:求得student表中name列的数据个数 - max:计算最大值,
select max(math) from student;
- min:计算最小值
- sun:求和
- avg:计算平均值
- count:计算个数,
-
分组查询
- group by 分组字段;
- 分组查询先分组再查询,查询字段只能为分组字段,聚合函数才有意义
- Where:在分组前进行限定,不可以使用聚合函数,不满足条件则不参与分组,
- having:在分组后进行限定,可使用聚合函数,不满足结果则不被查询出来
-
分页查询
select * from student limit 开始索引,数据条数;
- 开始索引=(当前页码 - 1) * 数据条数
1.6.DCL:数据库权限操作
-
管理用户
- 查询用户
- 切换到mysql表:use mysql;
- 查询user表:select * from user;
- 主机名:localhost:本地主机,%通配符:任意网络地址
- 创建用户
create user '用户名'@'主机名' identified by '密码';
- 删除用户
drop user '用户名'@'主机名';
- 修改用户密码
update user set password = password('新密码') where user = '用户名'
- root密码:
- 管理员身份停止MySQL服务:net stop mysql
- 无验证方式启动MySQL服务:mydqld --skip-grant-tables
- 新建cmd窗口连接MySQL数据库修改root用户密码
- 进程管理器结束mysqld服务
- 管理员身份打开MySQL服务:net stop mysql
- 密码修改成功,可使用新密码登录
- 查询用户
-
权限管理
-
查询权限
show grants for '用户名'@'主机名'
-
授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-
撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
-
2020/9/4