本篇包括:
- 数据库的创建,修改,删除
- mysql的数据类型
- 数据库表的创建,查看,修改,删除
- 数据库表的分区
- mysql中的约束
1. 数据库的创建,修改,删除
创建数据库
create database test1;
如果没有数据库的话就创建:
create database if not exists test2 character set utf8;
显示创建的数据库:
show databases:
修改数据库
比如将test2的字符集改成拉丁文:
alter database test2 character set latin1;
转向编辑哪个数据库:
use test1;
转向哪个数据库之后,哪个数据库就会变成黑色的选中状态。
然后我们查看编码格式:
use test2;
show variables like 'character%';
我们发现database已经编码格式从utf8变成了latin1这种格式了
删除数据库
drop database test2;
drop database if exists test2;
2.mysql的数据类型
整形和浮点型
时间日期型和字符型
3.数据库表的创建,查看,修改,删除
数据库表的创建,查看
create database book;
use book;
create table reader(
card_id char(18),
name varchar(10),
sex enum('男','女'),
age tinyint,
tel char(11),
balance decimal(7,3)
);
这里先创建一个数据库book,然后选中该数据库,创建一张reader的表,表里的信息有id,name,sex,age,tel,balance
数据库表的查看
(1)查看数据库表
show tables[from db_name];
show tables from book;
(2) 查看数据库表
show columns from tbl_name;
desc 表名/describe 表名
show columns from reader;
如果当前目录就是book这个库,可以直接用desc查看表的信息
desc reader;
(3)查看数据库表
查看表的详细结构语句,可以用来显示数据表的创建语句
show create table 表名;
show create table reader;
数据库表的修改
(1)数据库表添加列
语法结构:
ALTER TABLE <表名> ADD <新列名> <数据类型> [约束条件] [FIRST|AFTER已存在列名]
alter table reader
add email varchar(30)
emal这就添加到Columns里面去了
desc reader
查看reader
alter table reader add email2 varchar(30) after tel;
desc reader
表示指定在tel后面加email2
(2)修改表列名
语法结构:
ALTER TABLE <表名> CHANGE <旧列明><新列名><新数据类型>;
alter table reader change email2 emailback varchar(30);
desc reader;
(3)修改列的数据类型
ALTER TABLE <表名> MODIFY <列名> <数据类型>
alter table reader modify email varchar(25);
desc reader;
email的数据类型变成了varchar(25)
(4)修改列的排列位置
语法结构:
ALTER TABLE <表名> MODIFY <列1> <数据类型> FIRST|AFTER <列2>
alter table reader modify balance decimal(7.3) after email;
desc reader;
把余额放到了最后
(5)删除列
语法结构
ALTER TABLE <表名> DROP <列名>;
这里删除掉emailback
alter table reader drop emailback;
desc reader;
(6)修改表名称
语法结构:
ALTER TABLE <旧表名> [TO] <新表名>
alter table reader rename to readerinfo;
(7)数据库表的删除
与非结构:
DROP TABLE [IF EXIST] 表1,表2,...,表n;
我们发现mytest1下面有一张表叫test1,我们现在把它删除掉:
use mytest1;
drop table if exists test1;
show tables;
加上if exist就会隐藏报错,没有的表删除时也不会报错
4.数据库表的分区
表分区:
当我们创建的表,需要承载的数据量很大的时候,就要开率如何优化它,就要考虑表分区。表分区就是把一张表的数据分成多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,但是所有的数据还是在一个表中
使用表分区有前提:你的数据库必须支持表分区
查看:
show plugins;
会出现很多配置器情况,如果有一行是patition ACTIVE STORAGE ENGINE NULL GPL
说明数据库支持分区
我的8.0.13版本不支持分区,查阅资料发现:
通用分区处理程序已从MySQL服务器中删除。 为了支持给定表的分区,用于表的存储引擎现在必须提供其自己的(“native”)分区处理程序。 --partition和–skip-partition选项已从MySQL服务器中删除, SHOW PLUGINS命令和INFORMATION_SCHEMA.PLUGINS表中不再显示与分区相关的变量信息。
现在两种存储引擎支持native分区:InooDB和NDB(NDBCLUSTER,NDB集群)。而在8.0版本中,只支持InnoDB。
所以如果从Mysql5.7升级到8.0版本,如果有不是InooDB存储引擎的分区表,那么无法升级。有两种解决办法,再升级:
Reference
为了不那么麻烦,决定重新下载5.7版本
show plugins;
查看发现5.7有分区功能!!!(5.7的版本里面不支持中文,所以之前创建表格时性别‘男’,‘女’要改成英文的)
数据库分区有两种方式:水平分区、垂直分区。
水平分区就是将表按照行分割成不同的数据文件,垂直分区就是将表数据按照列分割成不同数据文件
use book;
create table bookinfo(
book_id int,
book_name varchar(20));
partition by range(book_id)(
partition p1 values less than(20109999),
partition p2 values less than(20159999),
partition p3 values less than MAXVALUE
);
这就是说在book里面创建一张表叫bookinfo,然后使用book_name索引来分区,小于20109999的分为p1;小于20159999的分为p2;以上的都分为p3。
我们现在向bookinfo表中插入三条数据:
insert into bookinfo values(20100005,'t1');
insert into bookinfo values(20140015,'t2');
insert into bookinfo values(20170001,'t3');
查看数据时,可以通过分区检索查看数据:
select * from bookinfo partition(p1);
只查看p1中的数据,只有一个。
sql中的约束
对表的行或这列做出限制,来确保表的完整性,唯一性,(如图书编号,约束其不能为空,且不能重复,那么这一列就应该有约束)
约束类型
(1)非空约束(NOT NULL)
(2)主键约束(PRIMARY KEY)如图书编号这样的用于索引的,不能重复的
(3)唯一约束(UNIQUE)
(4)默认约束(DEFAULT)
(5)外键约束(FORIGN KEY)如类别编号,去关联图书类别表
(1)非空约束
空值与非空
NULL:字段值可以为空
NOT NULL:字段值不能为空
语法规则:
创建表时的非空约束列名 数据类型 NOT NULL
create table bookinfo(
book_id int,
book_name varchar(20)not null
);
修改表为指定列添加非空约束
alter table bookinfo modify book_name varchar(20) not null;
删除非空约束
alter table bookinfo modify book_name varchar(20);
设置了书名非空之后再不输入书名的话,就会报错,信息数不进去
insert into bookinfo (book_id) values (20110202);
(2)主键约束
主键约束要求主键列的数据唯一,并且不允许重复,主键能够唯一的标识表中的一条数据
类型:单字段主键,多字段联合主键
单字段主键:
添加主键约束列名 数据类型 PRIMARY KEY;
在列定义的后面指定主键[constraint <约束名> primary key];