MySQL
一、配置my.init
[mysql]
default-character-set=utf8
[mysqld]
port=3306
basedir=D:\mysql\mysql-5.6.48-winx64
datadir=D:\mysql\mysql-5.6.48-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
二、DOS启动和登录
启动和退出mysql
# 启动
net start mysql
# 退出
net stop mysql
登录
-p后面密码不能加空格
-h后面的IP地址是访问的服务器IP地址,如果连接本地可省略-hlocalhost
创建用户时@' '中的IP地址是允许访问的客户端IP地址
-P:端口号,默认3306,如果没有改变,可省略
# 登录DBMS
mysql -hlocalhost -P3306 -uroot -p
mysql -uroot -p
# 登录授权用户
mysql -h192.168.0.132 -uguest -p
三、用户管理
# 创建一个其他用户
create user 'guest'@'192.168.0.%' identified by '123';
# 给用户授权
grant (all/select/select,insert) on ftp.* to 'guest'@'192.168.0.%';
# 查看用户权限
show grants for root@'%';
# 查看当前登录的用户
select user();
# 给当前用户设置密码
set password = password('123');
四、sql语句
4.1 增加 Create
# ==========库操作(database)==========
# 创建一个库名为ftp的数据库
create database ftp;
# ==========表操作(table)==========
# 创建一个叫student的表
create table student(id int,name char(12),age tinyint unsigned);
# 增加字段,默认添加到最后*
alter table student add age;
alter table student add id first;
alter table student add age after name;
alter table student modify age;
alter table student modify id first;
alter table student modify age after name;
# 添加主键*
alter table student add primary key(id);
# 添加外键*
alter table student add constraint fk foreign key(id) references class(cid);
# ==========数据操作==========
# 插入数据
insert into student values(1,'xj',24),(2,'sep',16);
insert into student(id,age) values(3,16);
# 从表中寻找插入另一张表
insert into student(id,age) select cid,cname from client;
4.2 查看 Retrieve
# ==========库操作(database)==========
# 查看所有数据库
show databases;
# 查看当前库
select database();
# ==========表操作(table)==========
# 查看当前库下所有表
show tables;
# 查看指定库下所有表
show tables from ftp;
# 查看索引
show index from ftp.student;
show index from student;
# 查看表结构
desc student;
# 查看详细表约束
show create table student;
# ==========数据操作==========
# 查询所有数据
select * from student;
# 查询指定数据
select name from student;
4.3 更改 Update
# ==========库操作(database)==========
# 切换到这个ftp库下
use ftp;
# ==========表操作(table)==========
# 修改表名*
alter table student remake stu;
rename table student to stu;
# 修改字段属性
alter table student modify name char(15) not null;
# 修改字段名和属性*
alter table student change name sname char(15) not null;
# 修改表存储引擎
alter table student engine=innodb;
# ==========数据操作==========
# 修改数据
update student set id=3,age=18 where name='xj';
4.4 删除 Delete
# ==========库操作(database)==========
drop database ftp;
# ==========表操作(table)==========
# 删除表
drop table student;
# 删除字段
alter table student drop age;
# 删除主键*
alter table student drop primary key;
# 删除外键*
alter table student drop foreign key fk_id;
# 删除索引*
alter table student drop index index_name;
# ==========数据操作==========
# 清空表,但不不清空自增字段偏移量
delete from student;
# 清空表,不能回滚,底层是先drop表,再新建表*
truncate student;
# 删除对应数据
delete from student where name='xj';
4.5 筛选排列WGHOL
select查询顺序:
from 表 ——> where 条件 ——> group by 分组 ——> having 过滤条件 ——> select 字段 as 重命名 ——> order by 排序 ——> limit
where、group by 不能使用select重命名;having特殊处理后,能使用重命名。
# ==========where==========
# 比较运算符(<,>,<=,>=,==,!=)
# 逻辑运算(not,and,or),(is,is not)
# 范围匹配(between and , in)
where salary between 1000 and 2000
where salary in (1000,2000,3000)
where salary not in (1000,2000) and age=18
# 模糊匹配(like(e%)、like(e_),通配符:%(0或多个字符) _(单个字符))
# 正则表达式
# ==========group by==========
# 分组聚合,聚合函数
# 计数
select gender,count(id) from student group by gender;
# 最大值
select post,max(salary) from student group by post;
# ==========having==========
# 过滤语句having可用聚合函数,where不行,筛选符合条件的组的数据
select post,avg(salary) from student group by post having avg(salary)>10000;
# ==========order by==========
# 从小到大排序,默认asc
select * from student order by salary;
# 从大到小排序
select * from student order by salary desc;
# 多次排序,从大到小排序
select * from student order by age,salary desc;
# ==========limit==========
# 取前3项,默认0开始
select * from student order by salary limit 3;
# 从下标1开始取接下来3项
select * from student order by salary limit 1,3;
select * from student order by salary limit 3 offset 1;
4.6 xxxx
# ==========约束==========
# -约束,加在字段数据类型后定义数值
# 无符号(默认)
unsigned
# 非空
not null
# 设置默认值
default 'admin'
# 唯一
unique
# 自增,要先加上唯一,只对数字有效,自带非空
auto_increment
# 主键,一张表只有一个,默认第一个非空+唯一是主键
primary key
# 外键,外表字段至少是唯一的
# 一个表的两个字段或两个表的两个字段之间建立的约束,在从表中建立,主表生命周期久于从表。
# 约束的5个等级:Cascase(从表跟随主表修改删除)、Set null(从表随着主表修改删除设置成null)、No action(不作为)、Restrict(先删从表,再删主表)、Set default(mysql的innodb不支持)
foreign key(class_id) references class(cid)
# ==========运算和函数==========
# 四则运算,不改变原表数据
select name,salary*2 from student;
# -函数
# 拼接
concat(name,':',sex)
# 用连接符拼接
concat_ws(':',id,name)
# 求字节数
length(name)
# 求字符数
char_length(name)
# 转大写
upper(name,sex)
# 转小写
lower(name,sex)
# 返回name的左边2个
left(name,2)
# 返回name的右边2个
right(name,2)
# 去掉name左边的空白符
ltrim(name)
# 去掉name右边的空白符
rtrim(name)
# 去掉name两端空白符
trim(【both/leading/trailing '字符串' from】name)
# 从第2个字符开始截取name
substring(name,2)
# now()系统当前时间
select name,now() from student;
...
# -聚合函数、分组函数
count,max,min,sum,avg(平均),GROUP_CONCAT
# ==========联合索引==========
# 联合唯一
create table t4(id int,server_name char(12),ip char(15)),port int,unique(ip,port));
# 联合主键1
create table t5(id int,server_name char(12),ip char(15)),port int,primary key(ip,port));
# 联合主键2
create table t5(id int,server_name char(12),ip char(15)) not null,port int not null,unique(ip,port));
# ==========连表==========
# 创建外表