MySQL基础二
创建数据库:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME'
CHARACTER SET 'character set name'
COLLATE 'collate name';
DATABASE和SCHEMA是同义词,创建数据库的时候可以用DATABASE也可以用SCHEMA这个关键字。
CHARACTER SET 'character set name':创建数据库的时候指定字符集,不然就使用默认的字符集
COLLATE 'collate name':指定排序规则,不指定就使用默认的排序规则(不区分大小写)
例如:创建一个名为student的数据库,采用MySQL默认指定的字符集和字符编码。
mysql> create database student;
Query OK, 1 row affected (0.00 sec)
mysql> show create database student;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| student | CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)
show create database db_name:显示创建指定数据库的 CREATE DATABASE 语句
查看MySQL使用的默认字符集和编码的方法:
- 1.通过查看db.opt这个文件确认
[root@CentOS8 performance_schema]# pwd
/data/mysql/performance_schema
[root@CentOS8 performance_schema]# cat db.opt
default-character-set=utf8
default-collation=utf8_general_ci
- 2.通过查看系统的变量来确定
查看char开头的若干变量
mysql> show variables like 'char%';
+--------------------------+-----------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /apps/mysql/share/charsets/ |
+--------------------------+-----------------------------+
8 rows in set (0.00 sec)
例如:创建数据库的时候指定默认的字符集。
mysql> create database IF NOT EXISTS student1 character set 'utf16'; # character set可以简写为charset='xxx'
Query OK, 1 row affected (0.00 sec)
mysql> show create database IF NOT EXISTS student1;
+----------+---------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------------------+
| student1 | CREATE DATABASE /*!32312 IF NOT EXISTS*/ `student1` /*!40100 DEFAULT CHARACTER SET utf16 */ |
+----------+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
修改数据库莫默认编码;
mysql> alter database student1 character set utf8;
Query OK, 1 row affected (0.00 sec)
删除数据库:
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
mysql> drop database student1;
Query OK, 0 rows affected (0.05 sec)
查看数据库列表:
show database(复数);
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| student |
| test |
| test1 |
+--------------------+
6 rows in set (0.00 sec)
MySQL自带的数据库:类似于windows操作系统里面的相关文件。
information_schema 是MySQL自带的一个数据库,里面存储了mysql的元数据信息。
performance_schema:mysql5.5版本之后新增的,用于监视数据库性能,该数据库中表的引擎都是performance_schema
数据类型:
-
数值型
-
字符型
-
日期型
数值型:
-
整数:
-
tinyint(m) 1个字节 范围(-128~127)
-
smallint(m) 2个字节 范围(-32768~32767)
-
mediumint(m) 3个字节 范围(-8388608~8388607)
-
int(m) 4个字节 范围(-2147483648~2147483647)
-
bigint(m) 8个字节 范围(+-9.22*10的18次方)
补充:
取值范围的计算:
-
原码:将一个整数转换成二进制形式,就是其原码
-
反码:
正数,它的反码就是其原码(原码和反码相同)
负数:它的反码是将原码中除符号位以外的所有位(数值位)取反 -
补码:
正数,它的补码就是其原码
负数:负数的补码是其反码加1
注意:
-
正数三码合一(既:不存在什么补码和反码)
-
计算机内存中,整数一律采用补码的形式来存储
所以,求取值范围的时候就需要把原码转化为补码才行。
求一个数的取值范围:将内存中的所有位(Bit)都置为 1 就是最大值,都置为 0就是最小值。
范例:求有符号数的取值范围(1byte)
-
因为正数的三码合一,即最大值为:0---1111111 --->2^7-1=127
-
求负数的取值范围就需要看它的补码:
但是平时我们见到的都是原码(直接转换成二进制形式),所以我们需要将原码转换成补码(补码才是计算机内存中位数的存放形式)。 -
所以:1---1111111的补码是10000001,如果补码全为0,即1000000,这个时候就无法转换成原码了,因为计算反码时要减去 1,1000 0000 需要向高位借位,而高位是符号位,不能借出去。
-
所以计算机规定,1000 0000 这个特殊的补码就表示 -128。
注意:补码转换为原码:先减去 1,再将数值位取反即可
注意:
-
加修饰符unsigned后,则最大值翻倍。即无符号位,8bit都用来存储数据。
如:tinyint unsigned的取值范围为(0~255) -
int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说,Int(1)和Int(20)是相同的
浮点型(float和double),近似值
- float(m,d):m表示总共有多少位数,d表示小数有多少位。(小数点不占用总个数)
例如:设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位 - double(m,d):同上
定点数:在数据库中存放的是精确值,存为十进制
- 格式 decimal(m,d) 表示 最多 m 位数字,其中 d 个小数,小数点不算在长度内
比如: DECIMAL(6,2) 总共能存6位数字,末尾2位是小数,字段最大值 9999.99
字符串(char,varchar,text)
-
char(n) 固定长度,最多255个字符,注意不是字节
-
varchar(n) 可变长度,最多65535个字符
-
tinytext 可变长度,最多255个字符
-
text 可变长度,最多65535个字符
-
mediumtext 可变长度,最多2的24次方-1个字符
-
longtext 可变长度,最多2的32次方-1个字符
-
BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节
-
VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
-
内建类型:ENUM枚举, SET集合
char和varchar
-
char(n):n表示最多能存多少个字符,他是定长的。比如char(5),如果存入的字符没有5位就在末尾用空格补全,超过5位就切割掉多出来的。
-
varchar(n):n也是表示最多存多少个字符,如果没有存入那么多个,就按实际字符数+1个字节的长度存储。
例如:VARCHAR(50) 能存放几个 UTF8 编码的汉字?
varchar(50) 指的是 50 字符,无论存放的是数字、字母还是 UTF8 编码的汉字,都可以存放 50 个。
修饰符:
-
NULL 数据列可包含NULL值,默认值
-
NOT NULL 数据列不允许包含NULL值,相当于网站注册表中的 * 为必填选项
-
DEFAULT 默认值
-
PRIMARY KEY 主键,所有记录中此字段的值不能重复,且不能为NULL
-
UNIQUE KEY 唯一键,所有记录中此字段的值不能重复,但可以为NULL
-
CHARACTER SET name 指定一个字符集
适用数值型的修饰符:
-
AUTO_INCREMENT 自动递增,适用于整数类型, 必须作用于某个 key 的字段,比如primary key
-
UNSIGNED 无符号
相关文章
- 打家劫舍系列问题
- 打印数组的所有子集
- 派对最大快乐值问题
- Netty 学习(六):创建 NioEventLoopGroup 的核心源码说明
- 用递归函数和栈操作逆序栈
- Netty 学习(五):服务端启动核心流程源码说明
- 与图相关的一些算法
- 荷兰国旗问题与快速排序算法
- 使用卡特兰数来解决的问题
- 红绿正方形染色问题
- 累加出整个范围所有的数最少还需要几个数
- 二叉树的重建问题
- 二维数组的最小路径和问题
- Netty 学习(四):ChannelHandler 的事件传播和生命周期
- 使用贪心来解决的一些问题
- 使用二叉树的递归套路来解决的问题
- 累加和为 K 的最长子数组问题
- Netty 学习(三):通信协议和编解码
- 乘积小于 K 的子数组
- Netty 学习(二):服务端与客户端通信