1. 程式人生 > 實用技巧 >mysql基礎命令1

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.關閉資料庫

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

#失敗,原理是先通過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.檢視資料(表內有值才能看到表頭)
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 |
+------+--------+------+--------+---------------------+

#資料型別
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型別不加引號,字元型別加引號

#檢視建表語句,建表語句也可以複製貼上執行
| 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);
#刪除表
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 idd 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);
shoe 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 [email protected]                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION |
+---------------------------------------------------------------------+

#ALL PRIVILEGES表示該使用者的所有許可權
#資料庫的超級管理員可以設定多個
#grant既可以設定許可權,又可以修改許可權

回收許可權

#1.回收許可權(取消使用者的VIP)
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.把組員插入資料庫