学习环境搭建
- 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'
datetime
与timestamp
的区别:
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 (值列表)
-