目录
1. 数据库
存储数据的仓库有:
Oracle MySql
DB2 Sybase
Sql Server Sqlite
No Sql数据库 Redis
MongoDB
2.MySql
创始人是一个芬兰人,把MySql公司,以10亿美金,卖给Sun公司,一年后,Sun被Oracle收购,MySql被Oracle收购之后,Oracle不重视MySql的开发,收缩了MySql的开发社区,只允许几个大的厂商参与开发,还推出收费版MySql
主流开源社区,认为MySql存在闭源风险,开源社区已经不支持MySql,而是转向支持MariaDB数据库
MariaDB数据库
MySql创始人从MySql新开了一个新的分支,起个名叫MariaDB,继续开发
阿里向Ma也riaDB贡献代码
3. MySql客户端工具
MySql命令行客户端有:
Workbench Navicat Sqlyog MySql Front...
3.1 连接登录服务器
c:\program files\mysql5.5\bin
mysql -uroot -p
登录本机服务器,连接3306端口
mysql -uroot -p -hxxx.xx.xx.xxx -P3306
登录指定ip地址的服务器,连接指定的端口
mysql -uroot -p
password:****
3.2 查看数据库
show databases;
show schemas;
3.3 进入数据库
use mysql;
use test;
3.4 查看数据表
show tables;
3.5 退出客户端
quit
\q
4. 远程登录MySql服务器
MySql用户用 用户名@网络地址 来标识
例如:
'root'@'localhost'
'root'@'192.168.122.8'
'root'@'192.168.122.%'
'root'@'%'
用户授权:
可以设置一个用户访问数据库的权限,比如允许访问哪些库,哪些表,哪些字段,允许执行哪些操作
让root用户可以在远程连接,需要两步:
1.创建用户:
create user 'abc'@'localhost' identified by '123456'
create user 'abc'@'192.168.0.68' identified by ''
create user 'abc'@'192.168.0.%' identified by ''
create user 'abc'@'%' identified by ''
2.对用户授权:
grant select,insert,update,delete on test.* to 'abc'@'%'
grant create,alter,drop on db1.* to 'abc'@'localhost'
grant all privileges on *.* to 'abc'@'%'
grant select,insert on db1.t1 to 'abc'@'%'
grant select(id, name) on db1.t1 to 'abc'@'%
创建远程访问的root用户
创建用户
create user 'root'@'192.168.31.%'
identified by 'root';
对用户授权
grant all on *.* to
'root'@'192.168.31.%';
连接远程服务器(需要关闭防火墙)
mysql -uroot -p -hxxx.xx.xxx.xx -P3306
5. 中文问题
数据库端存储的字符编码,与客户端字符编码可能不一致
GBK
中 d6 d0
UTF-8
中 e4 b8 ad
服务器要做正确的编码转换,必须知道客户端发送的是什么编码
客户端必须告诉服务器,自己的编码是什么编码
windows命令行的字符编码,就是gbk编码
通知服务器,客户端的编码是gbk
set names gbk;
6.数据库管理
6.1创建数据库
create database db1
charset utf8;
6.2 查看数据库
show databases;
查看建库语句
show create database db1\G
6.3 修改数据库
只能修改数据库的默认字符编码
alter database db1
charset gbk;
show create database db1\G
6.4 删除数据库
删除数据库,所有的表,所有的数据都会被删除,不可恢复
drop database db1;
show databases;
7. 数据表的管理
7.1 创建表
create database db1
charset utf8;
use db1;
-- 创建表
create table tb1(
name varchar(10),
gender char(1)
) engine=innodb charset=utf8;
7.2 查看表
show tables;
查看表结构
desc tb1;
查看建表语句
show create table tb1\G
7.3 修改表
rename table tb1 to user;
--改表属性
修改存储引擎(innodb或myisam)
修改字符编码(gbk或utf8)
alter table user
engine=myisam charset=gbk;
show create table user\G
first 第一个
after 指定字段之后
alter table user add
id int first;
desc user;
alter table user add
email varchar(100) after name;
alter table user add(
age int,
height int
);
alter table user
change gender sex char(1);
desc user;
alter table user
modify sex char(2);
desc user;
first
after
alter table user
modify age int after name;
desc user;
删除字段,这个字段中所有的数据也会被删除,不可恢复
alter table user
drop column height;
desc user;
删除表,会删除表中说有的数据,不可恢复
drop table user;
如果存在的话,才执行删除
drop table if exists user;
show tables;
删除表并重新创建,两步合并成一步执行
truncate table user;
8.SQL
结构化的查询语言 Structured Query Language
DDL 数据定义语言
建库、建表...
DML 数据操作语言
增删改
DQL 数据查询语言
select
8.1 insert 插入数据
use db1;
新建user表
create table user(
id int,
name varchar(10)
)engine=innodb charset=utf8;
通知服务器,客户端使用的是什么编码
set names gbk;
插入数据
insert into user values(1,'张三');
insert into user values
(2,'李四'),(3,'王五'),(4,'赵六');
8.2 update 修改数据
update user set
id=5,name='钱七'
where id=1;
select * from user;
8.3 delete 删除数据
delete from user
where id>3;
8.4 select 查询数据
select * from user;
select name from user;
select name,id from user;
9.技术术语
database
schema
mysql中都指的是数据库
table 表
row
record
一行数据
一条记录
column
field 列 字段
10. 存储引擎
innodb (默认)
myisam
memory
10.1innodb
支持事务
支持外键
支持行级锁
有较多修改操作
10.2 myisam
不支持事务
不支持外键
只有表级锁
大量查询,很少修改的表,可以使用myisam,查询效率更高
11.mysql数据类型
11.1 字符串
char
定长字符串
char(20)
定长20个字符
不足20个字符,补空格
超出20个字符,可能出错或截断
最大长度,不能超过255个字符
所有该字段的字符串数据,都是连续存储
varchar
变长字符串
varchar(20)
最长不能超过20个字符
不足20个字符,直接存储;
超出20个字符,可能出错或截断;
存储的最大字节量,不能超过65535
gbk编码,字符数65535/2
utf8编码,字符数65535/3
字节量<=255,需要一个额外字节,表示字符串的字节长度
字节量>255,需要两个额外字节,表示字符串的字节长度
char 和 varchar
char类型效率更高,定长字符串尽量使用char类型
text
最大存储65535字节的字符串
11.2 数字
unsigned 无符号,只有正数
zerofill
用0填充配合int(6)格式设置使用
1234 --> 001234
12 --> 000012
1234567 --> 没有影响
tinyint 1字节
smallint 2字节
int 4字节
bigint 8字节
float 4字节
double 8字节
运算可能会产生不精确的结果
decimal(m,n)
一共m位,小数n位,
字节量:m+2
表示金额,一般使用decimal
11.3 日期
datetime
年月日时分秒
date
年月日
time
时分秒
timestamp
时间戳
修改一行数据时,第一个timestamp字段,会自动更新成系统当前时间
最大只能到2031年
数据类型测试
use db1;
drop table if exists tb1;
create table tb1(
a int(6) unsigned zerofill,
b timestamp,
c timestamp
)engine=innodb charset=utf8;
insert into tb1(a) values
(12),(123),(1234567);
select * from tb1;
insert into tb1(a) values(-123);
修改其他字段,第一个timestamp字段会自动更新
update tb1 set a=999
where a=12;
select * from tb1;
12. default和comment
default 设置字段的默认值
插入一行数据时,一个字段中,不插入数据,自动填入指定的默认值
comment 在建表语句中,添加注释信息,会存储在服务器中
create table a(
a int comment '....';
);