本文主要介绍了数据库操作的操作流程 , 以及数据库和数据表的基本操作 .
1.用户在客户端输入SQL
2.客户端把SQL通过网络发送给服务器
3.服务器会执行这个SQL,把结果返回给客户端
4.客户端收到结果显示到界面上
create database 数据库名;
*后面加上if not exists 如果数据库已经存在,也不会报错(适用于批量执行sql)
*设置字符集: 后面加上character set utf8 / charset utf8. (手动设定的一个字符集很关键,mysql默认字符集是拉丁文, 不设置字符集后续如果插入中文可能会出现乱码)
>字符集
*针对汉字进行编码
*英文字母在计算机使用ASCII表示(使用 数字 表示字符) , 但是ASCII只能表示英文字母和标点符号以及阿拉伯数字
汉字的表示一般有两种
也是使用数字来表示汉字,在这两个表上,同一个汉字表示的数字不同;同一个数字,表示的汉字也不同
*gbk
使用两个字节,表示一个汉字
*uft8
使用三个字节,表示一个汉字
目前utf8是主流,因为utf8不仅可以表示中文,其他国家的语言字符也能表示!
说明:
* java中使用的字符集默认是utf8
* mysql默认字符集是拉丁文
* mysql的utf8是残缺版(缺少了emoji表情),完整版是utf8mb4
注意:
1.不区分大小写
2.命令行cmd输入的sql必须以分号 ; 结尾
Tip:中文输入时使用英文标点 , 省去了切换中英文的麻烦 , 方便编写代码 .
show databases;
use 数据库名;
一旦选中某个数据库,后续操作,就都是针对该数据库展开了
drop database 数据库名;
注意:
在工作中,这是一个危险操作,一旦删掉数据库,数据库中的所有数据都没了,
那么如何防患于未然?
1.设置权限,限制普通用户的删除权限
2.备份
create table (列名 类型, 列名 类型 , … )
mysql数据类型
*数字类型
BIT(M) |
M指定位数,默认为1 |
二进制,只能存0,1 |
TINYINT |
1字节 |
相当于Java里的Byte |
SMALLINT |
2字节 |
相当于Java里的Short |
INT |
4字节 |
相当于Java里的Integer |
BIGINT |
8字节 |
相当于Java里的Long |
FLOAT(M,D) |
4字节 不能精确表示小数 |
相当于Java里的Float |
DOUBLE(M,D) |
8字节 不能精确表示小数 |
相当于Java里的Double |
DECIMAL(M,D) |
表示小数,M为有效长度,D为小数点位数 |
能够精确表示小数 |
NUMERIC(M,D) |
同上 |
注意:
DECIMAL虽然精确存储,但是占用的空间也更多,效率更低
*字符串类型
varchar(size) |
可变长字符串,size表示长度(单位是字符,不是字节) |
text |
长文本数据,不常用 |
mediumtext |
中等长度文本数据,不常用 |
blob |
二进制形式的长文本数据,不常用 |
注意:
varchar(10) 最多是个字,哪怕是汉字,也是十个.
*时间类型
时间戳:以1970年1月1日0点0时0分为基准,计算当前时刻和基准时刻的秒数/毫秒之差
timestamp |
4字节 |
范围从1970-2038年 |
datetime |
8字节 |
范围从1000-9999年 |
show tables;
desc 表名;
(describe)
说明:
int(11)的含义是:打印的时候,显示最多占11个字符这么宽,和存储范围无关
drop table 表名;
说明:
和删除数据库一样,都是危险的操作
在创建和删除表的时候,可以加上if exists或者 if not exists
mysql注释:
#
--
上述是数据库和表的基本操作
价格使用什么类型表示?
价格一般是保留两位小数
* 如果用double/float , 小数表示不精确
* 如果用decimal, 有精度保证,但是效率低
正确的做法是:使用int (精度+效率)
用分的单位来表示钱
比如用1234分来表示12.34元