Mysql學習筆記_1
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