目录
1. 数据库的操作
1.1 创建数据库
语法:
create database test;
//这里的create和database都是sql中有特定含义的单词,关键字
//(数据库名,表名,列名都不能和关键字重复)
//sql的关键字是大小写不敏感的
//数据库名字是随便起的,切记不要和关键字冲突
//单词和单词之间要至少有一个空格
test数据库创建好了,那么我再尝试创建一个名为test的数据库会怎样呢?
这里也会报错,不能创建test数据库,因为test数据库已经存在。所以这里告诉我们数据库得是唯一的。
数据库在创建的时候,要求不能重复,此时就可以在创建的时候,加上一个修饰,来应对上述问题。
create database if not exists test;
//if(如果) not(不) exists(存在) 意思就是如果不存在就创建,
//反之,存在就不创建
当我们执行这个语句的时候不会报错,但也不会创建第二个test数据库, 当我们加了if not exists之后就不会因为数据库同名而报错了。
那么这个到底有啥用呢?知道同名不创建就行了,为啥要加上这个呢?
这个if not exists最主要的用途就是避免SQL报错,避免报错就是因为我们实际工作中,很多时候是把一系列sql写道一个文件中,批量执行的,很少会这样一条一条执行。在批量指向的情况下,如果一条sql报错,后面的sql就无法继续执行了。
创建数据库的时候,是可以手动指定一下字符集的。
character set 字符集名字 / charset 字符集名字
咱们需要在数据库中保存中文,mysql默认的字符集是拉丁文,不支持中文,必须要在创建数据库的时候,手动指定编码方式为中文编码(GDK,UTF8)。
那么字符集是啥?
在计算机中,一个汉字占几个字节?
不同的字符集,不同的编码方式下,一个汉字占几个字节是不同的。
很多人会以为是2,2这个数字是学习C的时候,留下的印象,当时使用的是VS,在windows上写的代码,windows简体中文版默认字符集是gbk,VS默认的字符集是和系统一致(gbk),在这个情况下,一个汉字是占2个字节,gbk现在已经用的越来越少了,主要是使用utf8作为编码方式,utf8对gbk来说最大的特点就是变长编码,utf8里面的字符最短是一个字节,最长可能是四个字节,变长编码留有更大的编码的空间,因此utf8不仅仅可以表示中文,也可以表示世界上的任何一种语言文字。
如果使用utf8编码,一个汉字通常是3个字节。
unicode跟utf8有一些渊源,它是给一个字符进行编码的,但是它无法给"字符串"进行编码,比如,把多个unicode编码的字符放到一起,构成一个字符串,就可能会乱套了,无法区分字符和字符之间的边界。
基于unicode就演化出了一些可以给"字符串"编码的版本,utf8就是其中一个。
在Java中,谈到char类型,内部编码就是unicode,谈到String,内部的编码一般是utf8,因为Java内部会自动完成编码转换。
指定字符集的语句:
create database test charset utf8;
//这么写的时候确实可以指定字符集为utf8,
//但是mysql的utf8不是正真的utf8,是一个"残本"
//相较于正真的utf8相比少了emoji表情
//后来mysql又搞了个utf8mb4,则是完全体的utf8了,这个是mysql独有的,别的地方很难见到
每种字符集,都是一个很大的码表,和ASCII码差不多。
查看某一个文字的utf8和gbk编码的网站:
查看字符编码(UTF-8)http://mytju.com/classcode/tools/encode_utf8.asp
后续如果出现乱码的情况或者分不清字符集编码的时候就可以通过这样的网站查。编码就是很简单的一个表格,只不过utf8有一套自己的表格,GBK有一套自己的表格,只不过我们在使用的时候得保证当前的编码方式和解码方式对的上,要不然会出现乱码。
1.2 查看数据库
列出当前mysql数据库服务器上一共都有哪些数据库。
语法:
show databases;
//sql都需要以;结束(英文分号)
//mysql客户端允许输入sql的时候换行
输入多行最终都要以分号结束。
红色框中就是当前mysql数据库服务器上所有的数据库,我们还可以看到前面创建的test数据库,别的数据库都是自带的。
尤其是自带的mysql数据库,这个数据库是很重要的,这个数据库就保存了当前数据库服务器的各种信息,就比如我们想去修改一些配置,都可以通过mysql数据库来操作。
1.3 选中数据库
语法:
use 数据库名;
//数据库中最关键的操作就是针对表进行增删改查
//表示从属于数据库的
//要针对表操作,就需要先指定是哪个数据库里的表
1.4 删除数据库
语法:
drop database 数据库名;
这样的操作就完成了数据库的删除,完成删除之后我们再次查看数据库。
再次查看数据库,我们会发现test这个数据库没了,这就说明被我们删除掉了。
删除操作删掉的不仅仅是database,而且也删除了database中所有的表和表中的数据!
删除数据库操作时一个非常危险的操作。
2. 常用数据类型
一个表,包含很多行,每一行也称为一条记录,一个行里可以有很多列,每一列也称为时一个字段,每个列都是有一个具体的类型的。
2.1 数值类型
分为整型和浮点型:
2.2 字符串类型
2.3 日期类型
3. 表的操作
进行表操作的前提,是必须要先能够选中数据库:
use test;
3.1 创建表
语法:
create table 表名(列名 类型,列名 类型....);
//teble -> 表的意思,也是一个关键字
//列名和类型可以存在多个,而且表名和列名不能和关键字冲突
//如果确实想让表面/列名和关键字一样,可以使用反引号`(esc下面)来把表面列名引起来
/此处列名在前面,类型在后面
//也不是所有的语言都是类型在前的,有些语言,类型就是在后面的!!!
//比如C++,GO,Python....
student是表的名字,这个表有两列,id和那么,其中id是int类型,name是varchar类型,然后下面显示ok,就说明创建成功了,后面的(0.08 sec),sec表示second(秒),就说明这个操作所消耗的时间为0.08秒。
站在计算机的角度,0.08s也就是80ms,是一个挺慢的时间了,mysql这样的数据库,性能其实是短板。
3.2 查看所有表
查看当前数据库中的所有表
语法:
show tables;
如果我们直接输入命令的话会报错,所有我们必须先选中数据库。
这样我们就可以看到我们前面创建的表了。
3.3 查看表的结构
desc 表名;
//desc --> describe 描述
这个就是当前的student表。
3.4 删除表
语法:
//删除表
drop table 表名;
//如果表存在,则删除表
drop table if exists 表名;
删除表的同时,也会把表里的数据给一起删除掉.删除表,也是一定要慎重,也是非常危险的!!
4. 内容重点总结
- 操作数据库
-- 显示
show databases;
-- 创建
create database xxx;
-- 使用
use xxx;
-- 删除
drop database xxx;
- 常用数据类型
INT : 整型
DECIMAL(M,D) : 浮点数类型
VARCH(SIZE) : 字符串类型
TIMESTAMP : 日期类型
- 操作表
-- 创建表
create table 表名(字段1 类型1,字段2 类型2,.....);
-- 查看所有表
show tables;
-- 查看表的结构
desc 表名;
-- 删除表
drop table 表名;
5. 练习
1. 有一个商店的数据,记录客户及购物情况,有以下三个表组成:
- 商品goods(商品编号goods_id,商品名goods_name,单价unitprice,商品类别category,供货商provider)
- 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id)
- 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)
这里的单价unitprice用int因为单位是分,其实用decimal表示小数就可以,但这个特别占内存,而且效率低,int效率高,而且我们日常生活中算钱最多精确到分就可以了,所有这里用int表示钱。
这里varchar后面的长度是我们自己想出来的,如果在以后的工作中,这些都是产品经理提出来的。
标签:编码,字符集,创建,数据库,MySQL,基础,utf8,test From: https://blog.csdn.net/m0_74271757/article/details/141174840