mysql基礎命令簡單彙總
阿新 • • 發佈:2020-07-21
大雜燴
資料庫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設為日期欄位。