…
net start mysql //启动mysql的服务
net stop mysql //关闭mysql服务
mysql -uroot -p密码
mysql -hip -uroot -p连接目标的密码
mysql --host=ip --user=root --password=连接目标的密码
exit
quit
创建数据库:
create database 数据库名称;
创建数据库,判断不存在,再创建:
create database if not exists 数据库名称;
创建数据库,并指定字符集:
create database 数据库名称 character set 字符集名;
练习: 创建db4数据库,判断是否存在,并制定字符集为gbk:
create database if not exists db4 character set gbk;
查询所有数据库的名称:
show databases;
查询某个数据库的字符集或查询某个数据库的创建语句:
show create database 数据库名称;
修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;
删除数据库:
drop database 数据库名称;
判断数据库存在,存在再删除:
drop database if exists 数据库名称;
查询当前正在使用的数据库名称:
select database();
使用数据库:
use 数据库名称;
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
int
:整数类型
double
:小数类型
date
:日期,只包含年月日,yyyy-MM-dddatetime
:日期,包含年月日时分秒,yyyy-MM-dd HH:mm:sstimestamp
:时间错类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
varchar
:字符串
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
create table 表名 like 被复制的表名;
查询某个数据库中所有的表名称:
show tables;
查询表结构:
desc 表名;
修改表名
alter table 表名 rename to 新的表名;
修改表的字符集
alter table 表名 character set 字符集名称;
添加一列
alter table 表名 add 列名 数据类型;
修改列名称 类型
alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
删除列
alter table 表名 drop 列名;
drop table 表名;
drop table if exists 表名 ;
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
delete from 表名 [where 条件];
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
select 字段1, 字段2, ... from 表名;
select distinct 字段1, 字段2, ... from 表名;
select 字段1, 字段2, 字段1 + 字段2 from 表名;
select 字段1, 字段2, 字段1 + ifnull(字段2, 0) from 表名;
select 字段1, 字段2, 字段1 + ifnull(字段2, 0) as 总和 from 表名;
select 字段1, 字段2, 字段1 + ifnull(字段2, 0) 总和 from 表名;
where 条件语句
比较运算符 | 说明 |
---|---|
> 、<、<=、>=、=、<> | <> 在 SQL 中表示不等于,在 mysql 中也可以使用 !=没有 == |
between…and… | 在一个范围之内,如:between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾 |
in(集合) | 集合表示多个值,使用逗号分隔 |
like ‘毛%’ | 模糊查询占位符 _ 表示单个任意字符占位符 % 表示多个任意字符 |
is [not] null | 查询某一列[不]为NULL 的值,注:NULL值不能用 = 判断 |
逻辑运算符 | 说明 |
---|---|
and 或 && | 与,SQL 中建议使用前者,后者并不通用。 |
or 或 || | 或 |
not 或 ! | 非 |
order by 排序字段1 排序方式1, 排序字段2 排序方式2...
将一列数据作为一个整体,进行纵向的计算。
select 函数名(列名) from 表名;
group by 分组字段;
limit 开始的索引,每页查询的条数;
limit
是一个 MySQL ”方言“。对表中的数据进行限定,保证数据的正确性、有效性和完整性。
约束名 | 约束关键字 |
---|---|
主键 | primary key |
唯一 | unique |
非空 | not null |
外键 | foreign key |
检查 | check 注:MySQL 不支持 |
not null
,某一列的值不能为null
创建表时添加非空约束
create table 表名(
变量1 int,
变量2 varchar(32) not null -- 给变量2添加非空约束
);
创建表后添加非空约束
alter table 表名 modify 变量2 varchar(32) not null;
删除非空约束
alter table 表名 modify 变量2 varchar(32);
unique
,某一列的值不能重复
唯一约束可以有 NULL 值,但是只能有一条记录为 NULL.
创建表时添加唯一约束
create table 表名(
变量1 int,
变量2 varchar(32) unique -- 给变量2添加唯一约束
)
创建表后添加唯一约束
alter table 表名 modify 变量2 varchar(32) unique;
删除唯一约束
alter table 表名 drop index 变量2;
primary key
非空且唯一创建表时添加主键约束
create table 表名(
变量1 int primary key, -- 给变量1添加主键约束
变量2 varchar(32)
);
创建表后添加主键约束
alter table 表名 modify 变量1 int primary key;
删除主键约束
alter table 表名 drop primary key;
自动增长
如果某一列是数值类型的,使用
auto_increment
可以来完成值得自动增长,一般配合主键使用。
创建表时添加主键约束,并且完成主键自动增长
create table 表名(
变量1 int primary key auto_increment,
变量2 varchar(32)
);
添加自动增长
alter table 表名 modify 变量1 int auto_incremrnt;
删除自动增长
alter table 表名 modify 变量1 int;
foreign key
,让表与表产生关系,从而保证数据的正确性。
创建表时添加外键约束
create table 表名(
...
外键列,
constraint 外键名称 foreign key (外键列名称) references 主键名称(主表列名称)
);
创建表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称);
删除外键约束
alter table 表名 drop foreign key 外键名称;
级联操作
分类
添加级联操作
alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) on update cascade on delete cascade;
多
的一方建立外键,指向一
的一方的主键。设计数据库时,需要遵循的一些规范。要遵循后面的范式要求,必须先遵循前面的所有范式要求
1NF
的基础上,非码属性必须完全依赖于码(在 1NF
基础上消除非主属性对主码的部分函数依赖)2NF
基础上,任何非主属性不依赖于其它非主属性(在 2NF
基础上消除传递依赖)备份(命令行)
mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原(命令行)
登录数据库
创建数据库
使用数据库
执行文件
source 文件路径
select
列名列表
from
表名列表
where....;
隐式内连接
显式内连接
select 字段列表 from 表名1 [inner] join 表名2 on 条件;
注意
左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件;
右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件;
查询中嵌套查询,称嵌套查询为子查询。
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
开启事务:
start transaction;
回滚:
rollback;
提交:
commit;
自动提交:
手动提交:
查看事务的默认提交方式:
SELECT @@autocommit;
修改默认提交方式:
set @@autocommit = 0;
多个事务之间是隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
注意:隔离级别从小到大安全性越来越高,但是效率越来越低
数据库查询隔离级别:
select @@tx_isolation;
数据库设置隔离级别:
set global transaction isolation level 级别字符串;
DBA: 数据库管理员
添加用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
删除用户
DROP USER '用户名'@'主机名';
修改用户密码
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
mysql 中忘记了 root 用户的密码?
管理员运行 cmd 停止 mysql 服务:
net stop mysql
使用无验证方式启动 mysql 服务:
mysqld --skip-grant-tables
管理员运行新的 cmd ,直接输入 mysql 命令就可以登录成功。
输入以下指令修改密码:
use mysql;
update user set password = password('你的新密码') where user = 'root';
关闭两个窗口
打开任务管理器,手动结束 mysqld.exe 的进程
启动 mysql 服务
使用新密码登录。
查询用户
切换到mysql数据库
USE myql;
查询user表
SELECT * FROM USER;
通配符:% 表示可以在任意主机使用用户登录数据库
查询权限
SHOW GRANTS FOR '用户名'@'主机名';
授予权限
grant 权限列表(all) on 数据库名(*).表名(* ) to '用户名'@'主机名';
撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';