zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

MySQL基础二

2023-02-18 16:34:36 时间
创建数据库:

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 无符号