03、基本SQL语句-库、表、记录、存储引擎
一、库
1、系统数据库
information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
mysql: 授权库,主要存储系统用户的权限信息
test: MySQL数据库系统自动创建的测试数据库
1、TABLES表:提供了关于数据库中的表的信息
mysql> use information_schema
mysql> select * from tables limit 1\G
mysql> select * from tables where TABLE_NAME='city'\G
columns表:提供了关于数据库中表的列的信息
mysql> select * from columns\G
STATISTICS表:表索引的信息
COLLATIONS表:提供校验规则和字符集对应关系
Table_catalog 数据表登记目录
Table_schema 数据表所属的数据库名
Table_name 表名称
Table_type 表类型[system view|base table] 系统表 ,数据表
Engine 使用的数据库引擎[MyISAM|CSV|InnoDB]
Version 版本,默认值10
Row_format 行格式[Compact|Dynamic|Fixed]
Table_rows 表里所存多少行数据
Avg_row_length 平均行长度
Data_length 数据长度
Max_data_length 最大数据长度
Index_length 索引长度
Data_free 空间碎片 刚刚用过的暂时不再使用
Auto_increment 做自增主键的自动增量当前值 可以通过导出再导入数据进行释放
Create_time 表的创建时间
Update_time 表的更新时间
Check_time 表的检查时间
Table_collation 表的字符校验编码集
Checksum 校验和
Create_options 创建选项
Table_comment 表的注释、备注
CREATE TABLE student(gid int primary key COMMENT '列注释') COMMENT='表注释';
2、库操作
# 增
create database 数据库名称;
# 查
show databases; # 查看所有
show create database 数据库名称; # 查看单个
select database(); # 查看当前所在库名称
# 改
alter database 数据库名称 charset='编码'; # 修改编码
# 删
drop database 数据库名称; # 删除数据库
二、表
1、表操作
"""
1.查看当前所在库名称
select database();
2.切换数据库
use 数据库名称;
"""
# 增
create table 表名(字段名称 字段类型) # 创建表一定要给字段
# 查
show tables; # 产看当前库下面所有的表名称
show create table 表名\G; # 查看指定表的详细信息(创建语句)
describe 表名; # 简写desc 查看表的结构
# 改
1. alter table 旧表名 rename 新表名;
rename table 旧表名1 to 新表名1,
旧表名2 to 新表名2,
旧表名3 to 新表名3;
2. 增加字段
alter table 表名
add 字段名 数据类型 [约束条件…],
add 字段名 数据类型 [约束条件…];
alter table 表名
add 字段名 数据类型 [约束条件…] first;
alter table 表名
add 字段名 数据类型 [约束条件…] after 字段名;
3.增加索引
# 主键索引
alter table 表名 add primary key pri_字段名(字段)
# 唯一索引
alter table 表名 add unique key uni_字段名(字段)
# 普通索引
alter table 表名 add index idx_字段名(字段)
4. 删除字段
alter table 表名
drop 字段名;
5. 修改字段
alter table 表名
modify 字段名 数据类型 [约束条件…];
alter table 表名
change 旧字段名 新字段名 旧数据类型 [约束条件…];
alter table 表名
change 旧字段名 新字段名 新数据类型 [约束条件…];
# modify 是用来修改字段类型,change 既可以修改字段名,也可以修改字段类型。
# 删
drop table 表名;
2、创建表的完整语法
create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件,
......
);
# 注意事项
1、字段名和字段类型是必须的,数字和约束条件是可选
2、在同一张表中,字段名是不能相同
3、约束条件可以有多个
4、最后一个字段结尾不能有逗号(不容易发现)
3、案例1:创建库、表
mysql> create database db01; # 创建数据库
mysql> use db01 # 切换数据库
mysql> select database(); # 查看当前所在库名称
+------------+
| database() |
+------------+
| db01 |
+------------+
mysql> create table t1(
-> id int,
-> name varchar(32),
-> sex enum('male','female'),
-> age int(3)
-> ); # 创建表
mysql> show tables; # 查看表
+----------------+
| Tables_in_db01 |
+----------------+
| t1 |
+----------------+
mysql> desc t1; # 查看表的详细信息
+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| sex | enum('male','female') | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-----------------------+------+-----+---------+-------+
4、案例2:修改示例
1. 修改存储引擎
mysql> alter table service
-> engine=innodb;
2. 添加字段
mysql> alter table student10
-> add name varchar(20) not null,
-> add age int(3) not null default 22;
mysql> alter table student10
-> add stu_num varchar(10) not null after name; # 添加name字段之后
mysql> alter table student10
-> add sex enum('male','female') default 'male' first; # 添加到最前面
3. 删除字段
mysql> alter table student10
-> drop sex;
mysql> alter table service
-> drop mac;
4. 修改字段类型modify
mysql> alter table student10
-> modify age int(3);
mysql> alter table student10
-> modify id int(11) not null primary key auto_increment; # 修改为主键
5. 增加约束(针对已有的主键增加auto_increment)
mysql> alter table student10 modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined
mysql> alter table student10 modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
6. 对已经存在的表增加复合主键
mysql> alter table service2
-> add primary key(host_ip,port);
7. 增加主键
mysql> alter table student1
-> modify name varchar(10) not null primary key;
8. 增加主键和自动增长
mysql