数据库(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;