MYSQL高效基础学习系列1

本文深入讲解MYSQL数据库的基础概念,包括数据库、表、记录的操作,数据类型及约束条件,以及DDL、DML、DCL语句的使用实例。涵盖存储引擎、表结构创建、数据增删改查、主键、唯一键、外键的使用,帮助读者快速掌握MYSQL核心技能。
摘要由CSDN通过智能技术生成

目录

数据库基本概念

1.数据库服务器:运行数据库管理软件的计算机
2.数据库管理软件:mysql,oracle,db2,slqserver
3.库:文件夹
4.表:文件
5.记录:事物一系列典型的特征,如egon,male,18等
6.数据:描述事物特征的符号

关系型数据库需要有表结构
非关系型数据库是key-value存储的,没有表结构

操作库,表和记录

操作文件夹(库)

	**增**
		create database db1 charset utf8;  #命名规则:唯一性 不能使用关键字如create select 不能使用纯数字 最长128位
	**查**
		show creat database db1;
		show databases;
	**改**
		alter database db1 charset gbk;
	**删**
		drop database db1;

操作文件(表)
切换文件夹:use db1
查看当前所在文件夹:select databse();
1.存储引擎就是表的类型
2.查看MYsql支持的存储引擎用show engines;
3.指定表类型/存储引擎
create table t1(id int)engine=innodb;
create table t2(id int)engine=memory; 重启一下mysql 就没了
create table t3(id int)engine=blackhole;
create table t4(id int)engine=myisam;

**增**
	create table1(id int, name char);   frm格式文件就是表结构 ibd格式就是表内的数据
	create table 表名(
	字段名1 类型[(宽度) 约束条件],
	字段名2 类型[(宽度) 约束条件],
	字段名3 类型[(宽度) 约束条件],
	);
**查**
	show create table t1;
	show tables;
	desc t1;
**改**
	alter table t1 modify name char(6);
	alter table t1 change name NAME char(7);
	1修改表名
		alter table 表名  rename 新表名
	2.增加字段
		alter table 表名  add 字段名 数据类型 [完整性约束条件],add 字段名 数据类型 [完整性约束条件];
		alter table 表名  add 字段名 数据类型 [完整性约束条件] first;
		alter table 表名  add 字段名 数据类型 [完整性约束条件] after 字段名;
	3.删除字段
		alter table 表名  drop 字段名
	4.修改字段
		alter table 表名  modify 字段名 数据类型 [完整性约束条件];
		alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整性约束条件];
		alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束条件];
**删**
	drop table t1;
复制表
	create table t1 select 字段名 from mysql.user;
	只复制表结构
	create table t1 select 字段名 from mysql.user where 1>5;
	create table t1 like mysql.user;

操作文件内容(记录)

**增**
	insert t1(id,name) values(1,'owen1'),(2,'owen2'),(3,'owen3');
	insert t1 values(1,'owen1'),(2,'owen2'),(3,'owen3');
	insert t1(字段1,字段2) select  (字段1,字段2) from t2 
**查**
	select id,name from db1.t1;
	select * from db1.t1;
**改**
	update db1.t1 set name='SB';
	update db1.t1 set name='ALEX' where id=2;
**删**
	delete from t1;  #最好用 truncate t1;
	delete from t1 where id=2;

语句按功能分为:
1.DDL语句 数据库定义语言:数据库、表、视图、索引、存储过程、 例如create drop alter
2.DML语句 数据库操纵语言:插入数据insert、删除数据delete、更新数据update、查询数据select
3.DCL语句 数据库控制语言:例如控制用户的访问权限grant、remoke

数据类型

整数类型
在这里插入图片描述
日期类型

DATE TIME DATATIME TIMESTAMP YEAR五种日期类型
检验代码:

mysql> create table student(
    -> id int,
    -> name char(6),
    -> born_year year,
    -> birth_date date,
    -> class_time time,
    -> reg_time datetime
    -> );
mysql> insert into student values
    -> (1,'egon',now(),now(),now(),now());

\c终止运行
mysql> insert into t1 values('dd);
'> \c
'> '\c 缺少的引号要补齐方可终止

字符类型

char :定长的字符 存取速度快 但浪费空间(常用)
varchar:变长的字符 节省空间 但存取速度慢

#宽度指的是字符的个数

create table t13(name char(5)); #定长:不够5个字符则补全
create table t14(name varchar(5)); #变长:传几个就存几个

insert into t13 values('李杰 '); #‘李杰   ’
insert into t14 values('李杰 '); #‘李杰 ’

select name from t13;
select char_length(name) from t13;#2把末尾的空格全部去掉
select char_length(name) from t14;#3

select name from t13 where name='李杰              '#不管末尾的空格 所以可以查到
select name from t13 where name like '李杰 '#考虑空格

name char(5)
owen |alex |wxx   |

name varchar(5)
1bytes+egon|1bytes+owen
4+egon|4+owen

存储文件尽量精简! 定长的数据往前放

枚举类型与集合类型
字段的值只能在给定范围中选择,如单选框,多选框
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女famale
set 多选 在给定范围内可以选一个或多个以上的值 如爱好

为字段指定的约束条件

约束条件not null与default

create table consumer(
id int,
name char(16),
sex enum('male','famale'),
hobbies set('play','music','read','run')
);
insert into consumer values
(1,'owen','male','vip2','music,run');
#不在选项范围中的传入 要么报错要么传入为空

约束条件unique key
mysql> create table ii(
-> id int unique,
-> name char(10) unique
-> );
mysql> insert into ii values
-> (1,‘IT’),
-> (2,‘IT’);
ERROR 1062 (23000): Duplicate entry ‘IT’ for key ‘name’

create table t15(
id int(11) unsigned zerofill
);
desc t15;

NULL:是否允许传入空值
default:默认值设为什么

create table t16(
	id int,
	name char(6),
	sex enum('male','famale') not null default 'male'
);
insert into t16(id,name) values(1,'owen');

#key:唯一的主键UNI
unique key 
create table department(
	id int,
	name char(10)
);
insert into department values
(1,'IT'),
(2,'IT');
#方式一:
create table ii(
	id int unique,
	name char(10) unique
);
insert into ii values
(1,'IT'),
(2,'IT');
#方式二:
```javascript
create table ii(
	id int,
	name char(10)unique(id),
	unique(name)
);
insert into ii values
(1,'IT'),
(2,'IT');
#联合唯一
create table services(
	id int ,
	ip char(15),
	port int,
	unique(id),#单列唯一UNI
	unique(ip,port) #联合唯一MUL
);
insert into services values
(1,'192.168.11.10',80),
(2,'192.168.11.10',81),
(3,'192.168.11.10',80);#联合唯一不符合 出错

primary key主键
约束:not null unique 不为空且唯一
存储引擎(innodb):对于innodb存储引擎来说,一张表内必须有一个主键

#单列主键
create table t27(
	id int primary key,  #一般id字段设置为主键
	name char(16)
);
insert into t27 values
(1,'owen'),
(2,'dd');
insert into t27 values
(2,'sdkf');#主键重复 将出错
insert into t27 values
('sdkf');#id为0
#复合主键

create table t27(
	ip char(15) ,  
	name char(16),
	primary key(ip,port)
);
insert into t27 values
('dddd','sdds'),
('dddd','sdds');#将出错

auto_increment自动增长约束
create table t20(
	id int primary key auto_increment,
	name char(15)
);
insert into t20(name) values
('owne'),
('dsf'),
('dfds');
insert into t20(id,name) values
(7,'ddfd');#可以指定id字段
insert into t20(name) values
('owne'),
('dsf'),
('dfds'); #从末尾的id开始增长

#了解
show variables like ‘auto_inc%’;#%代表任意个数的任意字符
auto_increment_increment #步长 默认为1
auto_increment_offset #起始偏移量 默认1
#设置步长
set session auto_increment_increment=5;#会话步长
set global auto_increment_increment=5;#全局步长
#设置起始偏移量
set global auto_increment_increment=6;
强调:起始偏移量<=步长

清空表 :
drop table t20 #也删不干净
delete from t20; #删不干净 起始偏移量删不了 常与where连用 删固定范围的记录
truncate t20;#把表清空 应该用truncate

foreign key:建立表之间的关系
why?:不可能把数据存入一张表呀 存储空间和管理方便
#先建被关联的表,并保证被关联字段唯一

create table dep(
	id int primary key,
	name char(16),
	comment char(50)
); 
#再建关联的表,删除先删此表

create table emp(
	id int primary key,
	name char(10),
	sex enum('m','f'),
	dep_id int,
	foreign key(dep_id) references dep(id) #要慎用
	on delete cascade    #删除关联
	on update cascade   #更新关联     
);

#先往被关联表内插入记录
insert into dep values
(1,'IT','技术能力有限'),
(2,'财务','花钱多');
#再往关联表插入
insert into emp values
(1,'ww','f',1)
(2,'ww','f',2)

delete from dep where id=1;#同时两个表删除成功
update dep set id=202 where id=2;

表之间的对应关系:(多换位思考)
1.多对一(一对多)
书(press_id int,foreign key(press_id) references press(id)) 出版社

create table press(                                     #建立出版社的表(被关联表)一
	id int primary key auto_increment, #自动增长约束
	name varchar(20)
);
create table book(                      #建立书的表 (关联表)多
	id int primary key auto_increment,
	name varchar(20),
	press_id int not null,
	foreign key(press_id) references press(id)
	on delete cascade
	on update cascade
);
insert into press(name) values
('我一定行出版社'),
('一定让他们知道出版社');
insert into book(name,press_id) values
("owen's life",1),
("owen's fantistic life",1),
("owen's girls",2);

2.多对多 (需要第三张表 把关系独立出来)
书 作者

create table author(
id int primary key auto_increment,
name varchar(20),
);
create table author2book(  #找book_id与author_id之间的对应关系
	id int not null unique auto_increment,
	book_id int not null,
	author_id int not null,
	constraint fk_ author foreign key(author_id)  references author(id)
	on delete cascade
	on update cascade,
	constraint fk_ book foreign key(book_id)  references book(id)
	on delete cascade
	on update cascade,
	primary key(author_id,book_id)
);
insert into author2book(author_id,book_id) values
(1,1),
(1,2),
(2,1);

3.一对一 foreign key+unique
customer student

create table customer(   #被关联的顾客
id int primary key auto_increment,
name varchar(20) not null,
qq varchar(10) not null,
phone char(16) not null
);
create table student(
id int primary key auto_increment,
class_name varchar(20) not null,
customer_id int unique,#该字段一定设置为唯一unique的 才是一对一
foreign key(customer_id) references customer(id) #外键的字段一定要保证唯一unique
on delete cascade
on update cascade
);
insert into customer (name,qq,phone) values
('dd',44444,123345),
('ddd',44434,1233),
('d334d',44234444,12334534);
insert into student(class_name,customer_id) values
('5class',2),
('2class',1);

·

·

·

·

创建数据库用 navicat for mysql软件 比较方便
下一节将详细介绍DDL、DML、DCL数据库语句的使用实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值