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

mysql基礎命令簡單彙總

參考網站

參考網站

mysql預習資料

大雜燴

資料庫1(系統庫)
	表a:負責資料庫的邏輯
	表b
資料庫2
	user表:只有記錄在冊的使用者才能登入資料庫
資料庫3
資料庫4

資料庫5
	表a:文章
	表b
...

資料庫的使用就是使用命令管理表格
使用資料庫普通使用者登入資料庫,有時候要進行反向解析
有些系統庫root也不能刪除

註冊WordPress後,會在站點目錄下生成wp-config.php檔案,該檔案記錄著使用者的註冊資訊
當安裝了WordPress後,就會在資料庫裡生成指定許可權的表
WordPress客戶端上傳的圖片不會改名,生成並儲存在/wordpress/wp-content/uploads 下
	wp-config.php程式碼連線資料庫

wecenter客戶端上傳的圖片會改名,生成並儲存在/WeCenter/uploads/下
圖片,動圖都屬於靜態資源
	wecenter/system/database.php程式碼連線資料庫
nfs 可以儲存web中的圖片和視訊等二進位制檔案,資料庫只能儲存字串
	使用nfs可以同時共享多個目錄

mysqladmin -uroot password 1	#給root使用者密碼(為了安全)

mysql -u wp_zh -p1 -h 10.0.0.51
mysql -uroot -P13306 -h 10.0.0.51
mysql -uroot -p1		#使用root身份登入
#root使用者如果有密碼的話,那麼使用密碼才能登入,
#普通使用者沒有密碼的話,可以直接連線資料庫,無論本地還是遠端
#普通使用者有密碼的話,本地直接連線,遠端需要密碼連線

show 'variables' like 'server_id';

1.庫

#檢視資料庫
show databases;
#使用資料庫
use databasename;
#查看錶格,注意:為了不再顯示的時候亂碼,要修改資料庫預設編碼。
show tables;
#顯示資料表結構
desc tb_name;
#建立資料庫
creat database xx;
#建立資料表
create table tb_name (欄位名 varchar(20), 欄位名 char(1));

#刪除資料庫
drop database xx;
#if exists 判斷資料庫是否存在,不存在也不產生錯誤
drop database if exists xx;

2.使用者

格式:grant select on 資料庫.* to 使用者名稱@登入主機 identified by “密碼”

1、增加一個使用者test1密碼為abc,讓他可以在任何主機上登入,並對所有資料庫有查詢、插入、修改、刪除的許可權。首先用root使用者連入MYSQL,然後鍵入以下命令:
grant select,insert,update,delete on *.* to test1@'%' Identified by '1';

但增加的使用者是十分危險的,你想如某個人知道test1的密碼,那麼他就可以在internet上的任何一臺電腦上登入你的mysql資料庫並對你的資料可以為所欲為了,解決辦法見2。
mysql -utest1 -p1

2、增加一個使用者test2密碼為abc,讓他只可以在localhost上登入,並可以對資料庫mydb進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MYSQL資料庫所在的那臺主機),這樣使用者即使用知道test2的密碼,他也無法從internet上直接訪問資料庫,只能通過MYSQL主機上的web頁來訪問了。
grant select,insert,update,delete on mydb.* to test2@'localhost' identified by '1';

如果你不想test2有密碼,可以再打一個命令將密碼消掉。(#取消或修改密碼)
grant select,insert,update,delete on mydb.* to test2@'localhost' identified by '';

檢視使用者
mysql> select user,host from mysql.user;
檢視使用者密碼
mysql> select user,password from mysql.user;

檢視主庫狀態
mysql> show master status;

3.密碼

格式:mysqladmin -u使用者名稱 -p舊密碼 password 新密碼

給root加個密碼ab12。
    mysqladmin -u root password ab12
    mysqladmin -uroot newpassword;
注:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了。

1.命令列使用mysqladmin修改密碼
[root@db02 ~]# mysqladmin -uroot -p123 password 123456

2.update修改使用者密碼
update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
updata mysql.user set password='123' where user='root' and host='localhost';
mysql> flush privileges;

3.修改當前使用者密碼
mysql> set password=password('123456');
修改制定使用者密碼
mysql> set password for 使用者名稱@'localhost' = password('新密碼');

4.grant修改密碼
mysql> grant all on *.* to root@'localhost' identified by '123';
mysql> flush privileges;

#檢視加密後的密碼,不能直接使用該密碼
select user,host,password from mysql.user
#顯示當前的user
SELECT USER();

連線資料庫

1.tcp/ip(有 -h)
	mysql -uroot -p -h127.0.0.1
	mysql -uroot -p -h127.0.0.1 -P'' -S/tmp/mysql.sock

2.socket
	mysql -uroot -p
	mysql -uroot -p -hlocalhost
	mysql -uroot -p -S/var/lib/mysql/mysql.sock
	
#有 -h 就是tcp/ip連線,除了-hlocalhost
#預設socket連線,速度快,tcp/ip有三次握手,四次揮手
#如果你不指定主機名或如果你指定特殊的主機名localhost,使用Unix套接字
#socket連線只能在本機連線,tcp可以遠端連線

[root@db01 ~]# find / -name "mysql.sock"
/var/lib/mysql/mysql.sock

4.使用資料庫

命令: use <資料庫名>;

1.use 語句可以通告MySQL把db_name資料庫作為'預設'(當前)資料庫使用,用於後續語句。該資料庫保持為預設資料庫,直到語段的'結尾',或者直到釋出一個'不同的USE語句'
2.使用USE語句為一個特定的當前的資料庫做標記,不會阻礙您訪問其它資料庫中的表。
3.連線以後不用退出來,使用show databases就能查詢所有資料庫,如果想跳到其他資料庫,用use 其他資料庫名字

#USE語句被設立出來,用於與Sybase相相容。

5.使用函式

1.顯示mysql的版本
mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.46-log |
+------------+
1 row in set (0.00 sec)

2.顯示當前時間
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2020-07-14 01:22:48 |
+---------------------+
1 row in set (0.00 sec)
3.顯示年月日
mysql> select month(current_date);
+---------------------+
| month(current_date) |
+---------------------+
|                   7 |
+---------------------+
1 row in set (0.00 sec)
mysql> select dayofmonth(current_date);
+--------------------------+
| dayofmonth(current_date) |
+--------------------------+
|                       13 |
+--------------------------+
1 row in set (0.00 sec)
4.列印字串
mysql> select "1";
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

mysql> select "w";
+---+
| w |
+---+
| w |
+---+
1 row in set (0.00 sec)
5.計算器
mysql> select((4*4)/10)+5;
+--------------+
| ((4*4)/10)+5 |
+--------------+
|       6.6000 |
+--------------+
1 row in set (0.00 sec)

6.建立資料表

欄位名 數字型別 資料寬度 是否為空 是否主鍵 自動增加 預設值
id int 4 primary key auto_increment
name char 20
sex int 4 0
degree double 16
命令:create table <表名> ( <欄位名1> <型別1> [,..<欄位名n> <型別n>]);

#例如,建立一個名為MyClass的表
mysql> create table MyClass(
> id int(4) not null primary key auto_increment,
> name char(20) not null,
> sex int(4) not null default '0',
> degree double(16,2));


/*建立學生表*/
create table Student(
     Sno char(10) primary key,
     Sname char(20) unique,
     Ssex char(2),
     Sage smallint,
     Sdept char(20)
);

刪除資料表

命令:drop table <表名>;

1.drop table用於取消一個或多個表。您必須有每個表的DROP許可權。所有的表資料和表定義會被取消
2.對於一個帶分割槽的表,DROP TABLE會永久性地取消表定義,取消各分割槽,並取消儲存在這些分割槽中的所有資料。DROP TABLE還會取消與被取消的表有關聯的分割槽定義(.par)檔案。
3.對與不存在的表,使用IF EXISTS用於防止錯誤發生。當使用IF EXISTS時,對於每個不存在的表,會生成一個NOTE

表插入資料

命令:insert into <表名> [( <欄位名1>[,..<欄位名n > ])] values ( 值1 )[, ( 值n )]

例如:往表 MyClass中插入二條記錄, 這二條記錄表示:編號為1的名為Tom的成績為96.45, 編號為2 的名為Joan 的成績為82.99, 編號為3 的名為Wang 的成績為96.5。
mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);

#注意:insert into每次只能向表中插入一條記錄

1.第一種形式無需指定要插入資料的列名,只需提供被插入的值即可
mysql> insert into tb_name values (value1,value2,value3,...);
2.第二種形式需要指定列名及被插入的值
mysql> insert into tb_name (column1,column2,column3,...) values (value1,value2,value3,...);

表查詢資料

select 語句的一般格式如下:
                           select <目標列表達式列表>
                           [into 新表名]
                           from 表名或檢視名
                           [where <條件>]
                           [group by <分組表示式>]
                           [having <條件>]
                           [order by <排序表示式>

1)、查詢#所有行或列
命令: select <欄位1,欄位2,...> from < 表名 > where < 表示式 >
例如:查看錶 MyClass 中所有資料
   mysql> select * from MyClass;

2)、查詢前幾行資料(#指定行或列),列名之間要用逗號隔開
例如:查看錶 MyClass 中前2行資料
mysql> select * from MyClass order by id limit 0,2;

3) 通過指定'列標題'(也叫列別名)可使輸出結果更容易被人理解
指定列標題時,可在列名之後使用'AS子句';也可使用:'列別名=<表示式>'的形式指定列標題
select <字元型欄位> as 列標題1,<字元型欄位> as 列標題2, <字元型欄位> as 列標題3 from bt_name

1.select一般配合where使用,以查詢更精確更復雜的資料,where子句必須緊跟在From子句之後
2.select語句除了可以檢視資料庫中的表格和檢視的資訊外,還可以檢視 SQL Server的系統資訊、複製、建立資料表。其查詢功能強大,是SQL語言的靈魂語句,也是SQL中使用頻率最高的語句

表刪除資料

命令:delete from 表名 where 列名稱=值,…

1.
例如:刪除表 MyClass中編號為1 的記錄
mysql> delete from MyClass where id=1;

下面是一個刪除資料前後表的對比。
FirstName	LastName	Age
Peter	Griffin	35
Glenn	Quagmire	33

下面以PHP程式碼為例刪除 "Persons" 表中所有 LastName='Griffin' 的記錄:
<?php 
   $con = mysql_connect("localhost","peter","abc123"); 
   if (!$con) 
   {
      die('Could not connect: ' . mysql_error()); 
   } 
   mysql_select_db("my_db", $con); 
   mysql_query("DELETE FROM Persons WHERE LastName='Griffin'"); mysql_close($con); 
?>

在這次刪除之後,表是這樣的:
FirstName	LastName	Age
Glenn	Quagmire	33

2.
可以在不刪除表的情況下刪除所有的行。這意味著表的結構、屬性和索引都是完整的:
格式:delete * from tb_name   或  delete from tb_name;

表修改內容

語法:update 表名 set 列名稱=新值,… where 條件;
   mysql> update MyClass set name='Mary' where id=1;

例子1:單表的MySQL UPDATE語句:
   UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]

例子2:多表的UPDATE語句:
UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]

UPDATE語法可以用新值更新原有錶行中的各列。
SET子句指示要修改哪些列和要給予哪些值。
WHERE子句指定應更新哪些行。如果沒有WHERE子句,則更新所有的行。
如果指定了ORDER BY子句,則按照被指定的順序對行進行更新。
LIMIT子句用於給定一個限值,限制可以被更新的行的數目。

表增加欄位(alter命令)

命令:alter table 表名 add欄位 型別 其他;

1.在表MyClass中添加了一個欄位passtest,型別為int(4),預設值為0
   mysql> alter table MyClass add passtest int(4) default '0'
2.新增兩個欄位  
   mysql> alter table Person add age int,add address varchar(11);
3.刪除兩個欄位
   mysql> alter table Person drop column age,drop column address;
4.修改欄位的註釋
   mysql> alter table `student` modify column `id` comment '學號';

修改表名

命令:rename table 原表名 to 新表名;

例如:在表MyClass名字更改為YouClass
   mysql> rename table MyClass to YouClass;
   
1.當你執行 RENAME 時,你'不能'有任何鎖定的表或活動的事務。你同樣也必須有對原初表的 ALTER 和 DROP 許可權,以及對新表的 CREATE 和 INSERT 許可權。
2.如果在多表更名中,MySQL 遭遇到任何錯誤,它將對所有被更名的表進行'倒退更名',將每件事物退回到最初狀態。

​ 學生-課程資料庫

**學生表:Student(Sno,Sname,Ssex,Sage,Sdept) ** **課程表:Course(Cno,Cname,Cpno,Ccredit) ** **學生選課表:SC(Sno,Cno,Grade) ** 關係的主碼加下劃線表示。各個表中的資料示例如圖所示:

建立一個“學生”表Student:

create table Student(
  Sno char(9) peimary key, /*列級完整性約束條件,Sno是主碼*/
  Sname char(20) unique, /* Sname取唯一值*/
  Ssex char(2),
  Sage smallint,
  Sdept char(20)
);

建立一個“課程”表Course:

create table Course(
  Sno char(4) primary key, /*列級完整性約束條件,Cname不能取空值*/
  Sname char(40) not null, /*Cpno的含義是先修課*/
  Cpno char(4)
  Ccredit smallint,
  foreign key (Cpnoo) references Course(Cno) /*表級完整性約束條件,Cpno是外碼,被參照表是Course,被參照列是Cno*/
);

建立學生選課表SC:
create table SC(
  Sno char(9),
  Cno char(4),
  Grade smallint,
  frimary key (Sno,Cno), /*主碼由兩個屬性構成,必須作為表級完整性進行定義*/
  foreign key (Sno) references Student(Sno), /*表級完整性約束條件,Sno是外碼,被參照表是Student*/
  foreign key (Cno) references Course(Cno)   /*表級完整性約束條件,Cno是外碼,被參照表是Course */
);

7.備份資料庫

1.匯出整個資料庫
匯出檔案預設是存在mysql\bin目錄下
    mysqldump -u 使用者名稱 -p 資料庫名 > 匯出的檔名
    mysqldump -u user_name -p123456 database_name > outfile_name.sql

2.匯出一個表
    mysqldump -u 使用者名稱 -p 資料庫名 表名> 匯出的檔名
    mysqldump -u user_name -p database_name table_name > outfile_name.sql

3.匯出一個數據庫結構
    mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
    -d 沒有資料 –add-drop-table 在每個create語句之前增加一個drop table

4.帶語言引數匯出
    mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql

8.例項一(建庫和建表)

drop database if exists school; //如果存在SCHOOL則刪除
create database school; //建立庫SCHOOL
use school; //開啟庫SCHOOL
create table teacher //建立表TEACHER
(
    id int(3) auto_increment not null primary key,
    name char(10) not null,
    address varchar(50) default '深圳',
    year date
); //建表結束

//以下為插入欄位
insert into teacher values(”,’allen’,'大連一中’,'1976-10-10′);
insert into teacher values(”,’jack’,'大連二中’,'1975-12-23′);

例項二(建庫和建表)

//以下為插入欄位
insert into teacher values('''',''glchengang'',''深圳一中'',''1976-10-10'');
insert into teacher values('''',''jack'',''深圳一中'',''1975-12-23'');

#注:在建表中
1、將ID設為長度為3的數字欄位:int(3);並讓它每個記錄自動加一:auto_increment;並不能為空:not null;而且讓他成為主欄位primary key。
2、將NAME設為長度為10的字元欄位
3、將ADDRESS設為長度50的字元欄位,而且預設值為深圳。
4、將YEAR設為日期欄位。