MySQL数据库基本操作

MySQL数据库基本操作

mysql是目前最流行的关系型数据库管理系统,也是在WEB应用方面最好的应用软件之一

MySQL概括

MySQL的默认端口为3306

  • MySQL数据库的数据文件存放在/usr/local/mysq1/data目录下,每个数据库对应一个子目录,用于存储数据表文件。每个数据表对应为三个文件,扩展名分别为“. frm"、" .MYD"和“.MYI"。
  • MYD"文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm" 文件在一起。
  • ”.MYI"文件也是专属于MyISAM 存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM
    存储来说,可以被cache的内容主要就是来源于“.MYI"文件中。每一个MyISAM表对应一个“.MYI"文件,存放于位置和“. frm"以及“.MYD”一样。
  • MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件( frm, myd,myi)。每个表都有且仅有这样三个文件做为MyISAM存储类型的表的存储,也就是说不管这个表有多少个索引,都是存放在同一个.MYI文件中。
  • 另外还有“. ibd"和ibdata 文件,这两种文件都是用来存放Innodb数据的,之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用“. ibd"文件来存放数据,且每个表一个“.ibd"文件,文件存放在和MyISAM数据相同的位置。如果选用共享存储表空间来存放数据,则会使用ibdata文件来存放,所有表共同使用一个(或者多个,可自行配置) ibdata 文件。

数据的常用类型

类型 说明
int 整形(定义整数类型数据)
float 单精度浮点。4字节32位。准确到小数点后六位
double 双精度浮点。8字节64位
char 固定长度的字符类型,定义字符类数据,不足的空格补齐
varchar 可变长度的字符类型
text 文本
image 图片
decimal(5,2) 5个有效长度数字,小数点后面有2位,指定长度数组

设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.456,但总个数还以实际为准,即6位。整数部分最大是3位,如果插入数12.123456,存储的是12.1234,如果插入12.12,存储的是12.1200。

decimal (5,2),当输入的数值后的小数位小于两位时,会拿0补全两位;当超过两位时,小数点后第三位是自动进行的四舍五入进第二位

char和varchar的区别

  • char(n)若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
  • char(n)固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
  • char类型的字符串检索速度要比varchar类型的快。

查看数据库结构

进入数据库

mysql -uroot -p       #需要交互
mysql -uroot -p123456 #在历史命令中可查看到,容易暴露密码

MySQL数据库基本操作_第1张图片

查看当前服务器中的数据库

show databases;  #不区分大小写,分号“;”表示结束

MySQL数据库基本操作_第2张图片

查看数据库中包含的表

use 数据库名;
show 表名;

MySQL数据库基本操作_第3张图片

查看表的结构

describe [数据库名.]表名;
可缩写成:desc 表名;
desc 表名\G 以列的方式显示,每个字段属性都会一个个显示
desc 数据库名称.表名称

MySQL数据库基本操作_第4张图片

Field 字段名称
type 数据类型
Null 是否允许为空
key 主键
Default 默认值
Extra 扩展属性,例如:标志符列(标识了种子,增量/步长)1 2
id 1 3 5 7

查看mysql版本

在mysql内查看mysql 
select version();
#在linux系统中查看mysql版本
mysql -V

MySQL数据库基本操作_第5张图片

SQL语句

SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。

SQL语言分类

名称 作用
DDL 数据定义语言,用于创建数据库对象,如库、表、索引等
DML 数据操纵语言,用于对表中的数据进行管理
DQL 数据查询语言,用于从数据表中查找符合条件的数据记录
DCL 数据控制语言,用于设置或者更改数据库用户或角色权限

DDL数据定义语言

创建新的数据库

CREATE DATABASE 数据库名;

MySQL数据库基本操作_第6张图片

创建新的表

#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,…][,PRIMARY KEY (主键名)]);

create table wufan (id int NOT NULL,name char(10) NOT NULL,price decimal(5,2),PRIMARY KEY(id));

MySQL数据库基本操作_第7张图片

删除指定数据表

#如不用USE进入库中,则需加上数据库名
DROP TABLE [数据库名.]表名;

MySQL数据库基本操作_第8张图片

删除指定的数据库

DROP DATABASE 数据库名;

MySQL数据库基本操作_第9张图片

DML管理表中的数据记录

向数据表中插入新的数据记录

create table wanfan (id int NOT NULL,name char(10) NOT NULL,price decimal(5,2),PRIMARY KEY(id));
##新建一个表
insert into 表名(字段1,字段2,字段3) values(字段1的值,字段2的值,字段3的值);

insert into wanfan (id,name,price) values(1,'yuebing',5);  #插入一行内容

insert into wanfan values(4,'shaokao',20);  

MySQL数据库基本操作_第10张图片

MySQL数据库基本操作_第11张图片

查询数据记录

select name from wanfan where price=5;  #查询表中price为5的 name

MySQL数据库基本操作_第12张图片

修改,更新数据表中的数据记录

UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式]; 

update wanfan set id=5 where name='shaokao';
#将字段name为shaokao的id字段改成5

MySQL数据库基本操作_第13张图片

在数据表中删除指定的数据记录

delete from 表名 [WHERE 条件表达式];

delete from wanfan where id=5;  将id=5的记录删除

MySQL数据库基本操作_第14张图片

MySQL数据库基本操作_第15张图片

DQL查询数据记录

select 字段名 from 表名称\G         #以列表方式竖向显示
select * from 表名称 limit 2;      #只显示头2行
select * from 表名称 limit 2,1;    #显示第2行后的前1行

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jqbDOwzx-1662974044208)(F:\typorase\jpg\283.png)](https://img-blog.csdnimg.cn/d355c34ec9ed4852a41705fb4e5c2506.png)

MySQL数据库基本操作_第16张图片

MySQL数据库基本操作_第17张图片

DCL修改表名和表结构

修改表名

ALTER TABLE 旧表名 RENAME 新表名;

MySQL数据库基本操作_第18张图片

扩展表结构(添加字段)

alter table 表名 ADD 字段名 varchar(50) default '还行';

alter table wanfanbak add weidao varchar(50) default '还行';
#增加字段weidao,默认值为'还行'

MySQL数据库基本操作_第19张图片

修改字段名(列),添加唯一健

alter table 表名 change 旧列名 新列名 数据类型 [unique key];
#唯一健可以为空,但是只能一次
alter table wanfanbak change name name_1 varchar(50) unique key;
#将表wanfanbak的name列更名为name_1 数据类型为varchar 并设置成唯一健

MySQL数据库基本操作_第20张图片

每个表中只能由一个主键 ,但是许多内容都需要唯一性,这就是唯一键的作用

因为有naicha存在,所以创建不成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDzabuG8-1662974044210)(F:\typorase\jpg\290.png)]

删除字段

alter table 表名 drop 字段名;

MySQL数据库基本操作_第21张图片

使用if判断

create table if not exists class (id int(4) zerofill primary key auto_increment,student_name varchar(20) not null,cardid varchar(18) not null unique key,hobby varchar(50));

#判断class表是否存在,有则放弃,没有就创建class表
#字段一:id int(4)字段不满在前面填充0,主键,从1自动增长
#字段二:student_name varchar(20)可变长度字段,最长20字符,不能为空
#字段三:cardid varchar(18)不能为空唯一键

MySQL数据库基本操作_第22张图片

if not exists 表示检测要创建的表是否已存在,如果不存在就继续创建
int(4) zerofill 表示若数值不满4位数,则前面用“0”填充,例0001
auto_increment 表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
unique key 表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
not null 表示此字段不允许为NULL
insert into class (id,student_name,cardid) values (1,'xiaoyan',123456);
#插入新内容,主键为0001

MySQL数据库基本操作_第23张图片

mysql> insert into class (student_name,cardid) values ('xiaoyun',123456);
ERROR 1062 (23000): Duplicate entry '123456' for key 'cardid'
mysql> insert into class (student_name,cardid) values ('xiaoyun',456789);

#添加失败时,不会增加内容,但是会递增一次主键值
#添加的时候,不指定主键自增长字段值

MySQL数据库基本操作_第24张图片

数据表高级操作

克隆表,将数据表的数据记录生成到新的表中

先创建再导入
create table 新表名 like 旧表名;	  #克隆
insert into 新表名 select * from 旧表名;

MySQL数据库基本操作_第25张图片

MySQL数据库基本操作_第26张图片

MySQL数据库基本操作_第27张图片

创建的时候同时导入表中数据
create table 新表名 (select * from 旧表名);

MySQL数据库基本操作_第28张图片

获取数据表中的表结构、索引等信息
show create table 表名称;
show create table 表名称\G

MySQL数据库基本操作_第29张图片

MySQL数据库基本操作_第30张图片

清空表,删除表中的所有数据

delete删除

DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。

delete from 表名     

MySQL数据库基本操作_第31张图片

truncate删除

TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录

truncate table 表名;

MySQL数据库基本操作_第32张图片

创建临时表

临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表。

##添加临时表xuaner
create temporary table xuaner (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));

## 查看当前库中所有表
show tables;	
##在临时表中添加数据
insert into xuaner values(1,'zhangsan',123456789,'watch a film');	
##查看当前表中所有数据
select * from xuaner;
##退出数据库
quit						

##重新登录后进行查看		
mysql -u root -p
##查看之前创建的临时表中所有数据,发现已经被自动销毁
select * from xuaner;			

MySQL中常见的约束/规则

  • 主键约束(primary key) : 具有唯一且非空
  • 外键约束(foreign key) :
  • 非空约束(not null) : 不可为空
  • 唯一性约束(unique [key|index]) :唯一,可为空,但空值只允许出现一次
  • 默认值约束(default) : create (address varchar(50) default ‘默认值’);
  • 自增约束(auto_increment) : 随着记录增加,基于最新的记录的id 进行+1的自增长

外键

外键的定义

如果同一个属性字段x(address)在表一中是主键,而在表二中不是主键,则字段x称为表二的外键。

  • 以公共关键字作主键的表为主键表(父表、主表)
  • 以公共关键字作外键的表为外键表(从表、外表)

创建主表test01

create table test01 (hobid int(4),hobname varchar(50));

创建从表test02

create table test02 (id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4));

MySQL数据库基本操作_第33张图片

为主表test01添加一个主键约束。主键名建议以"PK_”开头。foreign key外键约束 primary key

alter table test01 add constraint PK_hobid primary key(hobid);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2SAqqdR-1663058312429)(F:\typorase\jpg\324.png)]

为从表test02表添加外键,并将test02表的hobid字段和test01表的hobid字段建立外键关联。

alter table test02 add constraint FK_hobid foreign key(hobid) references test01(hobid);

MySQL数据库基本操作_第34张图片

可以使用查询表语句结构命令查看外键关联

show create table test02;

desc test01;
desc test02;

MySQL数据库基本操作_第35张图片

MySQL数据库基本操作_第36张图片

插入新的数据记录时,要先主表再从表

insert into test01 values(1,'runing');
insert into test02 values(1,'zhangsan',18,1);

MySQL数据库基本操作_第37张图片

删数数据记录时,要先从表再主表

删除主键表时必须先删除其他与之关联的表。

delete from test02 where hobid=1;
delete from test01 where hobid=1;

MySQL数据库基本操作_第38张图片

你可能感兴趣的:(云,Linux,数据库,mysql)