MYSQL 基础

http://www.cnblogs.com/wupeiqi/articles/5713315.html

http://www.cnblogs.com/wupeiqi/articles/5713323.html

http://www.cnblogs.com/wupeiqi/articles/5729934.html

http://www.cnblogs.com/wupeiqi/articles/5716963.html

一、数据库管理系统DBMS
软件

bin
config
db (保存数据)
- admin
- 123asdfasd.txt {用户名, 密码,类型...}
- 123asdfasdb.txt{用户名, 密码,类型...}
- course
- school
src

写程序:
a. 数据库在本地
1、找到目录
2、添加数据
b. 数据库在远程
1、socket连接上远程机器
2、socket发送{命令} # add|asdfasdfadf
做些什么????
a.
A,程序
程序,socket客户端
B,数据
socket服务端
C,制作一套规则
add|阿德法撒旦发射点发
delete|asdfasdf
....
D,socket客户端和服务端用户认证,授权,限制

有人搞了一套软件:

socket客户端
B,数据
socket服务端
C,制作一套规则
add|阿德法撒旦发射点发
delete|asdfasdf
....
D,socket客户端和服务端用户认证,授权,限制

-- SqlServer(收费),Oracle,sqlite,access...,,,, MySQL

MySQL,SqlServer(收费),Oracle,sqlite,access..

二、下载安装

1、下载
2、解压到任意目录
3、服务器端运行起来
mysqld

4、客户端连接

省事:
将mysql服务端制作成一个Windows服务
net start mysql
net stop mysql
===,打开服务管理,直接...

三、MySQL数据库

1、概念

数据库, 文件夹
数据库表, 文件
数据行, 文件中的一行数据

2、
启动服务器:
net start mysql

C:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\mysql

mysql.server start

/etc/init.d/mysql start


客户端连接:
C:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\mysql -u root -p


初试:

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,'alex','123'); # 插入数据

-- select * from 表名;

3、用户授权
用户管理特殊命令:
创建用户
create user '用户名'@'IP地址' identified by '密码';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;


修改密码
set password for '用户名'@'IP地址' ='新密码'

mysql> set password for 'root'@'localhost' ='111111';



c:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysql -u

权限:
默认,什么都没有

grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权

select,查


数据库.表
test.tb1
test.*
*.*

'用户'@'IP地址'
xiaohu@localhost

mysql> grant all privileges on *.* to liyinchun@192.168.132.127;
##给liyinchun 用户开通所有的权限。

===========重要,远程连接=============

====================
a. 解放双手,在重复操作文件,直接将命令发送给mysql服务端,自动操作
b. 数据库,表,行
c. 开户和授权
密码,必须用 引号 ''
其他,推荐用

d. 客户端连接(MySQL提供的客户端)
1、
mysql -u root -h 192.168.1.1 -p
# 输入密码

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,'alex','123'); # 插入数据

-- select * from 表名;

3、 ;;;;;;;;;;


4、 SQL语句

数据库级别
SHOW DATABASES;

CREATE DATABASE 数据库名称;
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

USE 数据库名称;

drop database 数据库名称;

表级表
show tables;
desc tb1; 查看表的具体属性

*** create table tb1(nid int, name varchar(10));
# 事务,原子操作,回滚

a. 默认值
b. 是否可以为空
c. 自增列(一张表只能有一个,数字,必须是索引-主键)
d. 主键索引:

一张表只能有一个主键,唯一不能重复,不能为null,- 一般情况下,自增列设置主键
1,2,3,4,5,6
唯一索引:
可以为null,一张表可以有多个唯一列
1,2,3,4,5,6,null

-- 约束
-- 索引,加速查找

create table xxx(
nid.... primary key,
....
)

create table student(
name varchar(10) not null,
num int not null,
age int,
gender int,
primary key (name,num)
)
约束:
name num age
a 88 9
a 99 9
a 88 0

# 主键:
不能为null,
不能重复,
一张表只有一个主键(可以多列组成主键)
# 一般用法:
nid int auto_increment primary key,

# 请在本地创建表:
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use 数据库名称;

create table tb5(
nid int not null auto_increment primary key,
name varchar(16),
age int default 19
)engine=innodb default charset=utf8;

e. 外键foreign key,一对多

两张表建立约束

-- 约束
-- foreign key,一对多



f. 数据类型:数值、时间和字符串
数值:
二进制:
bit 二进制
整数:
tinyint
smallint
int
bigint
- 范围不一样

小数:
decimal --精确的

-- 985412154521321.857541245421245845
FLOAT -- 98541215458798465465749465465465421321.857541245420000000
-- 985412154000000000000000000000000000000000000000000000000
DOUBLE -- 9854121544587984654657494654654654000000000000000000000000

字符串:
# 定长
char
create table tb13(n char(7),b int, c int)
insert ssss
# 查找速度快,浪费空间


# 变长
varchar
create table tb13(n varchar(7),b int, c int)
insert ssss
insert sssss
insert sssss5
# 查获找速度慢,节省空间
text
mediumtext
longtext
二进制数据:
TinyBlob、Blob、MediumBlob、LongBlob
# 上传文件
# Blob,强制二进制方式
# varchar(65), "D:\av.avi" 将上传的文件保存在硬盘, D:\av.avi ;

时间:
DATE
YYYY-MM-DD(1000-01-01/9999-12-31)
# 1996-12-12 18:45

TIME
HH:MM:SS('-838:59:59'/'838:59:59')

YEAR
YYYY(1901/2155)

DATETIME

YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)

TIMESTAMP

YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

enum
单选

集合
多选

create table tb13(num decimal(6,2)) #8888.18

drop table tb1; # 直接表删除

delete from tb1; # 清空表内容
truncate table tb1; # 清空表内容,速度快,自增回到远点

select * from tbl;

数据行级别 *****

select * from tbl;



# 增
insert into tb1(name,age) values('alex', 18);
insert into tb1(name,age) values('alex', 18),('eric', 19),('eric', 19);
create

# 删
delete from 表
delete from 表 where id=1 and name='alex'

# 改
update 表 set name = 'alex' where id>1


# 查
select * from 表
select * from 表 where id > 1
select nid,name,gender as gg from 表 where id > 1

# 其他

连表操作:★★★★★★★
# 连表
select * form a,b where a.x = b.o
mysql> select * from love,live where love.nid = live.nid;

# join,
a. left join
select * from a LEFT JOIN b ON a.x = b.o

b. inner join ,永远不会出现Null
select * from a inner JOIN b ON a.x = b.o



#组合
组合,自动处理重合
select nickname
from A
union
select name
from B

组合,不处理重合
select nickname
from A
union all
select name
from B


#排序
select * from 表 order by 列 asc - 根据 “列” 从小到大排列
select * from 表 order by 列 desc - 根据 “列” 从大到小排列
select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序   



#分组
group by
mysql> SELECT item FROM live GROUP BY item;
#聚合函数
mysql> select nid, max(item),min(item),sum(item),count(item) from live group by item;
最大 最小 和 次数

select AVG(cid) FROM course   ### avg 求平均

 

 

查询某个段区间 

SELECT *
FROM
SystemEvents
WHERE  ReceivedAt BETWEEN'2018-06-20 09:51:00' AND '2018-06-20 10:01:00'

 

 


mysql> select max(nid),item from live group by item having max(nid) > 3;
# 在对 聚合条件进行删选的时候就不能用where了 需要用 having !

#限制
select * from 表 limit 5; - 前5行
select * from 表 limit 4,5; - 从第4行打印5行
select * from 表 limit 5 offset 4 - 从第4行打印5行 (和上面方法一样,不过这种用的多)

===========今日内容整理 ================
1、数据库概念,很多
2、数据库,表,行
3、启动服务器端,启动客户端连接服务端
- 用户管理
- 权限管理
4、SQL语句
数据库操作 *
表操作**
- 是否可以为空
- 默认值
- 主键
- 外键
- 自增
- 数据类型(char,varchar)
数据行 ******:
增删改查
其他:
limit offset
left join
order by
group by ,having max,min,sum,count
# 条件,模糊,.....

添加列: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;

 

外键,一个特殊的索引,只能是指定内容
creat table color(
nid int not null primary key,
name char(16) not null
)

create table fruit(
nid int not null primary key,
smt char(32) null ,
color_id int not null,
constraint fk_cc foreign key (color_id) references color(nid)
)

外键


 

 

 

 



create table fuwuzhongxing(nid int not null auto_increment primary key,
name varchar(10),age int, class int default 4)engine=innodb default charset=utf8;

 

posted @ 2018-04-28 16:46  滕虎  阅读(157)  评论(0编辑  收藏  举报