一条路走到黑之数据库基础

学习环境搭建

  • phpStudy8.1
  • Navicat Premium 15

MySQL基础命令

说明:全部实例展示皆是在navicat命令行中执行的。本文是课程学习笔记,由作者总结归纳而成。

对数据库的操作

show character set;

查看当前MySQL服务实例支持的字符集、默认的字符序以及字符集占用的最大字节长度等信息
字符集

show databases;

查看数据库

create database 数据库名;

创建数据库
在这里插入图片描述

drop database 数据库名;

删除数据库

show create database 数据库名;

可以查看数据库的相关信息(例如MySQL版本ID号、默认字符集等信息)

use 数据库名;

执行该命令后,后续的MySQL命令将自动操作该数据库中所有数据库对象

在这里插入图片描述

对表的操作

create table 表名(字段名1 数据类型 [约束条件],…[其他约束条件],[其他约束条件])其他选项(例如存储引擎、字符集等选项)
create table my_table(today datetime,name char(20));

创建一张数据库的表

drop table 表名;

删除一张指定的表
删除后,MySQL服务实例会自动删除该表结构定义文件以及数据、索引信息。该命令慎用!

describle 表名; / desc 表名;

显示表结构

show tables;

查看数据库中的所有表

show create table 表名;

查看一张表的详细信息

MySQL数据类型

整数类型

类型        字节数      范围                无符号范围
tinyint     1           (-128,127)          (0,255)
smallint    2           (-32768,32767)      (0,65535)
mediumint   3           (-8388608,8388607)  (0,16777215)
int         4           (-2147483648,2147483647)
bigint      8           ...                  ...

整数类型的数,默认情况下既可以表示正整数又可以表示负整数(此时称为有符号数)。如果只希望表示零和正整数,可以使用无符号关键字“unsigned”对整数类型进行修饰(此时称为无符号整数)。

小数类型

精确小数    decimal
浮点小数    float (单精度)
            double(双精度)
  • decimal(length, precision)用于表示精度确定(小数点后数字的位数确定)的小数类型,length决定了该小数的最大位数,precision用于设置精度(小数点后数字的位数)。

      decimal (5,2)表示小数取值范围:-999.99~999.99
    

字符串

  • 定长字符串:char

  • 变长字符串: varchar(变长字符串类型)

  • 文本类型: text

    文本类型变体:tinytext text mediumtext longtext

char()与varchar(): 例如对于简体中文字符集gbk的字符串而言,varchar(255)表示可以存储255个汉字,而每个汉字占用两个字节的存储空间。假如这个字符串没有那么多汉字,例如仅仅包含一个‘中’字,那么varchar(255)仅仅占用1个字符(两个字节)的储存空间;而char(255)则必须占用255个字符长度的存储空间,哪怕里面只存储一个汉字。

日期类型

date表示日期,默认格式为‘YYYY-MM-DD’;

time表示时间,格式为‘HH:ii:ss’;

year表示年份;

datetime与timestamp是日期和时间的混合类型,格式为'YYYY-MM-DD HH:ii:ss' 

datetimetimestamp的区别:

1. 存储空间不同
a) TIMESTAMP占用4个字节

b) DATETIME占用8个字节

2. 受时区影响
c) TIMESTAMP实际记录的是1970-01-01 00:00:01到现在的数数,受时区影响

d) DATETIME不受时区影响

3. 时间范围不同
e) TIMESTAMP的时间范围是:'1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC

f) DATETIME的时间范围是:'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'

4. 自动更新
g) TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。

5. Mysql中,TIMESTAMP和long之间的转换函数:
h) TIMESTAMP转long:UNIX_TIMESTAMP

i) long转TIMESTAMP:FROM_UNIXTIME

datetime与timestamp之间的区别实例:将null插入到timestamp字段后,该字段的值实际上MySQL服务器当前日期和时间。

mysql> insert into today values(null,null);
+---------------------+---------------------+
| t1 (datetime)       | t2 (timestamp)      |
+---------------------+---------------------+
| NULL                | 2020-03-19 18:08:53 |
+---------------------+---------------------+

now()函数,用于获得MySQL服务器的当前时间,该时间与时区的设置密切相关。

  • 向表中插入两条记录(可插入更多,由表自身格式决定)

      insert into 表名 values(now(),now());
    
  • 查看表的所有记录情况

    select * from 表名;
    

复合类型

  • enum 枚举类型
  • set集合类型

两者的差别在于,enum只能单选,set可以多选。enum类型的字段类似于单选按钮的功能,一个enum类型的数据最多可以包含65535个元素。set 类型的字段类似于复选框的功能,一个set类型的数据最多可以包含64个元素。

二进制类型

  • text
  • blob

text和blob都可以用来存储长字符串:

text用来存储文本字符串,例如新闻内容,博客日志等数据;
blob存储二进制数据,例如图片,音频,视频等二进制数据;

真正的项目中,更多的时候需要将图片,音频,视频等二进制数据,以文件的形式存储在操作系统的文件系统中,而不会存储在数据库表中,毕竟,处理这些二进制数据不是数据库管理系统的强项.实际应用中存放的是图片的路径,字符串类型.

选择合适的数据类型

数据类型越短越好,越简单越好

字符串数据的字段,建议优选选择 varchar(n),长度不够选择text数据类型。

尽量使用整数代替字符串, 整数处理开销更小

如果主键是整数类型,可以大大提升查询的连接速度,提高数据的检索性能。

采用精确小数类型 decimal

精确小数类型不仅能够保证数据计算更为精确,还可以节省储存空间。

使用内置的日期和时间数据类型

最好不要使用字符串来存储日期和时间。

尽量避免NULL字段

建议将字段指定为NOT NULL约束。

创建表

create table 表名(字段名1 数据类型 [约束条件],…[其他约束条件],[其他约束条件])其他选项(例如存储引擎、字符集等选项)

  • 设置主键(Primary Key)约束

      如果一个表的主键是单个字段,直接在该字段的数据类型或者其他约束条件后加上“primary key”关键字,即可将该字段设置为主键约束,语法规则如下。
    
      字段名 数据类型 [其他约束条件] primary key
    
      如果一个表的主键是多个字段的组合(例如字段名1与字段名2共同组成主键),定义完所有的字段后,使用下面的语法规则将(字段名1, 字段名2)设置为复合主键。
    
      primary key (字段名1, 字段名2)
    
  • 非空(not NULL)约束

      直接勾选就OK
    
  • 检查(check)约束

      MySQL不支持check约束,但是可以间接实现
    
  • 默认值(default)约束

      字段名 数据类型 default 默认值
    
  • 唯一值(unique)约束

      字段名   数据类型   unique
    
  • 外键(foreign key)约束

  • 设置自增型字段的语法格式如下

      字段名 数据类型 auto_increment
    
  • 复制一个表结构的实现方法有两种:

      在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。
    
      create table 新表名
      like 源表
    
      在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。
    
      create table 新表名 select * from 源表
    

修改字段

  • 删除字段

      alter table 表名 drop 字段名
    
  • 添加新字段

      alter table 表名 add 新字段名 新数据类型 [ 新约束条件 ] [ first | after 旧字段名]
    
  • 修改表的字段名(及数据类型)

      alter table 表名 change 旧字段名 新字段名 新数据类型
    
  • 对字段的数据类型进行修改

      alter table 表名 modify 字段名 新数据类型
    
  • 添加约束条件

      alter table 表名 add constraint 约束名 约束类型 (字段名)
    
  • 删除表的主键约束条件

      alter table 表名 drop primary key
    
  • 删除表的外键约束时,需指定外键约束名称

      alter table 表名 drop foreign key 约束名
    
  • 删除表字段的唯一性约束

      alter table 表名 engine=新的存储引擎类型
      alter table 表名 default charset=新的字符集
      alter table 表名 auto_increment=新的初始值
      alter table 表名 pack_keys=新的压缩类型 
    
  • 修改表名

      rename table旧表名to新表名
      等价: alter table 旧表名 rename 新表名
    

    表记录的更新操作

    • 插入新纪录

      insert into 表名 [(字段列表)]  values (值列表)
      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值