linux mysql运维_Linux运维:MySQL的SQL语句基本使用

Liunx笔记:SQL语句的基本使用

Ago linux运维群: 93324526 笔者QQ:578843228

sql语句:一种结构化操作语言

类别 说明

DDL #DDL全拼Data Definition Language,中文:数据定义语言,主要关键字为CREATE(创建),ALTER(修改),DROP(删除)等,负责管理数据库的基础数据(不会对表的内容修改),例如:增删库,表,索引,用户等。

DCL #DCL全拼Data Control Language,中文数据控制语言,主要关键字为GRANT(授权用户),REVOKE(权限回收),COMMIT(提交),ROLLBACK(回滚)。

DML # DML全拼Data Manipulation Language,中文数据操作语言,主要关键字为SELECT(查)、INSERT(增)、DELETE(删)、UPDATE(改),主要针对数据库里的数据进行操作。

DDL(数据定义语言)(create,alter,drop) 运维 create,alter,drop

show Data Definition

DML(数据操作语言)(select,insert,delete,update) 开发 select,insert,delete,updata

help Data Manipulation

DCL(数据控制语言)(grant,revoke,commit,rollback) 运维 grant,revoke,commit,rollback

help Account Management

查看帮助:

? contents

查看库

show databases;

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema | # 此表为系统表,存储数据库内置对象的信息。

| mysql | # 此表为系统表,存储用户授权和权限相关信息,授权时会用到

| performance_schema | # 这是mysql第二条产品线增加的系统表,存储和性能相关数据。

+--------------------+

3 rows in set (0.25 sec)

创建库

help create database; -- 查看创建库的帮助

show character set; -- 查看支持的字符集

默认字符集库创建

create database aige;

show databases;

指定字符集创建

create databases aige_gbk character set gbk collate gbk_chinese_ci;

show database;

show create database aige;

几个函数的使用

select version();

select user();

use aige

select database();

select now();

system ls -l

删库:

help drop;

drop database aige;

授权用户:(三种方法)

help create user;

create user 'aige'@'localhost' identified by 'aige';

grant all on aige.* to 'aige'@'localhost';

show grants for 'aige'@'localhost';

grant all on *.* to 'system'@'localhost' identified by 'system123' with grant option; -- 相当于root

权限部分说明

权限 说明

SELECT -- 查询(表内容)

INSERT -- 插入(表内容)

UPDATE -- 修改(表内容)

DELETE -- 删除(表内容)

CREATE -- 创建(库表)

DROP -- 丢弃(库表)

REFERENCES -- 参考资料

INDEX -- 索引

ALTER -- 修改(库表)

CREATE TEMPORARY TABLES -- 创建临时表

LOCK TABLES -- 锁表

EXECUTE -- 执行

CREATE VIEW -- 创建视图

SHOW VIEW -- 查看视图

CREATE ROUTINE -- 创建存储过程

ALTER ROUTINE -- 修改存储过程

EVENT -- 事件

TRIGGER -- 触发器

GRANT -- 授权

授权,一种是百分号的方法,一种掩码是255.255.255.0 (授权主机)

查看权限

select * from mysql.db where user='aige' and host='localhost'\G

web授权安全红线

权限不能用all,而因公select,insert,update,delete,等具体权限

库不能用.,而应用专库方式 aige.*

主机不能用%,而应用内网IP段,即172.16.1.0/255.255.255.0

回收权限:

help revoke;

revoke insert on aige.* from 'aige'@'localhost';

show grants for 'aige'@'localhost';

select * from mysql.user\G

创建表:

help create table;

create table student(

id int(4) not null,

name char(20) not null,

age tinyint(2) not null default '0',

dept varchar(16) default ault null );

mysql> show create table student\G

*************************** 1. row ***************************

Table: student

Create Table:

CREATE TABLE `student` ( # CREATE TABLE是创建表的固定关键字,student为表名

`id` int(4) NOT NULL, # 学号列,数字类型,长度为4,不能为空

`name` char(20) NOT NULL, # 名字列,定常

`age` tinyint(2) NOT NULL DEFAULT '0',# 年龄列,很小的数字类型,长度为2,不能为空,默认0

`dept` varchar(16) DEFAULT NULL # 系别列,变长字符类型,长度为16,默认为空

) ENGINE=InnoDB DEFAULT CHARSET=utf8

查看表结构

show full columns from student from aige;

show full columns from student;

show columns from student; -- 和desc等价

desc student;

ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- char是定长 varchar是变长

生产场景

use sns;

set names gbk;

CREATE TABLE `subject_comment_manager` (

`subject_comment_manager_id` bigint(12) NOT NULL auto_increment COMMENT '主键',

`subject_type` tinyint(2) NOT NULL COMMENT '素材类型',

`subject_primary_key` varchar(255) NOT NULL COMMENT '素材的主键',

`subject_title` varchar(255) NOT NULL COMMENT '素材的名称',

`edit_user_nick` varchar(64) default NULL COMMENT '修改人',

`edit_user_time` timestamp NULL default NULL COMMENT '修改时间',

`edit_comment` varchar(255) default NULL COMMENT '修改的理由',

`state` tinyint(1) NOT NULL default '1' COMMENT '0代表关闭,1代表正常',

PRIMARY KEY (`subject_comment_manager_id`),

KEY `IDX_PRIMARYKEY` (`subject_primary_key`(32)), #<==括号内的32表示对前32个字符做前缀索引。

KEY `IDX_SUBJECT_TITLE` (`subject_title`(32))

KEY `index_nick_type` (`edit_user_nick`(32),`subject_type`)#<==联合索引,此行为新加的,用于给大家讲解的。实际表语句内没有此行。

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

更改表名

rename (工作基本不用)

rename table student to test;

alter table test rename to student;

添加字段

alter table 表名 add 字段 类型 其他;

CREATE TABLE `test` (

`id` int(4) NOT NULL AUTO_INCREMENT,

`name` char(20) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=UTF8;

添加到末尾

alter table test add sex char(4);

指定的列

alter table test add age int(4) after name;

第一列

alter table test add qq varchar(15) first;

添加两个字段

alter table test add age tinyint(2) first,add qq varchar(15);

改字段,用change或者modify

alter table test change age aigeage char(4) after name;

alter table test modify age char(4) after name;

索引是优化的工作之一

两种方法添加索引 主键索引和普通索引。主键索引是唯一的

当数据量以及访问量很大的时候,不适合临时建立索引,建立索引需要消耗资源。

普通索引

alter table test add index index_name(name);

create index index_qq on test(qq);

主键索引

alter table test modify id int primary key;

查看索引

show index from test\G

索引的删除

DROP INDEX [ONLINE|OFFLINE] index_name ON tbl_name

删表

drop table student;

use aige

drop table test;

CREATE TABLE test (

id int(4) NOT NULL AUTO_INCREMENT,

name char(20) NOT NULL,

PRIMARY KEY (id)

) ;

desc test;

插表

insert into test(id,name) values(1,'aige');

select * from test;

insert into test(name) values('can');

按顺序插,不指定字段

insert into test values('can-H');

插两行

insert into test values(4,'zuma'),(5,'kaka');

INSERT INTO `test` VALUES (1,'aige'),(2,'oldgirl'),(3,'inca'),(4,'zuma'),(5,'kaka');

备份

shell:mysqldump -uroot -paige123 -B aige >/opt/bak.sql

mysql:source /opt/bak.sql;

查询

select id,name from aige.test;

select * from test limit 2; -- 前两行

select * from test limit 2,3; -- 从第二行取三行,不包括第二行

select * from test where name='kaka';

排序查询

select id,name from test where id>1 order by id asc; -- 正序

select * from test where id>1 order by id desc; -- 反序

修改表内容

update test set name='Can' where id=2;

mysql -U 登录,防止误删。

至于防止误操作导致上述数据库故障案例的方法之一,请读者到老男孩的博客http://oldboy.blog.51cto.com/2561410/1321061查看。

删除

delete from test where id=1; -- 不加条件会清空表

慎用删除。 用uptate伪删除

alter table test add state tinyint(2) not null default 1;

update test set state=0 where name='aige';

清空表

truncate table test;

truncate和delete的区别

truncate不带where子句的delete语句功能相同:二者均删除表中的全部行,但truncate比delete速度快

truncate通过释放存储表数据所用的数据页来删除数据,并且只在事物日志中记录页的释放,因此使用的系统和事物日志资源少。

delete语句每次删除一行,并在事物日志中为所删除的每行记录一项。

你可能感兴趣的:(linux,mysql运维)