当前位置:网站首页>[MySQL] Related operations on databases and tables in MySQL
[MySQL] Related operations on databases and tables in MySQL
2022-07-30 22:32:00 【dream new come out】
引言
铭记于心 | ||
---|---|---|
我唯一知道的,便是我一无所知 |
-DDL操作数据库
4.1创建数据库(掌握)
- 语法
create database 数据库名 [character set 字符集][collate 校对规则] 注: []意思是可选的意思
字符集(charset):是一套符号和编码.
- 练习
创建一个day01的数据库(默认字符集)
create database day01;
创建一个day01_2的数据库,指定字符集为gbk(了解)
create database day01_2 character set gbk;
It can also be created by visualization(默认即可)
4.2查看所有的数据库
4.2.1查看所有的数据库
- 语法
show databases;
4.2.2查看数据库的定义结构【了解】
- 语法
show create database 数据库名;
- 查看day01这个数据库的定义
show create database day01;
4.3删除数据库
- 语法
drop database 数据库名;
- 删除day01_2数据库
drop database day01_2;
4.4修改数据库【了解】
- 语法
alter database 数据库名 character set 字符集;
- 修改day01这个数据库的字符集(gbk)
alter database day01 character set gbk;
注意:
- 是utf8,不是utf-8
- 不是修改数据库名
4.5其他操作
- 切换数据库, 选定哪一个数据库
use 数据库名; //注意: 在创建表之前一定要指定数据库. use 数据库名
- 练习: 使用day01
use day01;
- 查看正在使用的数据库
select database();
-DDL操作表
5.1 创建表
5.1.1 语法
create table 表名(
列名 类型 [约束],
列名 类型 [约束]
...
);
5.1.2 类型
5.1.2.1 数值类型
- 整型系列:xxxInt
int(M),必须和unsigned zerofill一起使用才有意义
- 浮点型系列:float,double(或real)
double(M,D):表示最长为M位,其中小数点后D位
例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错.
- 定点型系列:decimal(底层实际上是使用字符串进行存储)
decimal(M,D):表示最长为M位,其中小数点后D位
- 位类型:bit
字节范围是:1-8,值范围是:bit(1)~bit(64),默认bit(1)
用来存储二进制数.对于位字段,直接使用select命令将不会看到结果.可以使用bit()或hex()函数进行读取.插入bit类型字段时,使用bit()函数转为二进制值再插入,因为二进制码是“01”.
5.1.2.2 日期时间类型
日期时间类型:year, date, datetime, timestamp
注意一下每一种日期时间的表示范围
timestamp和datetime的区别:
- timestamp范围比较小
- timestamp和时区有关
- show variables like ‘time_zone’;
- set time_zone = ‘+8:00’;
- timestamp受MySQL版本和服务器的SQLMode影响很大
- 表中的第一个非空的timestamp字段如果插入和更新为NULL则会自动设置为系统时间
5.1.2.3 字符串类型
MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异.常见的有:
char,varchar,xxtext,binary,varbinary,xxblob,enum,set等等
For larger file storage,Generally, the storage path is stored in the database,The files are then placed in a specific file server
- 字符串类型char,varchar(M)
char如果没有指定宽度,默认为1个字符
varchar(M),必须指定宽度
- binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串,不支持模糊查询之类的.
- 一般在保存少量字符串的时候,我们会选择char和varchar;而在保存较大文本时,通常会选择使用text或blob系列.blob和text值会引起一些性能问题,特别是在执行了大量的删除操作时,会在数据表中留下很大的“空洞”,为了提高性能,建议定期时候用optimize table功能对这类表进行碎片整理.可以使用合成的(Synthetic)索引来提高大文本字段的查询性能,如果需要对大文本字段进行模糊查询,MySql提供了前缀索引.但是仍然要在不必要的时候避免检索大型的blob或text值.
- enum枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1~255个成员的枚举需要1个字节存储;对于255`65535个成员需要2个字节存储.例如:gender enum(‘男’,‘女’).如果插入枚举值以外的值,会按第一个值处理.一次只能从枚举值中选择一个.
- set集合类型,可以包含0~64个成员.一次可以从集合中选择多个成员.如果选择了1-8个成员的集合,占1个字节,依次占2个,3个..8个字节.例如:hoppy set(‘吃饭’,‘睡觉’,‘玩游戏’,‘旅游’),选择时’吃饭,睡觉’或’睡觉,玩游戏,旅游’
5.1.2.4 示例
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| eid | int(11) | NO | PRI | NULL | auto_increment |
| ename | varchar(20) | NO | | NULL | |
| tel | char(11) | NO | | NULL | |
| gender | char(1) | YES | | 男 | |
| salary | double | YES | | NULL | |
| commission_pct | double(3,2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| job_id | int(11) | YES | | NULL | |
| email | varchar(32) | YES | | NULL | |
| mid | int(11) | YES | | NULL | |
| address | varchar(150) | YES | | NULL | |
| native_place | varchar(10) | YES | | NULL | |
| did | int(11) | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
5.1.3 约束
- 即规则,规矩 限制;
- 作用:保证用户插入的数据保存到数据库中是符合规范的
约束 | 约束关键字 | |
---|---|---|
主键 | primary key | 非空且唯一,并且一张表只能有一个主键 |
唯一 | unique | 唯一,当前列不能出现相同的数据 |
非空 | not null | 非空,当前列不能为null |
默认 | default | 如果当前列没有数据,则指定默认数据 |
约束种类:
- not null: 非空 ; eg: username varchar(40) not null username这个列不能有null值
插入null值就会报错
- unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo char(18) unique; cardNo 列里面不可以有重复数据
- primary key;主键约束(非空+唯一); 一般用在表的id列上面. 一张表基本上都有id列的, id列作为唯一标识的
- auto_increment: 自动增长,必须是设置了primary key之后,才可以使用auto_increment
- id int primary key auto_increment; id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.
注意:
- 先设置了primary key 再能设置auto_increment
- 只有当设置了auto_increment 才可以插入null , 否则插入null会报错
id列:
- 给id设置为int类型, 添加主键约束, 自动增长
- 或者给id设置为字符串类型,添加主键约束, 不能设置自动增长
5.1.4练习
- 创建一张学生表(含有id字段,姓名字段不能重复,性别字段不能为空默认值为男. id为主键自动增长)
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增长
NAME VARCHAR(30) UNIQUE, -- 唯一约束
gender CHAR(1) NOT NULL DEFAULT '男'
);
5.2 查看表【了解】
5.2.1查看所有的表
show tables;
5.2.2查看表的定义结构
- 语法
desc 表名; - 练习: 查看student表的定义结构
desc student;
5.3 修改表【掌握,但是不要记忆】
5.3.1语法
- 增加一列
alter table [数据库名.]表名称 add [column] 字段名 数据类型;
alter table [数据库名.]表名称 add [column] 字段名 数据类型 first;
alter table [数据库名.]表名称 add [column] 字段名 数据类型 after 另一个字段;
- 修改列的类型约束:
alter table 表名 modify 字段 类型 约束 ;
- 修改列的名称,类型,约束:
alter table 表名 change 旧列 新列 类型 约束;
- 删除一列:
alter table 表名 drop 列名;
- 修改表名 :
rename table 旧表名 to 新表名;
Do not use when modifying’ '(Single quotes are used in aliasing),但是可以用to distinguish keywords
5.3.2练习
- 给学生表增加一个grade字段,类型为varchar(20),不能为空
ALTER TABLE student ADD grade VARCHAR(20) NOT NULL;
- 给学生表的gender字段改成int类型,不能为空,默认值为1
alter table student modify gender varchar(20);
- 给学生表的grade字段修改成class字段
ALTER TABLE student CHANGE grade class VARCHAR(20) NOT NULL;
- 把class字段删除
ALTER TABLE student DROP class;
- 把学生表修改成老师表(了解)
RENAME TABLE student TO teacher;
5.4 删除表【掌握】
- 语法
drop table 表名; - 把teacher表删除
drop table teacher;
写在最后:
路漫漫其修远兮,吾将上下而求索!伙伴们,再见!
边栏推荐
猜你喜欢
navicat新建数据库
482-静态库、动态库的制作、使用及区别
DistSQL in-depth analysis: creating a dynamic distributed database
Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
Navicat cannot connect to mysql super detailed processing method
MySQL索引常见面试题(2022版)
PhpMetrics usage
只会纯硬件,让我有点慌
MySQL 8.0.29 decompressed version installation tutorial (valid for personal testing)
cmd (command line) to operate or connect to the mysql database, and to create databases and tables
随机推荐
【微信小程序】小程序突破小程序二维码数量限制
WSL2设置默认启动用户(debian)
tcp协议传输中的粘包问题
史上最全的Redis基础+进阶项目实战总结笔记
EasyExcel综合课程实战
Successfully solved ImportError: always import the name '_validate_lengths'
Go语学习笔记 - gorm使用 - 事务操作 Web框架Gin(十一)
Chapter 8 Intermediate Shell Tools II
宁波中宁典当转让29.5%股权为283.38万元,2021年所有者权益为968.75万元
ThinkPHP high imitation blue play cloud network disk system source code / docking easy payment system program
MySQL 灵魂 16 问,你能撑到第几问?
PhpMetrics usage
mysql remove duplicate data
科技的成就(三十一)
2022.7.27
ThinkPHP高仿蓝奏云网盘系统源码/对接易支付系统程序
3 minutes to take you to understand WeChat applet development
mysql去除重复数据
Uni-app 小程序 App 的广告变现之路:激励视频广告
matlab标量场作图