SQL客户端slient内置命令
db01 [world]>help \c 类似于ctrl+c,结束上一条命令 \G 格式化输出,一般针对列特别多的场景使用 exit(\q) 退出当前会话 source 导入sql脚本,类似于< system 调用linux中的命令,比如system cd /tmp && ls 调用linux中的命令
DDL库定义
DDL数据定义语言指对于库和表定义的创建删除修改
1.创建数据库
show databases; 查看所有数据库 create database school; 创建school数据库 create schema sch; 创建数据库sch create database test charset utf8; 创建字符集为utf8的test数据库; show charset; 查看数据库支持的所有字符集 show collation;看字符集支持的校队规则 create database xyz charset utf8mb4 collate utf8mb4_bin;创建字符集为utf8mb4且校队规则为大小写敏感的xyz数据库 show create database xyz; 查看xyz数据库详细信息 注:在MySQL中,Create Schema和Create Database的作用是一样的 建库规范 1.库名不能有大写字母,不能使用内置字符 2.建库要加字符集 3.库名不能有数字开头 4.库名要和业务相关 建库标准语句 mysql> create database db charset utf8mb4; mysql> show create database db;
2.删除数据库
drop database xyz; (生产中禁用命令)
3.修改数据库
show create database school;查看school库的详细信息 alter database school charset utf8;修改school库的字符集 注意:修改字符集,修改后的字符集一定是原字符集的严格超集
4.查询数据库
show databases; 查看所有数据库 show create database school;查看school库的详细信息
DDL表定义
语法结构
create table stu( 列1 属性(数据类型、约束、其他属性) , 列2 属性, 列3 属性 )
1.创建表
use school;
create table stu(
id int not null primary key auto_increment comment '学号',
name varchar(255) not null comment '姓名',
sage tinyint unsigned not null default 0 comment '年龄',
sgender enum('m','f','n') not null default 'n' comment '性别',
sfz char(18) not null unique comment '身份证',
intime timestamp not null default now() comment '入学时间'
)engine=innodb charset=utf8 comment '学生表';
建表规范:
1. 表名小写
2. 不能是数字开头
3. 注意字符集和存储引擎
4. 表名和业务有关
5. 选择合适的数据类型,剪短,足够使用
6. 每个列都要有注释
7. 每个列设置为非空,无法保证非空,用0来填充。
8. 必须有主键
9. 每个列尽量设置not null
10.列名不要太长
2.删除表
drop table t1; (生产中禁用命令)
3.表查询
use school 进入到school库 show tables; 显示school库下所有的表名 desc stu;显示school库的stu表的所有列信息 show create table stu;显示school库的stu表的建表语句 create table ceshi like stu;创建一个和stu表一样的ceshi表 desc ceshi;查看ceshi表
4.修改表
修改后的B表是原始表的严格超集。表名无法修改 alter table 表名 add (column) ... column可以省略
在stu表中添加qq列
show tables; 显示school库下所有的表名 desc stu;显示school库的stu表的所有列信息 alter table stu add qq varchar(20) not null unique comment 'qq号';
在name后加微信列
alter table stu add wechat varchar(64) not null unique comment '微信号' after name;
在id列前加一个新列num
alter table stu add num int not null comment '数字' first;
把刚才添加的列都删掉(危险)
alter table stu drop num; alter table stu drop qq; alter table stu drop wechat;
修改name数据类型的属性
alter table stu modify name varchar(128) not null; 修改属性一定要把与原表列重叠的的属性都加上
将sgender 改为 sg ,数据类型改为 CHAR 类型
alter table stu change sgender sg char(1) not null default 'n'; 注意:modify只能改字段数据类型完整约束,不能改字段名,但是change可以。change修改的范围和力度要比modify 大。 修改数据类型,修改字段位置 ---用modify;修改名字 --就用change
线上DDL(alter)操作对于生产的影响
SQL审核平台:yearing,incception 扩展:MySQL元数据类似于linux的inode信息。 说明:在MySQL中,DDL语句在对表进行操作时,是要锁‘元数据表’的。此时所有修改类的命令无法正常运行,所以在是对于大表,业务繁忙的表,进行线上DDL操作时 ,要谨慎,尽量避开业务繁忙期,否则会影响线上业务 。 在需要紧急上线情况下,可以使用pt-osc(pt-online-schema-change),gh-ost工具(在线DDL工具),减少锁表时间,对业务的影响。 mysql8.0以后已经整合了这个工具,可以不用pt工具。
DCL应用
grant all on *.* to root@'10.0.0.%' identified by '123'; 授权用户 show grants for root@'10.0.0.%';查看授权 revoke delete on app.* from app@'10.0.0.%';回收权限