一、数据库创建
1.1 基本语法
建库!
CREATE DATABASE db_name charset=utf8 collate utf8_general_ci;
charset
: 字符集(默认)utf8
;collate
: 校对规则(默认:不区分大小写
)utf8_general_ci
;
补充说明:
1、当
charset
是utf8
时,可以存放中文
2、当数据库的charset
是utf8
时,该数据库下的表
的编码自然就是utf8
3、如果你在cmd
控制台下操作,那么我们需要在mysql
的控制台,设置是一个指令set names gbk
collate:utf8_general_ci 和 utf8_bin 对比
utf8_general_ci
1、如果校验规则是 默认
utf8_general_ci
, 在查询时,字母不区分大小写
2、默认排序规则:
3、查询:
utf8_bin
1、
区分
字母的大小写
2、那么在排序时,是安字母的ascii
大小排序
3、查询:
扫描二维码关注公众号,回复: 2518124 查看本文章
二、数据库相关操作
2.1 数据库相关指令
1、
show databases
显示数据库
2、show create database 数据库名
显示创建数据库的指令
3、/*!40100 DEFAULT CHARACTER SET utf8 */
这句话不是注释,表示 如果mysql的版本大于mysql4.01.00
就执行后面的语句DEFAULT CHARACTER SET utf8
4、drop database 数据库的名字
删除数据库
5、show processlist
查看当前mysql数据库连接进程情况
2.2 修改、备份、恢复数据库
修改!
ALERT DATABASE [IF EXISTS] db_name;//[ ]可选
// 例如: ALERT DATABASE [IF EXISTS] mydb collate=utf8_bin;
备份!(1.备份单库和恢复单库)
> 备份单库
mysql> mysqldump -u root -p mydb > d:/mydb.bak //备份到 `d:/mydb.bak`,注意有 >
> 恢复单库
mysql> create database mydb1;
mysql> use mydb1;
mysql> source d:/mydb.bak
备份!(2.备份多表(库)和恢复多表(库))
> 备份多表
mysql> mysqldump -u root -p mydb user1 user2 > d:/mytable.bak //备份mydb数据库下的user1、user2表
> 恢复多表(就是恢复之前备份表)
mysql> source d:/mytable.bak //必须保证你已经use 对应的数据库(不一定非得是 mydb 库)
> 备份多库
mysql> mysqldump -u root -p -B mydb1 mydb2 > d:/mydb12.bak //注意有 -B
> 恢复多库
mysql> source d:/mydb12.bak
注意!
如果我们备份和恢复数据库的表中有中文,请先执行
set names gbk
三、数据表的创建
3.1 基本语法
CREATE TABLE table_name(
field1 datatype,
field2 datatype,
... ...
)character set 字符集 collate 校对规则 engine 存储引擎方式 //这里的顺序无所谓
character set
默认是使用你的表所在的数据库的字符集
,如果你这里指定了,以这个为主
collate
默认是使用你的表所在的数据库的校对规则
,如果你这里指定了,以这个为主
engine
存储引擎,常见的有(MyISAM
、InnoDB
、Memory
),Mysql在V5.1
之前默认存储引擎是MyISAM
;
在此之后默认存储引擎是InnoDB
MyISAM
和 InnoDB
> MyISAM
*.frm
表结构;*.MYD
表数据;*.MYI
表索引
> InnoDB
*.frm
表结构;其它的数据放在文件夹上级的ibdata1
和日志文件
四、数据类型
4.1 数值类型图
4.2 日期和时间类型图
4.3 字符串类型图
4.4 0填充 zerofill
4.5 float 和 decimal
float
和 decimal
区别
3.float(M,D)[unsigned]
单精度浮点精确到大约7
位。
deciaml(M,D)[unsigned]
更精确小数,如果D
是 0
,值没有小数点或分数部分;decimal
最大位数(M
)为65
。支持十进制的最大(D
)是30
。如果D
被省略,默认是 0
,如果M
省略,默认是10
。
一句话:
float[M,D]
没有给M,D
就是表示存放精度到小数位数7
的值;decimal[M,D]
没有给M,D
就是deciaml(10)
越界
关于
越界
的问题时,如果float
和decimal
数据越界,系统会先进行四舍五入
,如果四舍五入后仍然越界就报错
例如:
float(4,2)
,但是插入数据是99.991
// 插入了5
位,但是最后四舍五入99.99
,存入数据库是99.99
,不报错。
float(4,2)
,但是插入数据是99.995
// 插入了5
位,但是最后四舍五入100.00
,存入报错!out of range value for column 'xxx'...
4.6 字符串
1、varchar(n):
如果表的编码是utf8
, 那么 这n
值就是65532/3 = 21844
, 因为utf8
编码是一个字符占用3
个字节;
如果表的编码是gbk
, 那么 这n
值就是65532/2 = 32766
,因为gbk
编码一个字符占用2
个字节
如果编码是latin1
,则可以是n = 65532
, 因为一个字符就是1
个字节
2、varchar(n) 和char(n) 的n表示的是字符数而不是字节数
4.7 日期和时间类型
date [年月日]
// 日期
datetime [年月日时分秒]
// 日期
timestamp [年月日时分秒]
// 时间戳,在你添加或者修改一条记录时,会自动的更新
4.8 枚举类型
enum
//单选
1、基本语法
字段名enum
(‘选项1’, ‘选项2’, ‘选项n’)
例如:insert into name values('男')
2、细节
类型enum
可以通过数字表示对于的选项值,顺序是1,2,3,...65535
,使用的时候,可以使用选项的字符串格式,也可以使用对应的数字。
set
//多选
1、基本语法
字段名set
(‘选项1’, ‘选项2’, ‘选项n’)
例如:insert into name values('水果,葡萄,橘子')
2、细节
类型set
可以通过数字表示对于的选项值,顺序是1,2,4,8,16,32...
,使用的时候,可以使用set选项的字符串本身(多个选项用逗号分隔),也可以使用多个选项的数字之和(比如:1+2+4=7
)
3、set注意!
find_in_set
是专门用于进行set
检索的函数。find_in_set(str, strlist)
;
str
就是你要查找的选项,strlist
就是集合所在的字段 // 这里为了避免用like
模糊搜索漏洞
4.9 如何将显示的信息对齐显示
1、数据库登录时,要指定登录的编码
mysql> mysql --default-character-set=latin1 -u root -p
mysql> set names gbk
五、表的修改
5.1 语法
[添加] ALTER TABLE tablename ADD (column datatype[DEFAULT expr]...);
[修改] ALTER TABLE tablename MODIFY (column datatype[DEFAULT expr]...);
[删除] ALTER TABLE tablename DROP (column datatype[DEFAULT expr]...);
案例
// 1、增加一个image列(要求在name后面)
alter table goods add `image` varchar(64) not null default='' after name;
// 2、修改job列,使其长度为40
alter table goods modify `job` varchar(40) not null default= '';
// 3、删除color列
alter table goods drop `color`;
// 4、表名改为books [这里是rename]
rename table goods to `books`;
// 5、修改表的字符集为utf8
alter table bookds charset=utf8;
// 6、列名name修改为user_name [这里用 change ]
alter table bookds change `name` `user_name` varchar(64) not null default '' ;
5.1 修改表的时候的注意事项
1、如果
删除
了某个字段,那么该字段
的所有
数据都没有, 因此要谨慎
2、修改字段的长度
,必须满足当前
已经存在的数据的长度小于
你要修改
的长度
3、修改字段类型
,必须满足当前已经存在的数据可以转成
你新的数据类型
5.2 mysql自带的帮助
// 方式1
? create
// 方式2
? create table