1. 程式人生 > >MYSQL資料庫學習(一)—初學常用語句命令

MYSQL資料庫學習(一)—初學常用語句命令

MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。現歸屬於Oracle(甲骨文)公司所有。

Mysql常用命令:

1、登入連線資料庫。

mysql -u root -p

2、顯示幫助命令清單。

mysql> \h; //(加分號和不加分號結束都不影響命令執行)

3、清除當前輸入的語句(命令)。

mysql> \c

4、查詢當前安裝的MySQL伺服器的版本號。

mysql> select version();

5、檢視MySQL伺服器狀態資訊(包含版本號,下面兩個命令執行效果相同)。

mysql> status;  //(加分號和不加分號結束都不影響命令執行)

mysql> \s

6、退出資料庫。

mysql> \q;   //(加分號和不加分號結束都不影響命令執行,會返回一個Bye)

7、資料庫的匯入匯出。

匯出資料庫:mysqldump -u 使用者名稱 -p  資料庫名>資料庫名.sql

匯入資料庫:source 資料庫名.sql

8、顯示所有資料庫。

mysql> show databases;   //(注意,最後有個s)

9、選擇資料庫。

mysql> use 資料庫名; //會返回Database changed

10、檢視當前選擇的資料庫中的所有的表

mysql> show tables;  //(注意,最後有個s)

11、檢視當前選擇的資料庫。

mysql> select database();

一、DDL:資料定義語言 (Data Definition Language)

作用:定義資料庫或者表結構的。
操作的物件:資料庫或表的結構的。

關鍵字:CREATE、 ALTER、 DROP

1、建立資料庫。

mysql> create database 資料庫名;  //如果要建立的資料庫已經存在,或者沒有建立它的適當許可權,則此語句執行失敗。

例:mysql> create database company;//建立一個公司資料庫

2、刪除資料庫。

mysql> drop database 資料庫名;

例:mysql>drop database company;  //刪除公司資料庫

3、建立表結構。

mysql>create table 表名(列名 列的資料型別 [<列的完整性約束>],列名 列的資料型別[<列的完整性約束>],......);

例:mysql>create table dept(      //建立部門表

deptno int(11) primary key,  //部門編號,int型,主鍵約束

deptname varchar(12) unique  //部門名稱,varchar型別,唯一性約束

);

注意:建立表之前,必須先選擇資料庫,在選定的資料庫中才能建立表。

列(column)有時候也稱欄位(field),同一個意思。

附:常用約束:

a)主鍵約束:primary key --非空且唯一,一張表就定義一個主鍵

b)主鍵自增長:auto_increment

c)非空:not  null --不允許插入null值,可定義多個非空約束

d)唯一性:unique  --不允許重複,但可以為空,可定義多個唯一約束

e)預設值:default  預設值  --指定預設值,在沒有新增值得情況下使用default後指定的預設值

f)外來鍵:foreign key(列名) references 外來鍵表名(外來鍵列名); //注意:有外來鍵時,建立表,先建立父表,再建立子表;插入資料,先插入父表,再插入子表;刪除資料,先刪除子表中的資料,再刪除父表中的資料。

4、查看錶結構。(下面三種方式實現效果相同)

mysql> desc 表名;   //常用

mysql> describe 表名;

mysql> show columns from 表名;

5、修改表的名稱。(下面兩種寫法都可以實現修改表名)

mysql> alter table 原表名 rename to 新表名;

mysql> rename table 原表名 to 新表名;

例:mysql> alter table dept rename to de;  //將dept表名稱改為de

6、修改表的編碼字符集。

mysql>alter table 表名 character set 字符集;

例:mysql>alter table 表名 character set gbk;  //修改表的編碼字符集為gbk

7、向表中新增新的列。

mysql> alter table 表名 add <column> 列名 列的資料型別 [<列的完整性約束>];//column可省略

8、修改表中的某一列。

a)修改表中某一列的列名(同時可修改列的資料型別)

mysql>alter table 表名 change 原列名 新列名 列資料型別;

b)修改表中某一列的資料型別

mysql>alter table 表名 modify 列名 列新的資料型別;

9、刪除表中的某一列。

mysql>alter table 表名 drop <column> 列名; //column可省略

10、刪除表。

mysql>drop table 表名;   //徹底刪除表,資料庫中不會保留表結構。注意與delete和truncate區別。

mysql>truncate 表名;

二、DML: 資料操作語言(Data Manipulation Language)
作用:操作表中的資料的。
關鍵字:INSERT、 UPDATE 、DELETE

1、向表中插入資料(每一行資料就是一條記錄),以下三種插入資料的方法皆可。

mysql>insert <into> 表名 values(列值1,列值2,......);   //into可以省略,插入的順序必須和建表的順序對應。

mysql>insert <into> 表名 (列名1,列名2,......)values(列值1,列值2,......);  //建議使用

mysql>insert <into> 表名 values(列值1,列值2,......),(列值1,列值2,......),......;//一次性插入多條資料

例:向dept表中插入資料。

mysql>insert into dept(deptno,deptname)values(100,'銷售部');

2、修改某一列的所有欄位值為新的欄位值。

mysql>update 表名 set 列名=新欄位值;
mysql>update 表名 set 列名=新欄位值,列名=新欄位值...;   //批量修改多個列的所有欄位值都新欄位值。

3、修改某一條記錄的欄位值。

mysql>update 表名 set列名=新欄位值 where 列名=欄位值;
mysql>update 表名 set 列名=新欄位值,列名=新欄位值... where 列名=欄位值;    //批量修改多個欄位的欄位值都為該值。

例:將學生表(student)中學號(sno)為520的學生的年齡(sage)改為21歲。

mysql>update student set sage=21 where sno=520;

4、刪除表中的某一條記錄。

mysql>delete from 表名 where 列名=列值;

例:刪除學生表(student)中名字(sname)為'張三'的學生的記錄

mysql>delete from student where sname='張三';  //注意,由於學生名字有重複的可能,所以會把所有名字叫張三的學生資訊都從student表中刪除掉,所以刪除單條記錄的條件可以參照主鍵約束的列,或者唯一約束的列,或者在已確定沒有重複的情況下自行確定where後面選的條件。

5、刪除表。

mysql>delete from 表名;

附:drop、truncate、delete的區別?

a)drop和truncate是DDL,而delete是DML。

b)truncate和delete只刪除資料,不會刪除表的結構,而drop會把資料和表結構都刪除。

c)delete可以帶where有條件的刪除,可以回滾(rollback),但刪除速度較truncate較慢。而truncate則不可以刪除特定的資料,也不可以回滾(rollback),但刪除速度比delete快。

建議:小心使用drop和truncate,尤其在資料沒有備份的情況下。

三、DQL:資料查詢語言(Data Query Language)
關鍵字:SELECT

1、查詢表中所有的記錄。

mysql> select * from 表名;   //*指代表中所有的列

mysql> select 列1,列2,... from 表名; //將表中所有的列都寫出來和上面效果相同。

例:查詢dept表中的所有資料

mysql> select * from dept; 或者 select deptno,deptname from dept;

2、查詢表中的某一條記錄。

mysql>select * from 表名 where 列名=欄位值;

例:查詢學生表(student)中名字(sname)叫'張三'的學生的學號(sno)、成績(grade)資訊。

mysql>select sno,grade from student where sname='張三';//當指定了要查詢的資訊,就不要用*號代替所有了。

3、過濾表中重複的資料(關鍵字distinct)

mysql>select distinct 列名 from 表名;   //返回該欄位下的所有欄位值,若有相同欄位值,則只返回一個。

4、排序(關鍵字order by)

mysql>select * from 表名 order by 列名 asc;       //升序(預設),asc可省略不寫。
mysql>select * from 表名 order by 列名 desc;     //降序

例:按照學生表(student)中學生成績(grade)的由高到低順序輸出學生的學號(sno)、姓名(sname)和成績(grade).

mysql>select sno,sname,grade from student order by grade desc;

5、分頁查詢(關鍵字limit)

mysql>select * from 表名 limit (pageNo-1)*pagesize,pagesize; //    pageNo-->要查詢的頁數,pageSize-->每頁顯示的記錄數

例:查詢dept表中第一頁(每頁2條資料)的記錄。

mysql>select * from 表名 limit 0,2; 

6、模糊查詢(關鍵字like)。

mysql>select * from 表名 where 列名 like ' % ';  //%指代任意字元

例:查詢學生表(student)中姓劉的學生的資訊。

mysql>select * from student where sname like '劉%';

例:查詢學生表中姓名第二個字為陽的學生資訊。

mysql>select * from student where sname like '_陽%';  //_指代一個字元

7、範圍查詢(關鍵字between .. and .. , in())

mysql>select * from 表名 where 列名  between 欄位值(小) and 欄位值(大);//包含兩端的欄位值

mysql>select * from 表名 where 列名 in (欄位值1,欄位值2,......);

例如:查詢學生表(student)中語文成績chinese在80~90分之間的所有學生資訊(包含80和90)
mysql>select * from student where chinese between 80 and 90;

例如:查詢學生表(student)數學成績math為60分,70分,80分和90分的所有學生資訊。
mysql>select * from student where math in (60,70,80,90);

8、使用別名。

mysql>select 欄位名 <as> 別名,欄位名 別名,... from 表名;    //as可省略

例如:查詢學生成績表(sc)中學生姓名(sname)及總成績,sname欄位用姓名錶示,所有科目得分總和用總分表示。
mysql>select sname as 姓名,chinese+math+english 總分 from sc;

9、分組查詢(關鍵字group by)。

mysql>select 列名,count(列名) from 表名 group by 列名;

例如:查詢每個部門的員工人數,根據部門編號(deptno)對員工進行分組,返回各部門員工人數。
mysql>select deptno,count(empno) from emp group by deptno;  //empno--員工編號,emp--員工表

having:對分組後的結果進行條件限制
例如:查詢每個部門員工人數大於2的所有記錄,返回人數大於2人的部門編號及其部門人數。
mysql>select deptno,count(empno) from emp group by deptno having count(empno)>2;

10、表連線查詢(同時涉及多個表的查詢稱為連線查詢,用來連線兩個表的條件稱為連線條件)。

內連線:表1  join 表2  on 表1.列名=表2.咧名;

例:查詢員工表(emp)中的員工號(empno)、員工姓名(empname)、部門號(deptno)和部門名稱(deptname),部門名稱欄位在部門表(dept)中.

mysql> select empno,empname,emp.deptno,deptname from emp join dept on emp.deptno=dept.deptno;

左外連線:表1 left join 表2 on 表1.列名=表2.列名;
表1作為主表,主表中的所有記錄都會輸出,和從表匹配不上的欄位用null進行補齊。

例:以員工表(emp)為主表實現上述查詢。

mysql> select empno,empname,emp.deptno,deptname from emp left join dept on emp.deptno=dept.deptno;

右外連線:表1 right join 表2 on 表1.列名=表2.列名;
表2為主表,主表中的所有記錄都會輸出,和從表匹配不上的欄位用null進行補齊。

例:以部門表(dept)為主表實現上述查詢。

mysql> select empno,empname,emp.deptno,deptname from emp right join dept on emp.deptno=dept.deptno;

11、表的複製。

mysql>create table 新表表名 select * from 被複製表表名; //新表的表結構和資料與原表相同。

mysql>create table 新表表名 select 列名1,列名2,... from 被複製表表名;  //可以通過在select查詢中指定欄位來限制出現在新表中的欄位
mysql>create table 新表表名 select * from 被複製表表名 where 0=1; //通過使用select語句建立已存在表的空副本(即建立相同表結構,但不復制原表資料過來),並且返回一個空結果集。

12、聚合函式。

a)返回指定列非空值的個數

mysql>select count(列名) from 表名;

例:查詢學生表(student)中學生的總人數。

mysql>select count(sno) from student;  //根據學生學號計算學生個數,學號不為空且唯一

b)返回指定列的最值
mysql>select max(列名) from 表名;  //返回指定列的最大值

例:查詢學生表(student)中年齡(sage)最大的學生姓名(sname)和年齡。

mysql>select sname,max(sage) from student;
mysql>select min(列名) from 表名;   //返回指定列的最小值

例:查詢學生成績表(sc)中語文成績(chinese) 最低的學生的學號(sno)和語文成績。

mysql>select sno,min(chinese) from sc;


c)返回指定列的平均值
mysql>select avg(列名) from 表名;


d)返回指定列的所有值之和
mysql>select sum(列名) from 表名;