MySQL数据库管理
数据库--->数据表--->行(记录):用来描述一个对象的信息
列(字段):用来描述对象的一个属性
1. 常用的数据类型:
| 类型 | 含义 |
|---|---|
| tinyint(n) | 1个字节,范围(-128~127) |
| smallint(n) | 2个字节,范围(-32768~32767) |
| mediumint(n) | 3个字节,范围(-8388608~8388607) |
| int(n) | 4个字节(32个比特位),整数型,范围(-2147483648~2147483647) |
| bigint(n) | 8个字节,整数型,范围(+-9.22*10的18次方) |
| float(m,d) | 单精度浮点,8位精度,4字节32位。m数字总个数,d小数位 |
| double(m,d) | 双精度浮点,16位精度,8字节64位 。m总个数,d小数位 |
| char | 固定长度的字符类型 |
| varchar | 可变长度的字符类型 |
| text | 文本 |
| image | 图片 |
| decimal(5,2) | 5个有效长度数字,小数点后面有2位(例如123.56) |
2. 查看MySQL是否安装完成
MySQL的默认端口号为3306
systemctl status mysql
netstat -nltp | grep mysqld
ss -nltp | grep mysqld
2.2 登录本地数据库
[root@linux7-1 ~]#mysql -u root -p
[root@linux7-1 ~]#mysql -u root -pabc123
2.3 查看版本号的方式
[root@linux7-1 ~]#mysql -u root -p
Your MySQL connection id is 6
Server version: 5.7.17 Source distribution
[root@linux7-1 ~]#mysql -V
mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper
3. 查看数据库结构
SHOW DATABASES; #大小写不区分,分号“;"表示结束
3.1 查看数据库中包含的表
方法一:
USE 数据库名; #切换库
SHOW TABLES; #查看库中的表
方法二:
show tables from 数据库名; #直接查看某个库中的表
#例如:show tables from mysql;
3.2 查看表中的所有信息
show tables;
3.3 查看某个表包含多少字段
方法一:
USE 数据库名; #切换库
DESCRIBE 表名; #查看指定表的结构
方法二:
DESCRIBE [数据库名.]表名;
可缩写成:DESC 数据库名.表名;
#例如:desc mysql.user;
4. SQL语句
关系型数据库,都是使用SQL语句来管理数据库中的数据。
SQL,即结构化查询语言(Structured Query Language) 。
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
4.1 SQL中的名词介绍
-
数据库:database
-
表:table,行:row 列:column
-
索引:index
-
视图:view
-
存储过程:procedure
-
存储函数:function
-
触发器:trigger
-
事件调度器:event scheduler,任务计划
-
用户:user
-
权限:privilege
4.2 SQL语言分类:
| 语言 | 含义 |
|---|---|
| DDL | 数据定义语言,用于创建数据库对象,如库、表、索引等 |
| DML | 数据操纵语言,用于对表中的数据进行管理 |
| DQL | 数据查询语言,用于从数据表中查找符合条件的数据记录 |
| DCL | 数据控制语言,用于设置或者更改数据库用户或角色权限 |
5. 增删改查
5.1 创建数据库
CREATE DATABASE 数据库名;
#例:create database ww;
5.2 创建新的表
CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段,不允许取空值(NULL),值也不允许重复,主键字段的值是唯一的。一个表只能有一个主键。
5.3 删除指定的数据表
DROP TABLE [数据库名.]表名;
#例:DROP TABLE ww;
5.4 删除指定的数据库
DROP DATABASE 数据库名;
#例:DROP DATABASE ww;
5.5 创建带有规则的表
按照规则添加表中的信息
选择性添加内容
查看想知道的内容信息
5.6 纵向输出(/G)
默认的横向输出东西太多容易乱
5.7 想查看前两行的内容
想查看第一行内容
想查看后两行内容
注释:
比如想查看20-30行的内容(19,11)
查看要从19行开始算起,19行往后的第一行就是20行,往后到30号有10行还需要加上19本身这样一行开始算起,所有说想查看20-30行的内容就是(19,11)
想修改某一段的信息 (update)(where)
输出所有性别为男的行
输出所有性别为男并且年龄为26岁的(and)
输出性别为男或者为女的行(or)
想删除一条数据
6. 修改表名和表结构
1)修改表名
alter table 旧表名 rename 新表名;
2)扩展表结构(增加字段)
alter table 表名 add address varchar(50) default '地址不详';
#default '地址不详':表示次字段设置默认值 地址不详;可与 not null 配合使用
3)修改字段(列)名,添加唯一键
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
#change 可以修改字段名,数据类型,约束等所有项
4)删除字段
alter table 表名 drop 字段名;
主键primary key 和 唯一键unique key:
共同点:字段的值都是唯一的,不允许有重复值。
不同点:
- 自定义的表中只能有一个主键,但是可以有多个唯一键。
- 主键字段中不允许有null值,唯一键允许有null值。
(系统的表中可以有多个主键)
7. MYSQL常见的约束
- 主键约束(primary key) PK
- 自增长约束(auto_increment)
- 非空约束(not null)
- 唯一性约束(unique)
- 默认值约束(default)
- 零填充约束(zerofill)
- 外键约束(foreign key)FK
7.1 案例演示:
下面的案例将一次性演示:主键约束、自增长约束、非空约束、唯一性约束、默认约束、零填充约束。
use ww; #切换到ww库
create table if not exists a ( #创建表a
id int(4) zerofill primary key auto_increment, #对id字段设置零填充约束、主键约束、自增长约束
name varchar(10) not null default '匿名', #对name字段设置非空约束、默认值约束
cardid int(18) not null unique key, #对cardid字段设置非空约束、唯一键约束
hobby varchar(50));
-----------以下为注释-----------------------------------
if not exists:
表示检测要创建的表是否已存在,如果不存在就继续创建。如果存在就忽略,不进行创建。
int(4) zerofill:
零填充约束,表示若数值不满4位数,则前面用“0”填充到4位,例0001,0012。
#int(11) zerofill:表示若数值不满11位数,则前面用“0”填充到11位,例如00000001234。
primary key:
表示此字段有主键约束,此字段数据不可以重复且不允许为NULL,一张表中只能有一个主键。
auto_increment:
表示此字段为自增长字段,即每条记录自动递增1。
一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,以避免序号重复。
如果不指定则默认从1开始递增;
自增长字段数据不可以重复;
自增长字段必须是主键;
如果添加的记录数据没有指定此字段的值,那么添加失败也会自动递增一次。
auto_increment约束的字段只能是整数型。
unique key:
表示此字段有唯一键约束,此字段数据不可以重复;一张表中只能有一个主键,但是一张表中可以有多个唯一键。
not null:
表示此字段不允许为NULL。
default '匿名':
表示该字段的默认值为“匿名”。
7.2 插入数据记录
insert into w1 (name,phone,address) values('wa', 123456, '深圳');
7.3 再次插入数据,此时依旧不添加id字段,他会因为约束自增长1位数填充为0002
insert into w1 (name,phone,address) values('sa', 123098, '黑龙江');
7.4 自增长,如果添加失败也会自动递增一次,数值会被占用
因为设置的地址为唯一键,是不能重复的,所以反复多次因为执行错误,但是自增长的特性,自增长不会中断计数
insert into w1 (name,phone,address) values('es', 1238, '黑龙江');
错误几次,就能看到实验的结果
insert into w1 (name,phone,address) values('es', 1238, '白家岗');
7.5 指定自增长的数值,后面的数值会跟着后面继续自增长
这边已经吧id设置为15,后面的数值会从15开始计数
insert into w1 (id,phone,address) values(15, 13294, '塔寨');
因为自增长的特性,这段字段会增长+1
insert into w1 (phone,address) values(32133, '烟台');
8. 总结
创建
create database 库名;
use 库名;
create table 表明 (字段去 数据类型 [约束], 字段2 数据类型 [约束], ...., [primary kep (字段1)]);
插入
insert into 表名 (字段1, .....) values (值1, ......);
insert into 表明 values (值1, ....); #此方法需要所有字段填入值
查询
select * from 表名 [where 条件表达式];
select 字段,..... from 表明;
show databases;
show tables;
desc 表名;
修改数据
update 表名 set 字段=值 where 条件表达式;
删除
delete from 表名 where 条件表达式;
drop table 表名;
drop database 库名;
create database/table
insert into
delete
drop database/table
select
update XX set
alter table XXX rename 修改表名称
add 添加字段 或者 主键
change 修改 字段名称 数据类型 约束属性
drop 删除字段
MySQL 的6 种约束
非空约束 not null
主键约束 primary key
唯一键约束 unique key
默认值约束 default
自增长约束 auto_increment
外键约束 foreign key