MySQL1-基礎知識點
阿新 • • 發佈:2017-06-06
觸發 del bin times man 函數 where edi 操作數 目錄
零、MySQL安裝與配置
一、基本概念
二、基本語法
三、常用指令
四、四種SQL語句
零、MySQL安裝與配置
http://www.cnblogs.com/hikarusun/archive/2012/04/26/2471039.html
http://jingyan.baidu.com/article/597035521d5de28fc00740e6.html
http://database.51cto.com/art/201304/387439.htm
http://yanln.iteye.com/blog/2193842
端口:3306
賬戶:root
WindowsServiceName:MySQL56
可視化工具:Navicat for MySQL【功能非常強大】
啟動MySQL服務:右擊我的電腦-管理-服務和應用程序-服務-MySQL57,啟動即可;如果沒有啟動,可能出現錯誤:cann‘t connect to MySQL Server on localhost
官方文檔:一般安裝MySQL時會有官方文檔【http://dev.mysql.com/doc/有下載】
一、基本概念
1、MySQL是關系型數據庫,由一個或多個表格組成。表格:表頭、行、列、鍵(具有唯一性)、值
2、MySQL語句執行有兩種方法:
(1)控制臺下執行單條語句。
(2)通過SQL腳本完成對數據庫的操作,該腳本由一條或多條MySQL語句(SQL語句+擴展語句)組成,保存時腳本後綴名為.sql。
3、MySQL是基於客戶端-服務器的數據庫。服務端存放管理數據,直接與數據文件打交道;客戶端與用戶打交道,獲取、操作數據都是通過連接服務端完成的。服務器軟件為MySQL DBMS;客戶端可以是MySQL提供的工具,腳本語言、web應用開發語言、程序設計語言等。
二、基本語法
1、標識符:命名一些對象,如數據庫、表、列、變量等。Windows下標識符大小寫不敏感,Linux下敏感。
2、關鍵字:如create、drop、select等。標識符不能與關鍵字重名。
3、函數:如字符串函數、數學函數、日期時間函數、搜索函數、加密函數、信息函數等。
4、數據類型【以下類型並不全面,隨著版本更新也不能保證完全準確】
1)數字類型
A、整數:tinyint、smallint、mediumint、int、bigint,分別有1、2、3、4、8字節。可以指定位數,如int(4),註意,4指位數,不是字節數。
B、浮點數:float、double、real、decimal。如double(20,4),20指定最大位數,4指定小數點後精度。
2)日期和時間:date、time、datetime、timestamp、year【關於日期和時間,更多見日期時間類型詳解】
3)字符串類型(文本和字符串後面的修飾表示的都是字符數,不是字節數)
A、字符串:char、varchar。註意char和varchar後面都可以跟0-255的修飾。對於char,這個值是實際大小,比這個長要截短,比這個短要用空格補足。對於varchar,這個值是大小的最大值,比這個值大要截短,比這個值小不會填充。varchar的好處:不知道字段確定長度時,可以節省空間;便於搜索比較。一個漢字占的字節數與編碼有關:GBK占2字節,UTF-8占3字節。定長字符串的好處:MySQL處理定長字符串的快很多;不允許對變長列進行索引(存疑)。
B、文本:tinytext、text、mediumtext、longtext。字符範圍:255、65535、2^24-1、2^32-1。
C、二進制(可存儲圖片等):tinyblob、blob、mediumblob、longblob。字節範圍:255、65535、2^24-1、2^32-1。
5、MySQL語句中,所有空格被忽略,因此跨行無所謂。
三、常用指令
1、登陸與退出(登陸指令的前提是已將mysql所在的目錄加入PATH或bin,或在mysql所在的目錄中)
插入完整的行:如果某些列可以由MySQL自動生成而不需要手動添加,可以將它們置為null,MySQL會自己處理,這樣的例子包括 自增的主鍵、timestamp類型等;這種方式最好不要使用,因為一旦表結構發生變化(如順序變化、添加列),插入語句將失敗。
插入行的一部分:指定列名,可以只插入部分數據(其他條件是該列允許null或提供了默認值,否則會報錯),或者不按順序插入
插入多行:單條insert插入多條數據比多個insert效率要高
插入檢索出的數據:不要求列名匹配;按照順序匹配
插入不重復的數據:測試發現,重復與否的判斷標準是primary key、unique index,普通的key可以重復
補充:插入操作相對查詢來說可能比較耗時(尤其是有很多索引需要更新時)(update和delete同理),有時為了保證檢索的效率,可以降低插入的優先級。
mysql -u kismet -p=》會提示輸入密碼
mysql -u kismet -password *****
mysql -u kismet -h hostname -p/password
mysql -u ... -h ... -p/password ... -D databasename
mysql -D …… -u kismet -p < test.sql(登錄時執行腳本)
quit
http服務器:/../../httpd -k start/stop/restart
2、創建、查看與刪除一個數據庫
create database 數據庫名 [其他選項];
show databases;【其中的informa_schema和mysql是自帶的數據庫】
drop database 數據庫名;
3、選擇所要操作的數據庫
登錄時-D;
use 數據庫名;(可以不加分號)
4、創建、查看與刪除表
(1)create table 表名稱(列聲明);如:
create table students ( id int unsigned not null auto_increment primary key,
.........,
tel char(11) null default "-");
(2)列聲明:名稱+類型(可能有unsigned)+(null/not null)+(auto_increment)+(primary key)+(default+……)
null/not null:是否可以為空(默認可以為空)
auto_increment:適用於整數列(插入為NULL,值為最大+1);只能有一個,而且必須被索引;使用auto_increment列,可以指定插入值,只要它尚未被使用過,後面的插入增量基於該指定的值;last_insert_id()函數可以獲得最近插入的auto_increment值(個人猜測在觸發器中很有用武之地)
primary key:該列為主鍵,索引列,值唯一,列唯一
default:指定默認值;只支持常量,不支持函數;對於null列,如果不指定則默認為null
(3)其他部分
if not exists:如果該表存在,則會報錯;為避免報錯,可以改為:create if not exists table students ……
engine:可以在最後(括號之後)加上engine=innodb/myisam……指定存儲引擎
(4)show tables;describe 表名【等價於:show columns from 表名】
(5)drop table 表名;
5、向表中插入數據【血淚教訓:insert語句一定要指定插入值與列的對應關系;否則數據庫一旦擴展或調整順序,程序就崩潰了!】insert [into] `user` VALUES(null,‘asdfadsf‘,null,30)#插入完整的行
insert [into] `user`(name,age) values(‘hello‘,45)#插入行的一部分
insert `user`(name,age) values(‘hello‘,45),(‘world‘,400)#插入多行
insert `user`(name,age) select name,age from tmp#插入檢索出的數據
insert ignore into ……
insert low_priority into#低優先級插入
6、查詢表中數據:見四
7、更新表中數據
可以更新多列,用逗號隔開;可以根據表中舊值更新新值(舊值和新值不一定是同一列);新值可以使用子查詢獲得;使用ingore關鍵字,當更新出現錯誤時可以繼續更新;新值可以為NULL
update user set name=‘zhou‘,age=11 where id=10;#可以有多列,用逗號隔開
update user set age=age+1 where id=1;#根據表中舊值更新新值
update user set age=id+1 where id=10;#舊值與新值不一定是同一列
update user set name=(select name from teacher where id=10) where id=10#新值可以使用子查詢獲得
update ignore user ……#使用ignore,當更新出現錯誤時可以繼續更新
update user set name=null where ……#新值可以為null
8、刪除表中的數據
delete from 表名稱 where 刪除條件;
delete from 表名稱;//清空表數據,不能使用delete * fromo 表名稱;
如果要刪除整個表,盡量不要使用delete,速度較慢,因為它會逐行刪除數據;使用truncate table完成相同工作,但速度更快(實際上刪除整個表並重新創建一個表),如truncate table ‘user‘
【對於update和delete,沒有辦法撤銷;因此在執行之前,一定使用select驗證下where子句的條件是否爭取,否則後果不堪設想】
9、修改表本身:創建表時應該足夠謹慎,修改表盡量避免
(1)添加列
alter table 表名 add 列名 列數據類型(可以加其他屬性) [after 插入位置];
(2)修改列
alter table 表名 change 列名 列新名稱 列數據類型(可以加其他屬性);
(3)刪除列
alter table 表名 drop 列名稱;
(4)重命名表
alter table 表名 rename 新表名;或
rename table 表名 to 新表名;
(5)其他:增加外鍵等
四、四種SQL語句
1、DDL:Data Definition Language
(1)包括:CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME
(2)不需要commit,因此也無法回滾。
2、DML:Data Manipulation Language
包括:SELECT、INSERT、UPDATE、DELETE、MERGE、CALL、EXPLAIN PLAN、LOCK TABLE
3、DCL:Data Control Language
包括:GRANT、REVOKE
4、TCL:Transaction Control Language
包括:SAVEPOINT、ROLLBACK、SET TRANSACTION
MySQL1-基礎知識點