中山php|最優網絡 :中山做網站 中山php建站
最優良人
Posts Tagged With: mysql
mysql STRICT_TRANS_TABLES嚴格模式下提示Field 'id' doesn't have a default value
2012/09/26 at 11:42 » Comments (431)
在別的服務器運行我的網站程序的時候,出現了Field 'id' doesn't have a default value 的提示,意思是這個值我沒有提交數據,并且數據庫結構沒有設置默認值,由于對方的mysql服務器開啟了STRICT_TRANS_TABLES嚴格模式,所以報錯了 解決方法是: 如果自己的服務器,有權限修改my.ini的話,打開my.ini,查找 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改為 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 然后重啟MYSQL 在別人的虛擬空間上當然不可能實現,所以根本的解決方法還是修改自己的數據結構,把非空的字段加上默認值,以后設計數據庫要注意這一點,方便程序的移植 more »mysql所有數據庫引擎用法MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE
2011/09/21 at 14:50 » Comments (94)
MySQL有多種存儲引擎,每種存儲引擎有各自的優缺點,大家可以擇優選擇使用: MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。 MySQL支持數個存儲引擎作為對不同表的類型的處理器。MySQL存儲引擎包括處理事務安全表的引擎和處理非事務安全表的引擎: · MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默認的存儲引擎,除非你配置MySQL默認使用另外一個引擎。 · MEMORY存儲引擎提供“內存中”表。MERGE存儲引擎允許集合將被處理同樣的MyISAM表作為一個單獨的表。就像MyISAM一樣,MEMORY和MERGE存儲引擎處理非事務表,這兩個引擎也都被默認包含在MySQL中。 注釋:MEMORY存儲引擎正式地被確定為HEAP引擎。 · InnoDB和BDB存儲引擎提供事務安全表。BDB被包含在為支持它的操作系統發布的MySQL-Max二進制分發版里。InnoDB也默認被包括在所 有MySQL 5.1二進制分發版里,你可以按照喜好通過配置MySQL來允許或禁止任一引擎。 · EXAMPLE存儲引擎是一個“存根”引擎,它不做什么。你可以用這個引擎創建表,但沒有數據被存儲于其中或從其中檢索。這個引擎的目的是服務,在 MySQL源代碼中的一個例子,它演示說明如何開始編寫新存儲引擎。同樣,它的主要興趣是對開發者。 · NDB Cluster是被MySQL Cluster用來實現分割到多臺計算機上的表的存儲引擎。它在MySQL-Max 5.1二進制分發版里提供。這個存儲引擎當前只被Linux, Solaris, 和Mac OS X 支持。在未來的MySQL分發版中,我們想要添加其它平臺對這個引擎的支持,包括Windows。 · ARCHIVE存儲引擎被用來無索引地,非常小地覆蓋存儲的大量數據。 · CSV存儲引擎把數據以逗號分隔的格式存儲在文本文件中。 · BLACKHOLE存儲引擎接受但不存儲數據,并且檢索總是返回一個空集。 · FEDERATED存儲引擎把數據存在遠程數據庫中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未來的分發版中,我們想要讓它使用其它驅動器或客戶端連接方法連接到另外的數據源。 當你創建一個新表的時候,你可以通過添加一個ENGINE 或TYPE 選項到CREATE TABLE語句來告訴MySQL你要創建什么類型的表: CREATE TABLE t ...more »mysql數據庫引擎HEAP(MEMORY)的使用,內存表,臨時表的用法
2011/09/21 at 14:47 » Comments (407)
HEAP表是訪問數據速度最快的MySQL表,他使用保存在內存中的散列索引。但如果MySQL或者服務器重新啟動,表中數據將會丟失. 用法:如論壇的在線人數統計,這種表的數據應該是無關緊要的,就幾個簡單的字段,數據也不多,記錄數怎么也不會超過1000吧,但是操作是最頻繁的(基本用戶的每次動作都要更新這個表). 如何創建內存表? 創建內存表非常的簡單,只需注明 ENGINE= MEMORY 即可: CREATE TABLE `tablename` ( `columnName` varchar(256) NOT NUL) ENGINE=MEMORY DEFAULT CHARSET=latin1 MAX_ROWS=100000000; 注意: 當內存表中的數據大于max_heap_table_size設定的容量大小時,mysql會轉換超出的數據存儲到磁盤上,因此這是性能就大打折扣了,所 以我們還需要根據我們的實際情況調整max_heap_table_size,例如在.cnf文件中[mysqld]的下面加入: max_heap_table_size = 2048M 另外在建表語句中還可以通過MAX_ROWS來控制表的記錄數。 內存表使用哈希散列索引把數據保存在內存中,因此具有極快的速度,適合緩存中小型數據庫,但是使用上受到一些限制。 1、heap對所有用戶的連接是可見的,這使得它非常適合做緩存。 2、僅適合使用的場合。heap不允許使用xxxTEXT和xxxBLOB數據類型;只允許使用=和<=>操作符來搜索記錄 (不允許<、>、<=或>=);不支持auto_increment;只允許對非空數據列進行 索引(not null)。 注:操作符 “<=>” 說明:NULL-safe equal.這個操作符和“=”操作符執行相同的比較操作,不過在兩個操作碼均為NULL時,其所得值為1而不為NULL,而當一個操作碼為NULL時,其所得值為0而不為NULL。 3、一旦服務器重啟,所有heap表數據丟失,但是heap表結構仍然存在,因為heap表結構是存放在實際數據庫路徑下的,不會自動刪除。重啟之后,heap將被清空,這時候對heap的查詢結果都是空的。 4、如果heap是復制的某數據表,則復制之后所有主鍵、索引、自增等格式將不復存在,需要重新添加主鍵和索引,如果需要的話。 5、對于重啟造成的數據丟失,有以下的解決辦法: a、在任何查詢之前,執行一次簡單的查詢,判斷heap表是否存在數據,如果不存在,則把數據重新寫入,或者DROP表重新復制某張表。這需要多做一次查詢。不過可以寫成include文件,在需要用該heap表的頁面隨時調用,比較方便。 b、對于需要該heap表的頁面,在該頁面第一次且僅在第一次查詢該表時,對數據集結果進行判斷,如果結果為空,則需要重新寫入數據。這樣可以節省一次查詢。 c、更好的辦法是在mysql每次重新啟動時自動寫入數據到heap,但是需要配置服務器,過程比較復雜,通用性受到限制。 6、一些預期可能用到的sql語句 //如果表存在,則刪除 DROP TABLE IF EXISTS `abc`; //復制整張表xyz為heap表abc(包含所有數據) CREATE TABLE ...more »mysql字符串替換函數replace
2011/08/27 at 23:07 » Comments (323)
mysql替換字符串函數replace可以實現把某字段的某些字符串替換成其他字符串,例如 update dede_addonarticle set body=replace(body,'news/uploads/allimg/c110826','news/uploads/blank.gif?') 可以把dedecms的文章內容表所有的圖片鏈接替換成空白圖片,這樣就可以去把已經上傳的大量圖片刪除以節省空間了,在對采集回來的數據尤其有用。 more »phpmyadmin 默認數據庫引擎修改為myisam
2011/08/25 at 12:24 » Comments (356)
phpmyadmin 默認創建的數據庫默認的數據庫引擎為innodb,如果希望修改為靈活性更高的myisam 在my.ini找到default-storage-engine=innodb,修改為myisam more »Mysql查詢數據表中某字段重復出現的次數,并按照次數排序
2011/08/14 at 02:29 » Comments (419)
利用Mysql中的 的聚合函數 count(*) 可以實現這個功能,例如需要查詢data表中name出現次數最多的記錄,可以先按照group by name分組,用count算出分組里的條數,再按照count排序: select name,count(*) from data group by name order by count(*) DESC limit 1 不加limit限制將返回按照name重復次數排列的數據 more »Mysql Having的用法:對group by之后的分組加限制條件
2011/08/14 at 02:27 » Comments (683)
在使用聚合函數之前,我們可以通過where對查詢加限制條件,那么如果在group by之后我們要對分組里面的數據再加限制條件怎么辦呢?答案是having。 HAVING子句可以讓我們篩選成組后的各組數據. WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前. 而 HAVING子句在聚合后對組記錄進行篩選。 having子句出現的數據必須在group by 之后,order by 之后 例如在上一篇中對name按照出現次數排序之后,我們還想只查出名字里面含有lin的數據,可以這樣寫: select name ,count(*) from data group by name having name like '%lin%' order by couny(*) DESC more »Mysql 子查詢的用法
2011/08/14 at 01:00 » Comments (337)
一,子選擇基本用法 1,子選擇的定義 子迭擇允許把一個查詢嵌套在另一個查詢當中。比如說:一個考試記分項目把考試事件分為考試(T)和測驗(Q)兩種情形。下面這個查詢就能只找出學生們的考試成績 select * from score where event_id in (select event_id from event where type='T'); 2,子選擇的用法(3種) ? 用子選擇來生成一個參考值 在這種情況下,用內層的查詢語句來檢索出一個數據值,然后把這個數據值用在外層查詢語句的比較操作中。比如說,如果要查詢表中學生們在某一天的測驗成績,就應該使用一個內層查詢先找到這一天的測驗的事件號,然后在外層查詢語句中用這個事件號在成績表里面找到學生們的分數記錄。具體語句為: select * from score where id=(select event_id from event where date='2002-03-21' and type='Q'); 需要注意的是:在應用這種內層查詢的結果主要是用來進行比較操作的分法時,內層查詢應該只有一個輸出結果才對。看例子,如果想知道哪個美國總統的生日最小,構造下列查詢 select * from president where birth=min(birth) 這個查詢是錯的!因為MySQL不允許在子句里面使用統計函數!min()函數應該有一個確定的參數才能工作!所以我們改用子選擇: select ...more »mysql操作符in between
2011/08/14 at 00:57 » Comments (331)
以下三條sql語句的效果是等效的: SELECT * FROM `logs` WHERE id = 1 or id = 2 or id = 3 SELECT * FROM `logs` WHERE id between 1 and 3 SELECT * FROM `logs` WHERE id ...more »常用的Mysql語句
2011/08/14 at 00:53 » Comments (492)
1 登陸mysql服務器 mysql -uroot -ppassword 2 進入數據庫 use haxinbbs; 3 插入一條記錄 insert into user(username,password) values('harryzyp','harryzyp'); sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表) 4 查看一個記錄或多個 select password,sex(或*) from user where username='harryzyp';(等于 = 不等于 <> 小于 < 大于 > ...more »