1. 程式人生 > >Mysql學習筆記_1

Mysql學習筆記_1

isa 安裝 bsp 表數據 增刪改 復制。 條件查詢 inner 數據類型

Linux作為操作系統,Apache 或Nginx作為 Web 服務器,MySQL 作為數據庫,PHP/Perl/Python作為服務器端腳本解釋器。這四個軟件都是免費或開源軟件軟件,因此使用這種方式除開人工成本就可以建立起一個穩定、免費的網站系統,稱為“LAMP“或“LNMP”組合。

一、以cmd命令使用mysql的基礎步驟 DOS系統下清屏的命令:cls)

基礎步驟:

1)mysql -u root -p回車 //進入數據庫

(2)password ........ //輸入密碼

(3)show databases; //查看數據庫

(4)\T 路徑........\文件名.sql; //連接文本記錄,使用該文件存儲操作信息

(5)use 庫名 ; //選數據庫

(6)create tables //建表

二、mysql操作命令

1.連接

  本地連接: mysql -u root -p

  明文連接: mysql -u root -p密碼

  遠程連接: mysql -h ip地址 -u 賬號 -p

2.庫的操作命令

  (1)查看所有數據庫:        show databases;

  (2)創建數據庫:          create database 庫名;

  (3)刪除數據庫:          drop database 庫名;

  (4)查看當前使用的數據庫:   select database();

  (5)查看建庫語句          show create database 數據庫名; 

  (6)查看當前數據庫存在的數據表 show tables; 

註意:MySQL數據庫中命令不區分大小寫。在Windows下,數據庫名稱也是不區分大小寫的,但在Linux下,數據庫名稱嚴格區分大小寫

3.表的操作命令  

  1.創建數據表
        
      create table [if not exists] 表名(
              字段名1 字段類型,
              字段名2 字段類型,
              字段名3 字段類型
              )engine=innodb default charset=utf8;

  (1)[if not exists]如果該表不存在則創建

  (2)engine = innodb 設置表引擎

  (3)default charset=utf8 設置表的字符集

  (4)每個建表語句的字段必須用逗號分隔,最後一句逗號不能有

  2.查看建表語句 show create table ‘表名‘;

  3.查看表結構   desc 表名 或 desc 表名/G(豎表);

  4.刪除表      drop table 表名;

附:常用約束:

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

2)主鍵自增長:auto_increment

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

4)唯一性:unique --不允許重復,但可以為空,可定義多個唯一約束(例如:賬戶名)

5)默認值:default 默認值 --指定缺省值,在沒有添加值得情況下使用default後指定的默認值

6)零填充:zerofill 並不是限制插入的長度,僅是顯示時的位數使用0

7)無符號: unsiged

8)默認值:default (例:default(‘2‘))如果沒有插入數據,則取默認值

9)註釋內容: comment 建表語句中的註釋

10)外鍵:foreign key(列名) references 外鍵表名(外鍵列名);

註意:有外鍵時,創建表,先創建父表,再創建子表;插入數據,先插入父表,再插入子表;刪除數據,先刪除子表中的數據,再刪除父表中的數據。

4.增刪改查(數據操作)

(1)增(添加數據)

            ① insert into 表名 (字段1,字段2……) values (值1,值2……);   //建議使用 

            ② insert into 表名 values (值1,值2……),(值1,值2……);      //一次性插入多條數據

            ③ insert into 表名 (字段1,字段2……) values (值1,值2……),(值1,值2……); //一次性插入多條數據

            ④ insert into 表名 values (值1,值2...);

            ⑤ insert into 表名 set 字段1=值1,字段2=值2...;

              註意:
                1.值和字段名要一一對應,否則會報錯
                2.寫入的值一定要和數據類型相匹配

(2)刪 (刪除數據

             delete from 表名 where 條件;

             truncate 表名;

            
        註意:刪除數據的時候,一定要加上where條件,否則會刪除所有的數據

1.刪除表中的某一列。

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

附:drop、truncate、delete的區別?

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

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

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

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

(3)改(修改數據)

             update 表名 set 要修改的字段=新的字段...... where 條件

        註意:修改數據的時候,一定要加上where條件,否則會修改所有的數據

1、修改表中的某一列。

a)修改表中某一列的列名(同時可修改列的數據類型)

mysql>alter table 表名 change 原列名 新列名 列數據類型;

b)修改表中某一列的數據類型

mysql>alter table 表名 modify 列名 列新的數據類型;

2.向表中添加新的列

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

3、刪除表中的某一列。

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

4.修改表的編碼字符集。  alter table 表名 character set 字符集;

5.修改表的名稱      alter table 原表名 rename to 新表名; rename table 原表名 to 新表名;

             

(4)查(查找數據)

            select * from 表名 where 字段名=字段值;  

              select 字段1,字段2... from 表名 where 字段名=字段值; 

             select *(所有字段) from 表;

             select 字段1,字段2.. from 表;

1. 過濾表中重復的數據(關鍵字distinct)

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

2、排序(關鍵字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;

3、分頁查詢(關鍵字limit)。

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

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

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

4、模糊查詢(關鍵字like)

mysql>select * from 表名 where 列名 like ‘ % ‘;

“%”代表任意字符; “_”代表單個字符; 例:select * frome t_student where stuName like ‘張三”; select * frome t_student where stuName like ‘張三%”; select * frome t_student where stuName like ‘%張三%”;//含有張三的任意字符 select * frome t_student where stuName like ‘張三_”

例:查詢學生表(student)中姓劉的學生的信息。

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

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

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

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

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

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

帶and的多條件查詢: select 字段1,字段2…frome 表名 where 條件表達式1 and 條件表達式2 [and 條件表達式n] 例:select * frome t_student where gradeName=’一年級’ and age=23; 帶or的多條件查詢 select 字段1,字段2…frome 表名 where 條件表達式1 or 條件表達式2 [or 條件表達式n] 例:select * frome t_student where gradeName=’一年級’ or age=23;//或者,條件只要滿足一個 distinct去重復查詢:select distinct 字段名 from 表名; 對查詢結果排序order by:select 字段1,字段2…from 表名 order by 屬性名 [asc|desc] 例:select * frome t_student order by age desc;//降序,從大到小 select * frome t_student order by age asc;//升序,asc默認可以不寫

例如:查詢學生表(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);

6、使用別名。

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

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

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

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

分組查詢group by group by 屬性名 [having 條件表達式][with rollup] 單獨使用(毫無意義,不能單獨使用); 與group_concat()函數一起使用; 例:select gradeName,group_concat(stuName) from t_student group by gradeName; 與聚合函數一起使用; 例:select gradeName,count(stuName) from t_student group by gradeName; 與having一起使用(顯示輸出的結果); 例:select gradeName,count(stuName) from t_student group by gradeName having count(stuName) 與with rollup 一起使用(最後加入一個總和行); 例:select gradeName,group_concat(stuName) from t_student group by gradeName with rollup;

例如:查詢每個部門的員工人數,根據部門編號(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;

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

A)內連接:join,inner join

B)外連接:left join,left outer join,right join,right outer join,union

C)交叉連接:cross join

內連接:  表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.左外連接:  表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;

2.右外連接:  表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;

3.多條件連接查詢

select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id and t_book.price>70; 子查詢 1.帶in關鍵字的子查詢(一個查詢語句的條件可能落在另一個select語句的查詢結果中) select * from t_book where bookType in(select id from t_bookType); select * from t_book where bookType not in(select id from t_bookType); 2.帶比較運算符的子查詢(子查詢可以使用比較運算符) select * from t_book where price>=(select price from t_priceLevel where priceLevel=1); 3.帶exists關鍵字的子查詢(加入子查詢查詢到記錄,則進行外層查詢,否則,不執行外層查詢) select * from t_book where exists(select * from t_booktype); select * from t_book where not exists(select * from t_booktype); 4.帶any關鍵字的子查詢(any關鍵字表示滿足其中任一條件) select * from t_book where price>= any(select price from t_priceLevel); 5.帶all關鍵字的子查詢(all關鍵字表示滿足所有條件) select * from t_book where price>= all(select price from t_priceLevel); 4.合並查詢 1.union 使用union關鍵字是,數據庫系統會將所有的查詢結果合並到一起,然後去掉相同的記錄; select id from t_book union select id from t_bookType; 2.union all 使用union all,不會去除掉重復的記錄; select id from t_book union all select id from t_bookType;

9、表的復制。

mysql>create table 新表表名 select * from 被復制表表名; //新表的表結構和數據與原表相同。

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

10. 空值查詢:select 字段1,字段2…frome 表名 where 字段 is[not] null;

11、聚合函數。

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 表名;

5.退出客戶端

  exit;  quit;   \q   Ctrl+c (任意一個即可)

6.mysql的其他操作

1.數據庫的導入導出。

導出數據庫:mysqldump -u 用戶名 -p 數據庫名>數據庫名.sql

導入數據庫:source 數據庫名.sql

2、顯示幫助命令清單。

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

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

mysql> \c

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

mysql> select version();

5、查看MySQL服務器狀態信息(包含版本號,下面兩個命令執行效果相同)。

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

mysql> \s

===========================================================================================================

MySQL、DB2、Oracle、SQL Server、MariaDB等等,由於MySQL已是Oracle旗下產品,可能會被閉源,不再免費,但MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,MariaDB是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。在存儲引擎方面,MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM;使用XtraDB來代替MySQL的InnoDB。

Mysql學習筆記_1