一、数据库管理系统DBMS
软件
写程序时需要做的:
a、数据库在本地
1、找到目录
2、添加数据
b、数据库在远程
1、socket连接上远程机器
2、socket发送(命令)
我们需要做些什么:
a、
A、程序
程序,socket客户端
B、数据
socket服务端
C、制作一套规则
...
D、socket客户端和服务端用户认证,授权,限制
有人做了一套软件,已经做好了以上操作:
-- SqlServer(收费),Oracle,sqlite,access...MySQL
二、下载安装(解压方式)
1.下载地址https://dev.mysql.com/downloads/file/?id=476476 点击最下面No thanks,just start my download
2.解压到任意目录
3.服务器端运行(命令行下)
mysqld(报错的话在指定位置下新建data目录)
初始化:mysqld --initialize-insecure
mysqld
4.客户端连接(命令行下)
mysql -u root -p(初始的时候没有密码,直接回车)
简化操作:
1.设置环境变量
2.
将mysql服务端制作成一个Windows服务:
管理员身份运行cmd,输入mysqld -install
net start mysql
net stop mysql
三、MySQL数据库
1、概念
数据库---文件夹
数据库表---文件
数据行---文件中的一行
2、初始:
show databases; 查看当前MySQL下的数据库
create database 数据库名; 创建数据库
use 数据库名; 进入选中数据库
show tables; 查看当前数据库下的表
create table 表名(nid int,name varchar(20),pwd varchar(64)); 创建数据表
select * from 表名; 查看表中的所有数据
insert into 表名(nid,name,pwd) values(1,'lql','123'); 插入数据
desc 表名; 以简洁形式查看表中的所有数据
3.用户授权
用户管理的时候有一些特殊的命令:
创建用户
create user '用户名'@'IP地址' identified by '密码';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址' to '用户名'@'IP地址';
修改密码
set password for '用户名'@'IP地址' = Password('新密码')
权限管理:
默认什么权限都没有
grant 权限 on 数据库.表名 to '用户名';
*:代表所有的
=======要点:远程连接=======
4.SQL语句
数据库级别
显示数据库 SHOW DATABASES;
默认数据库
mysql--用户权限相关数据
test--用于用户测试数据
information_schema--MySQL本身架构相关数据
创建数据库 CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
使用数据库 USE 数据库名称;
删除数据库 DROP DATABASE 数据库名称;
表级别
SHOW TABLES;
DESC 表名
******CREATE TABLE 表名(nid int, name varchar(20))ENGINE=InnoDB DEFAULT defalut CHARSET=utf8;
InnoDB支持事务,原子操作,回滚
a.null|not null 是否可以为空
b.default x 默认值
c.auto_increment 自增(数字,必须是索引-主键)
d.primary key||primary key(x,x,x,)主键索引:
一张表只能有一个主键(可以多列组成主键),唯一不能重复,不能为null,一般情况下自增列设置主键
唯一索引:
可以为null,一张表可以有多个
1,2,3,4,5,6,null
--约束
--索引,加速查找
e.foreign key外键,两张表建立约束:
创建:alter table 从表 add constraint 外键名称(形如:fk_从表_主表) foreign key 从表(外键字段) reference 主表(主键字段)
删除:alter table 表名 drop foreign key 外键名称
f.数据类型:数值、时间、字符串
http://www.runoob.com/mysql/mysql-data-types.html
修改表
添加列:alter table 表名 add 列名 类型
删除列:alter table 表名 drop column 列名
修改列:
alter table 表名 modify column 列名 类型; -- 类型
alter table 表名 change 原列名 新列名 类型; -- 列名,类型
添加主键:
alter table 表名 add primary key(列名);
删除主键:
alter table 表名 drop primary key;
alter table 表名 modify 列名 int, drop primary key;
添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键:alter table 表名 drop foreign key 外键名称
修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
DROP TABLE 表名; 直接删除表
DELETE FROM 表名; 清空表 自增接着清空前的
TRUNCATE TABLE 表名; 清空表 速度快,自增回到原点
数据行级别
增删改查:http://www.runoob.com/sql/sql-tutorial.html
1.导入另一个表的数据:insert into 表名(列名,) select(列名,) from 表名
2.通配符:%(多个字符串) _(单个字符)
3.分页:
select * from 表名 limit x,y;
select * from 表名 limit y offset x;(推荐)
(x表示起始位置,y表示取几条)
4.排序:
正序 select * from 表名 order by 列名 asc;
反序 select * from 表名 order by 列名 desc;
排序后可能出现相同的,对相同的再进行排序 select * from 表名 order by 列名1 排序方式,列名2 排序方式
5.分组:
单一分组:select 列名 from 表名 group by 列名;
***聚合函数max()取最大,min()取最小,sum()取求和,count()计算数量,avg()平均
多项分组:select 列名,聚合函数(列名),... from 表名 group by 列名;
多项分组和改名:select 列名 as 新列名,聚合函数(列名) as 新列名,... from 表名 group by 列名;
对聚合后的数据进行筛选:
...having 条件
6.联合:
select 列名 from 表名 union select 列名 from 表名;默认去重 union all不去重
7.连表:
select * from 表名,表名; 笛卡儿积
a. select * from 表名,表名 where 表名.列名 = 表名.列名;
b. select * from 表名 left join 表名 on 表名.列名 = 表名.列名;右表依赖左表(推荐)
c. inner join 去null