MySQL小笔记

数据库(DB)

管理数据库软件(DBMS)

常见数据库:1.关系型数据库(有Oracle、DB2、Microsoft SQL Server、MicrosoftAccess,MySQL、浪潮K-DB 、武汉达梦、南大通用、人大金仓)

2.非关系型数据库(:redis、mongodb)

Mysql架构

共分为四层:网络连接层(客户端连接服务端)、数据库服务层(sql优化、存储引擎层(执行)、系统文件层(落盘)

登录格式:mysql -u 用户名 -h 服务器的主机地址 -p密码

mysql -uroot -p:进入MySQL;

再输入密码

show databases; :展示所有数据库;

%:匹配任意零个或多个字符

_ :匹配任意单个字符

show databases like 'my%'; :展示数据名称包含my字符的数据;

show databases like 'my'; :展示数据名称为my的数据

show databases like '___'; :展示名称为三个字符的数据;

select now(); :展示当前的时间;

select version(); :显示当前的版本;

select user(); :查看当前登录的用户及主机名;

create database+数据库名字; :创建新的数据库,数据库名字不能重复,创建数据库时可以用 `数据库名字` 来创建名字特殊的数据库;

查看创建数据库的语句:show create database+ 数据库名;

use+数据库名字; :使用数据库,使用后可以输入select database();来查看数据库位置,可以使用use mysql来返回;

drop database+数据库名字; :删除该数据库;

查看所有支持的字符集:show character set;

查看指定字符集:show character set like 'gbk';

通过变量查看:show variables like 'character_set%';

列级更改为modify,表级更改为add/drop

create table+表名(名字 + 数据类型(约束), ...); 创建表格;创建表格时要到建立的数据库中,提前用"use+数据库名字;"即可。

show tables; 显示所属数据库中的表格;

desc+表格名字; :显示表格结构;

show tables from +另一个数据库名字; :查看另一个库的表格信息;

drop table if exists+表格名字; :删除表格;

select * from+ 表格名字; 显示表格内容;

alter table +表格名字 rename+新表格名字; :修改表名;

alter table +表格名字 add 新列名+列名类型 (after/first +已存在的列名); :添加新列;

alter table 表名 DROP 列名; 删除列;

alter table 表名 change 旧列名+新列名+列类型;修改列名与列型;

alter table 表名 modify 列名 列类型; 修改列类型;

alter table 表名 modify 列名 列类型 after/first 某列;修改列位置;

create table 新表名 like 源表; :复制表结构;

create table +新表名 select * from+ 源表;:复制表结构+数据;

insert into student2 select * from student1;:复制表数据;

数据字典:类似于系统编目或花名册,它保存数据库服务器上的元数据信息(数据库的整体属性信息)

在mysql中show databases; 进入information_schema 再select*from columns_extensions\G 即可看到表格信息,包括所属数据库;

create table+表名(名字 数据类型 not null); 创建表并令名字不能为空值;

alter table 表格名字 modify 名字 数据类型 not null; 修改表格名字不能输入空值

alter table 表名 modify id int null;  删除not null;或者 null 可省略,默认为 null

create table 表名(id int not null, name varchar(30) not null, sex

char(2) default '女'); id非空值,name非空值,默认值性别为女

insert into 表名(id,name) values('1001','林雪'); 设置id和名字;

insert into teacher1 values('1002','石磊','男');  设置id和名字与性别;(输入数据的结构与表结构相同)

增加默认值:例: alter table 表格名字 modify sex char(2) default '女'; 更改性别默认值为女

create table 表名( class_name varchar(20) not null comment '教室',class_room varchar(20) default '计科2');  创建表格将class_name 注释为教室,默认值为计科2

show create table 表格名字\G  查看列描述

主键约束

主键:primary key,用来唯一的约束该字段里面的数据

特点:主键字段不能为空,不能重复

一张表中最多只能有一个主键

主键所在的列通常是整数类型

主键约束是最频繁的约束

create table 表名 ( id int unsigned primary key comment '学号不能为空', name varchar(20) not null ,sex char(2) default '男'); 创建表名并设置其id为主键;  再次插入同一种id出错,因为需要保持唯一性

unsigned是没有符号的意思,因为int包括""+"-"正负符号;

修改表,追加主键:alter table 表名 add primary key(id); 将表格中的id改为主键 注意:如果该字段内有重复值,则不能以该字段新增为主键,必须先把重复的数据去掉然后才能添加该列为主键

删除主键:alter table 表名 drop primary key;  

复合主键:在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键,这些字段合在一起是一个主键,也就是让多个字段联合在一起作为唯一标识

例如:create table 表名 (id int, hostname varchar(10), ip varchar(20), port int unsigned, primary key (ip,port));

主键自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值

alter table student1 modify id int auto_increment;

自增长字段必须是整数,自增长字段可以不设置初始值,默认从1开始递增.

被自增长的字段必须作为主键或者其他具有唯一性的键使用,(必须保证这一列字段具有唯一性

的字段)

自增长字段也可以插入数据,只要不与已有数据重复即可,之后新增数据会从最大值开始递增.

任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)

一张表当中最多只能有一个自增长的列

约束的字段必须具备 NOT NULL 属性

例如:alter table 表名 modify id int auto_increment;(要在有主键的前提下设置自增长)

指定自增长的起始值:如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。 例:create table 表名 ( id int primary key auto_increment, systemname varchar(10) not null )auto_increment=100;

唯一性约束

作用:限制某个字段/某列的值不能重复

唯一键和主键的关系:主键更多的是标识唯一性

唯一键更多的是保证在业务上,不要和别的信息出现重复

主键只能有一个,唯一键能设置多个

主键和唯一键不是对立关系而是补充关系,目的是让数据库创建出一个表具有非常强的约束,彻

底杜绝用户的误插入,在一张表当中,可以有一个主键,也可以同时具有唯一键, 它们不是用来对

比的,只是负责数据在不同层面的唯一性,既要保证选择成为主键的属性字段不能重复不能为空,

同时也要保证本身具有唯一性的列的字段不能出现冲突

主键用来查找,唯一键用来保证数据的完整性

例:create table 表名( id int primary key, name varchar(20) unique comment '名子不能重名,可以为空' );创建表名,id为主键,name是唯一键,注释为:名子不能重名,可以为空

唯一键冲突,自增涨字段值不连续

例:设置id列为自增长 alter table 表名 modify id int auto_increment;  插入一条记录: insert into 表格名字(name) values('张磊磊'); 再插入一条相同姓名记录,由于上述唯一键冲突,自增长会出现不连续,再插入一条不重复的新记录:

insert into t4(name) values('钱明');

结果:select * from t4;

+----+-----------+

| id | name |

+----+-----------+

| 1 | 张磊磊 |

| 3 | 钱明 |

+----+-----------+

外键约束

主表(父表):被引用的表、被参考的表

从表(子表):引用别人的表,参考别人的表

外键:从表中的某个字段引用自主表的某个字段或多个字段

引用键:主表被引用的字段

外键约束主要定义在从表上,主表则必须是有主键约束或唯一键约束.当定义外键后,要求外键列数据必须在主表的主键列存在或为null.

格式 foreign key (从表的字段名称) references 主表名字(主表的字段名称)

注意

主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表

是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

必须为主表定义主键。

主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

外键中列的数目必须和主表的主键中列的数目相同(联合主键)

外键中列的数据类型必须和主表主键中对应列的数据类型相同。

例:定义主表:create table myclass3(id int primary key, name varchar(20) not null ;

定义从表: create table myclass3_stu( id int primary key, name varchar(30) not null,class_id int, foreign key (class_id) references myclass3(id) );

从表中,收到外键控制,可以使用null替代,表示没有分配班级,如:insert into myclass3_stu values(3,'wang',null);

检查约束

检查约束(check)是用来检查数据表中字段值有效性的一种手段,一般用于设置值的范围

例:create table 表名(id int primary key, name varchar(20), salary float,check(salary>0 and salary<10000) );

修改表时添加检查约束:alter table 表名 add constraint 任意名字 check(id>0);

删除表的约束:

删除not null 约束、default约束 : alter table 表名 modify 列名 类型;

删除unique 约束 :alter table 表名 drop index 惟一约束名;

删除primary key约束: alter table 表名 drop primary key;

删除foreign key约束: alter table 表名 drop foreign key 外键名;

删除check约束 :alter table 表明 drop check 约束名;

存储引擎

MySQL的核心就是存储引擎,插件式存储引擎是MySQL数据库最重要的特性之一,其中包括:MyISAM,InnoDB(默认引擎),MEMORY,Archive,Federated ,CSV,BlackHole,ERFORMANCE_SCHEMA等,相较于MyISAM 和MEMORY ,InnoDB支持外键功能

查看支持的引擎命令:show engines\G

查看当前默认存储引擎:show variables like '%storage_engine%';

在创建表时, 可以指定表的存储引擎:create table (...) engine=InnoDB;

相关推荐
程序员塔塔喵3 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
_孤傲_4 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
为思念酝酿的痛6 小时前
MySQL的操作
数据库·mysql
Umi·8 小时前
MySQL库表操作
数据库·mysql
星光开发者9 小时前
基于springboot智慧草场牛羊管理系统-计算机毕设【课程设计】50360
vue.js·spring boot·后端·mysql·php·课程设计·express
猫咪很可爱10 小时前
MySQL 视图与只读用户:安全查询的完整实践指南
数据库·sql·mysql
猫咪很可爱10 小时前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
秦时明月之君临天下11 小时前
MySQL purge 参数详解:innodb_purge_threads 与 innodb_purge_batch_size
数据库·mysql·1024程序员节
努力努力再努力wz12 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql