1. 程式人生 > >MySQL1-基礎知識點

MySQL1-基礎知識點

觸發 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 -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_schemamysql是自帶的數據庫】
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語句一定要指定插入值與列的對應關系;否則數據庫一旦擴展或調整順序,程序就崩潰了!】
插入完整的行:如果某些列可以由MySQL自動生成而不需要手動添加,可以將它們置為null,MySQL會自己處理,這樣的例子包括 自增的主鍵、timestamp類型等;這種方式最好不要使用,因為一旦表結構發生變化(如順序變化、添加列),插入語句將失敗。 插入行的一部分:指定列名,可以只插入部分數據(其他條件是該列允許null或提供了默認值,否則會報錯),或者不按順序插入 插入多行:單條insert插入多條數據比多個insert效率要高 插入檢索出的數據:不要求列名匹配;按照順序匹配 插入不重復的數據:測試發現,重復與否的判斷標準是primary key、unique index,普通的key可以重復 補充:插入操作相對查詢來說可能比較耗時(尤其是有很多索引需要更新時)(update和delete同理),有時為了保證檢索的效率,可以降低插入的優先級。 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-基礎知識點