create database 数据库名;
这里的create和database都是sql里的关键字;
⚠数据库名随便起,但是不能和关键字重复(字母数字下划线);
⚠每个语句要以;结尾
如果没打分号就会有这个结果
⚠一个服务器上数据库的名字是不能重复的
这里的Query OK,表示查询成功,SQL是“全程化的查询语言”
MySQL 5.几 默认的字符集是拉丁文,无法直接存储中文,所以创建数据库要指定utf8的字符集
问题:一个汉字在计算机里,需要用几个字节来保存?
是指多个字符的集合。不同的字符集包含的字符个数不一样、包含的字符不一样、对字符的编码方式也不一样。
计算机使用二进制编码来表示字母(ASCII码)
因为欧美的字母只有单个,所以用一个字节来表示就够了;
但是中文汉字就多了,要用更大的码表来表示
1)GBK:Windows简体中文版,默认使用的字符编码;这里的1个汉字占2个字节
2)utf8:更通用的编码方式。本质是一种变长编码,一个utf8字符可以是1个字节/2个字节/3个字节...;可以表示世界上任何一种语言文字
utf8表示汉字就是3个字节
3)Unicode:Java里的char类型使用,但是String无法使用
那Java里面怎么识别并提取汉字的呢?
MySQL指定的字符集还有一种写法,utf8mb4,这种是utf8的完全体(原来的utf8没有emoji表情)
show databases;
这里面有些数据库是系统自带的,用于维护MySQL内部的一些相关信息
有的是我们自创的(比如刚刚的javasql),每个人的情况都不一样
use 数据库名;
数据库服务器上有很多是数据库,在后续操作中需要自己指定使用哪个数据库
drop database 数据库名;
注意:一旦删除了数据库,数据就恢复不了了
如果删除的是比较重要的“生产环境”的数据就很危了!
---------------------------------------------------------------------------------------------------------------------------------
工作中会接触到到几种环境
1.办公环境:公司发电脑让员工进行日常办公,员工用电脑开会,写ppt这些。。。
2.开发环境:写代码,编译代码,运行代码。。。
3.测试环境:测试时使用的环境
上面三种环境都是线下环境
4.生产环境:也叫线上环境,部署程序,可以被外面的用户看到
(如果同一时刻用户访问量很大,消耗的总资源超过机器能够提供的资源上限(CPU,GPU,内存,带宽...),服务器可能就挂逼了(网页刷不出来))
扯点题外话~
服务器挂逼了怎么办?用人肉眼盯着非常不现实,但我们可以写一个监控程序盯着服务器状态
在服务器状态异常的时候监控程序会给程序员及其领导发一条报警程序
在游戏公司里面,每次游戏进行更新都要重启服务器,监控程序发现异常就会发短信,领导的体验会非常不好(谁愿意没事总收一条报警短信啊),一些程序员可能会在更新前短暂关闭监控程序。
如果关闭后忘记开起来那就是真正惹大祸了hhh
公司:
1)分配管理数据库的权限,一般给普通程序员分配插入数据和查询数据的权限,高危操作给有经验的老程序员用
2)数据备份:周期性备份
个人:
谨慎操作,找人带着
数据表有很多列,每一列都有具体的类型
最后两个双精度类型,是因为IEEE 754标准,float和double的数据不能精确保存,到小数点后面很多位就变成随机数了。(所以浮点数在比较的时候往往采用做差进行范围控制)
decimal采用类似字符串的方式表示数据,这样虽然消耗大量空间,但是能保证数据精确
VARCHAR:()里面的数字表示最大长度-->兜底作用,防止空间大量消耗
如果是带有中文的字符串,一个汉字就是一个字符
文本文件:存储标准字符,可以在utf8码表上找到
二进制文件:就是存储任意的数据。视频,图片,动态库都是二进制文件
timestamp表示时间戳(在以前C语言学习设置随机数的时候,我们就把时间作为随机种子)
到2038年是什么意思?
指的是在2038年1月19日03:14:07 UTC之后,使用32位带符号整数来表示时间戳的计算机系统将无法正确处理日期和时间,从而导致系统错误或崩溃。
这个问题的根源在于,Unix和类Unix操作系统中的时间戳是使用32位带符号整数来表示自1970年1月1日0时0分0秒以来的秒数。而这个32位带符号整数的最大值是2^31-1,也就是2147483647,对应的日期和时间是2038年1月19日03:14:07 UTC。超过这个时间戳的计算机系统将无法正确处理日期和时间。
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
);
创建表一定要把每一列名字,每一列类型标明
⚠针对数据表的操作一定要先选中数据库,否则会出现下面的情况
这里的0.04sec表示40ms
这对于计算机来说是比较慢的,往往会成为分布式系统中的性能瓶颈
对列进行注释:可以采用comment
create table stu_test (
id int,
name varchar(20) comment '姓名',
password varchar(50) comment '密码',
age int,
sex varchar(1),
birthday timestamp,
amout decimal(13,2),
resume text
);
也可以用 - , 或者 # 进行注释(常用)
show tables;
desc 表名;//desc: describe
int(11):11表示位宽,表示在MySQL客户端打印的时候会占据的最大宽度
Null:表示这个单元格啥都没有,可以不填
Default:默认值
Key:索引类型
Extra:扩展
drop table 表名;
⚠删除错表了,后果比删库还严重,因为难排查,问题会在不经意间积累
小技巧:
1.计算单价可以不用decimal(因为消耗空间大,运算速度慢),可以采用int,只要把钱都换算成以“分”为单位就行
2.创建第三张表的时候我们不小心把表名设置成了order,这个order是sql里的一个关键字,用来排序
我们可以这么改(上键 + 1.换个表名,2.在order左右两边加上` `)
完整的代码
---------------------------------------------------------------------------------------------------------------------------------
有一个问题:上面字符串长度上限是怎么得出的?
其实是我乱设置的(bushi~
在实际工作中,有公司自己的方式
1)业务确定:当前这个代码,要解决什么问题,解决问题的过程就称为业务
对应公司岗位:产品经理(PM),这个工作就是提出并明确需求
产品经理会将所有需求整理成一个mrd文档,上面字段的长度就会在mrd文档里面给出
2)技术确定
明确总的存储空间,估算总的数据量,进一步计算每个数据能占多少空间
---------------------------------------------------------------------------------------------------------------------------------