mysql基础命令1

快捷键

\h
\?
help

\c		放弃正在输入的命令
ctrl+c	mysql5.6之前会直接退出数据库,mysql5.7之后不会退出数据库
\q		退出数据库
\quit()

\g		命令结束符,=;
\r		重新连接数据库,重启后更新

\R		修改命令提示符
\d		修改命令提示符

\e		把命令写入文件,之后'一起执行'
\G		查看表的时候'垂直显示结果'(表的列很大的时候,避免换行)

\T		记录命令,退出数据库或\t后失效
	\T /tmp/1.txt
\t		取消命令的记录

source (\.)		在数据库读取SQL文件	
	source /tmp/a.txt
status (\s)		在数据库查看数据库状态
	mysql>\s
system (\!)		在数据库里执行命令行命令
	mysql>\! ls /
use(\u)		切换数据库
help create;
topics:
   CREATE DATABASE
   CREATE EVENT
   CREATE FUNCTION
   CREATE FUNCTION UDF
   CREATE INDEX
   CREATE LOGFILE GROUP
   CREATE PROCEDURE
   CREATE SCHEMA
   CREATE SERVER
   CREATE TABLE
   CREATE TABLESPACE
   CREATE TRIGGER
   CREATE USER
   CREATE VIEW
   SHOW
   SHOW CREATE DATABASE
   SHOW CREATE EVENT
   SHOW CREATE FUNCTION
   SHOW CREATE PROCEDURE
   SHOW CREATE SCHEMA
   SHOW CREATE TABLE
   SPATIAL INDEXES

客户端mysqladmin(库外执行)

1.修改密码

mysqladmin -uroot -p1 password 123

2.关闭数据库

#一般多实例使用
[root@db03 ~]# mysqladmin -uroot -p123 -S/tmp/mysql.sock shutdown
[root@db03 ~]# mysqladmin -uroot -p123 shutdown

#失败,原理是mysqladmin先通过mysql.sock连接数据库,再执行动作
[root@db03 ~]# mysqladmin -uroot -p123 start

3.建库

mysqladmin -uroot -p1 create xx

4.删库

mysqladmin -uroot -p1 drop xx

5.查看数据库配置variables

mysqladmin -uroot -p1 variables |grep server_id

6.确定数据库是否启动

#脚本使用

mysqladmin -uroot -p1 ping
mysqld is alive

systemctl stop mysqld
mysqladmin -uroot -p1 ping

7.查看数据库信息

[root@db03 ~]# mysqladmin -uroot -p123 status
Uptime: 50165  Threads: 1  Questions: 2  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.000
访问时间	线程数		请求	慢查询		表数	负载

6.刷新授权表(刷新bin-log 和 pos)

1.
[root@db03 ~]# mysqladmin -uroot -p123 reload
2.
mysql> flush privileges;

#做主从要先同步数据,再做主从(show master status;)
#pos起始位置最小是120(不刷新mysqladmin -uroot -p123 会越来越大)
#如果有主从,不要刷新binlog
#如果没有主从,先刷新bin-log再做主从

#刷新bin-log
[root@db03 ~]# mysqladmin -uroot -p123 flush-log

sql语句

sql语句语义种类

DDL: 数据定义语言  Data Definition Language	(create drop)
DCL: 数据控制语言  Data Control Language		(grant revoke)

DML: 数据操作语言  Data Manipulate Language	(insert delete...)
DQL: 数据查询语言  Data Query Language		(select)

DDL:数据定义语言(create drop ...)

1.针对库操作

mysql> help create database;
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name	#中括号里面的可写可不写
    [create_specification] ...#特殊选项

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

2.创建库

#1.完整的建库语句
mysql> create database db5 character set=utf8 collate=utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

#2.常用的建库语句
mysql> create database db6 charset utf8;

#是否区分大小写要看字符集的ci
create SCHEMA xx;
mysql>create schema cs2;

#配置文件中指定字符集,在SQL语句中不需要指定字符集
[root@db01 ~]# vim /etc/my.cnf
...
character_set_server=utf8

3.判断

create database IF NOT EXISTS xx;

4.查看建库语句(必须是已经存在的数据库)

mysql> show create database test;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+

5.创建数据库并指定字符集

#创建数据库的时候指定utf8
create database xx charset utf8 COLLATE utf8_general_ci;
#不指定校验规则默认就是 utf8_general_ci,一般不需要指定校验规则
create database xx charset utf8;

#查看所有字符集
show COLLATION;
+--------------------------+----------+-----+---------+----------+---------+
| Collation                | Charset  | Id  | Default | Compiled | Sortlen |
+--------------------------+----------+-----+---------+----------+---------+
#查看已经创建的数据库使用的字符集
mysql> show create database db3;
----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| mysql    | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+

#在配置文件中可以指定默认的字符集
#校验规则是ci的话,该库SQL语句支持大小写,是bin的话不支持

6.删库

drop database xx;

7.修改库字符集

#查看建库使用的字符集
show create database db2;
#修改建库字符集
alter database xx charset utf8 collate utf8_general_ci;

#建库
create database db3;
#
show create database db3;

修改库名

#该库存在数据
1.导出
2.删除旧的
3.创建新的
4.导入

#该库不存在数据
删了重建

针对表操作

1.语法

mysql> help create table;
Name: 'CREATE TABLE'
Description:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [partition_options]
    [IGNORE | REPLACE]
    [AS] query_expression

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }

2.建表

#1.建表前一定要进入一个库
use xx;
#2.查看当前所在库
select database();

#查看表
mysql> show tables;
Empty set (0.00 sec)
#3.建表,建表最少有一列----------------------------------------
create table xx(id int);

#查看表
show tables;
#查看表结构(DQL)(属性)
desc tb1;

#刚连接数据库的时候没有在任何数据库下,不能直接建表

数据类型

1.int			整数	-2^31 - 2^31-1   (-2147483648 - 2147483647)
2.tinyint		最小整数 -128 - 127	,一般会在设置非负数,取值范围是0-255,#年龄
3.varchar		字符类型(变长)(一般设置32),随数据的增长而变大	#身份证
4.char			字符类型(定长)
5.enum			枚举类型  固定选项,只能选择选项中的值  #性别
6.datetime		时间类型   #年月日时分秒格式 0000-00-00 00:00(特殊符号记得加引号)
create table xx(id int,name varchar(32),sex enum('nan','nv'),cometime datetime default now());
insert xx values(1);

#多个属性之间以,分割
#()里面的值要加'',除了纯数字
#空格表示子集,逗号表示分割

[root@db03 ~]# python
>>> 2**31
2147483648

#插入值大于int的最大值不报错,以int允许最大值插入(#注释sql_mode 重启数据库即可)
[root@db03 ~]# vim /etc/my.cnf
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
/etc/init.d/mysqld restart

数据类型测试

#int类型(id可以省略)
mysql> create table tb1(id int);

mysql> insert tb1 values(1);

mysql> insert tb1 values(11111111111);

mysql> insert tb1 values(2147483647);
#超出int属性最大值
mysql> insert tb1 values(2147483648);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert tb1 values(-2147483648);
Query OK, 1 row affected (0.00 sec)

mysql> insert tb1 values(-2147483649);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

#enum类型
mysql> create table qiudao(id int,sex enum('nan','nv'));

mysql> insert into qiudao values(1,'nan');

mysql> insert into qiudao values(1,'qiudao');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1

建表

#需求
表名: student
id
name
age
gender
cometime

#建表
create database student;
use student;
create table student(
	id int primary key auto_incrementcomment '学生id',
	name varchar(32) not null comment '学生姓名',
	age tinyint unsigned not null comment '学生年龄',
	gender enum('M','F') default('M'),
	cometime datetime default now() comment '学生性别');

#插入数据
mysql> insert into student values(1,'邱导',-18,'M',now());

mysql> insert into student values(1,'邱导',-18,'M',now());

mysql> insert into student values(1,'邱导',-18,'M',now());

mysql> insert into student values(1,'邱导',-18,'M',now());

#3.查看数据(表内有值才能看到表头,id、name等)
mysql> select * from student;
+------+--------+------+--------+---------------------+
| id   | name   | age  | gender | cometime            |
+------+--------+------+--------+---------------------+
|    1 | 邱导   |  -18 | M      | 2020-07-14 19:34:04 |
|    1 | 邱导   |  -18 | M      | 2020-07-14 19:34:08 |
|    1 | 邱导   |  -18 | M      | 2020-07-14 19:34:09 |
|    1 | 邱导   |  -18 | M      | 2020-07-14 19:34:10 |
+------+--------+------+--------+---------------------+


#建表
DROP table IF EXISTS tb_member1;
create table tb_member1(
    id bigint primary key auto_increment ,
    name varchar(20),
    sex tinyint not null default '0'
)ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

DROP table IF EXISTS tb_member2;
create table tb_member2(
    id bigint primary key auto_increment ,
    name varchar(20),
    sex tinyint not null default '0'
)ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

#创建tb_member2也可以用下面的语句  create table tb_member2 like tb_member1;

#插入数据
insert into member(id,name,sex) values (1,'jacson','0');
insert into member(name,sex) select name,sex from member;
#数据类型(上面说过)
1.int			整数	-2^31 - 2^31-1   (-2147483648 - 2147483647)
2.tinyint		最小整数 -128 - 127	#年龄,0-255
3.varchar		字符类型(变长)(32),随数据的增长而变大	#身份证
4.char			字符类型(定长)
5.enum			枚举类型  固定选项,只能选择选项中的值  #性别
6.datetime		时间类型   #年月日时分秒

#建表属性
not null			#非空

primary key			#主键(唯一,非空,不自增)
auto_increment		#自增(必须是 primary key,unique key )

unique key			#唯一键(做主键:xx unique key not null)#游戏名字注册

default				#默认值
unsigned			#非负数(紧跟数字类型后面 age tinyint unsigned)
comment				#注释

create table student1(
id int primary key auto_increment comment '学生id',
name varchar(32) not null comment '学生姓名',
age tinyint unsigned not null comment '学生年龄',
gender enum('F','M') default 'F' comment '学生性别',
cometime datetime default now() comment '入学时间');
	
#字段 数据类型 属性...comment
#空格表示子集
#同一行不同类型之间使用空格分割
#数据类型不能加引号,值才加引号
default('M') = default 'M'
#一个表尽量设置主键,主键的设置还可以增加数据的查询速度
#int类型不加引号,字符类型加引号

#查看建表语句,建表语句也可以复制粘贴执行(使用show命令查看)
| student1 | CREATE TABLE `student1` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生id',
  `name` varchar(32) NOT NULL COMMENT '学生姓名',
  `age` tinyint(3) unsigned NOT NULL COMMENT '学生年龄',
  `gender` enum('M','F') DEFAULT 'M' COMMENT '学生性别',
  `cometime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

#查看表结构,非空
desc student1;

#()不能省略
mysql> alter table test3 add name varchar(4);

#避免插入主键
mysql> insert city(name,CountryCode,District,Population) select name,CountryCode,District,Population from city;
Query OK, 65264 rows affected, 1 warning (0.88 sec)
Records: 65264  Duplicates: 0  Warnings: 1

#删除表
drop table student;

insert

#查看表结构,非空(null no)的都要指定,除了主键
desc student1;

#插入数据
mysql> insert into students values(1,'qiudao',18,'M',now());

#因为主键相同无法插入
mysql> insert into students values(1,'qiudao',18,'M',now());
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
#应该
mysql> insert into students values('2','qiudao',18,'M',now());
#该语句,没有设置默认值的都需要指定,主键不能重复

#主键已经设置自增没必要自己插入,
#正规插入数据的写法(列,值)----------------------------------------------
mysql> insert students(name,age) values('lhd',18);
mysql> insert students(name,age) values('lhd',12);
查看表
mysql> select * from students;

#into可以省略
#values最好都加上引号
#刚刚建好的表,没有插入数据的话,使用select查询数据的话,连字段都不会显示
#不能一次插入多条数据

修改表头(字段)(alter)

create database cs;
use cs
#新建表
create table qiudao(id int);
#修改表名
mysql> alter table qiudao rename qd;
#插入一个新字段(没有默认值又为空值,NULL)(必须指定 一个类型)(默认插入后面)
alter table qd add bb int;
mysql> desc qd;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id    | int(11)       | YES  |     | NULL    |       |
| sex   | enum('f','m') | YES  |     | NULL    |       |
| bb    | int(11)       | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
#插入多个新字段
alter table qd add cc int,add dd int;


#插入字段到最前面(first)(一次只能插一个)
alter table qd add ll varchar(100) first;
#6.插入字段到指定字段后面(after)
alter table qd add chenjianqing varchar(100) after daijiadong;


#删除指定字段
alter table qd drop ll;


#替换,修改表头,字段(所要修改的值的字段 类型 属性都需要指定)(change也可以修改字段属性)
alter table qd change id idd int;
alter table qd change idd id tinyint;
#修改字段属性
alter table qd modify idd int;
------------------------------------------------------------------------
#删除表数据
#删除表数据(通过bin-log可以找回来)(可以通过where指定某一行)(不会删除索引)
delete from student (where 1=1);
#删除表(找不回来)(不会触发任何触发器)
truncate (table) student;
#删除表(找不回来)
drop table student;

#在已存在的表添加主键索引(最好指定主键的名字名字)
alter table test1 add primary key pri_id(id);
show index from test1;
desc test1;

DCL数据控制语言(grant,revoke)

grant授权

#2.全库全表授权(没有grant权限)
mysql> grant all on *.* to root@'172.16.1.%' identified by '123';

#3.单库授权
mysql> grant all on mysql.* to root@'172.16.1.%' identified by '123';

#4.单表授权
mysql> grant all on mysql.user to root@'172.16.1.%' identified by '123';

#5.单列授权(脱敏)
mysql> grant select(user,host) on mysql.user to root@'172.16.1.%' identified by '123';

#扩展参数
max_queries_per_hour:一个用户每小时可发出的查询数量(#n-1)
mysql> grant all on *.* to root@'172.16.1.%' identified by '123' with max_queries_per_hour 2;

max_updates_per_hour:一个用户每小时可发出的更新数量
mysql> grant all on *.* to root@'172.16.1.%' identified by '123' with max_updates_per_hour 2;

max_connections_per_hour:一个用户每小时可连接到服务器的次数
mysql> grant all on *.* to lhd@'172.16.1.%' identified by '123' with max_connections_per_hour 2;

max_user_connetions:允许同时连接数量
mysql> grant all on *.* to lhd@'172.16.1.%' identified by '123' with max_user_connections 1;

#单列授权,脱敏
mysql> grant select(user,host),update(user) on *.* to lhd@'172.16.1.%' identified by '123';

#查看用户权限
mysql> show grants for root@'127.0.0.1';
+---------------------------------------------------------------------+
| Grants for root@127.0.0.1                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION |
+---------------------------------------------------------------------+

#ALL PRIVILEGES表示该用户的所有权限
#数据库的超级管理员可以设置多个
#grant既可以设置权限,又可以修改权限

回收权限

#1.回收权限(取消用户的VIP)
mysql> revoke select on *.* from root@'172.16.1.%';
mysql> revoke drop,delete on *.* from root@'172.16.1.%';

#2.查看用户权限
mysql> show grants for root@'172.16.1.%';
INSERT, UPDATE, DELETE, CREATE, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

#使用grant查看用户权限的时候
1.所有权限显示 ALL PRIVILEGES
2.不是所有权限显示一大堆

授权超级管理员(有所有权限)

grant all on *.* to root@'172.16.1.%' identified by '123' with grant option;

练习

1.创建学生表
2.把组员插入数据库
posted @ 2020-07-21 21:23  看萝卜在飘  阅读(148)  评论(0编辑  收藏  举报