程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql學習記錄關鍵點

mysql學習記錄關鍵點

編輯:關於MYSQL數據庫

char 和 varcha的區別

char用於表示固定長度的字符串

varchar可以保存可變長度的字符串

雖然varchar使用起來比較靈活,但是從整個系統性能角度來說,char類型的處理速度更快,有時甚至超出varchar的50%。

char長度不足時是右補空格來存儲的,

假如name char(5),則“bob”在數據的實際存儲是“bob” + 兩個空格;

set與enum的區別

都屬於枚舉類型,區別是enum僅允許一個有效數據值,而set可以是有效數據的組合。

MySQL> desc books;

+-------+----------------------+------+-----+---------+----------------+
| FIEld | Type                 | Null | Key | Default | Extra          | | id    | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| name  | char(10)             | NO   | UNI | NULL    |                |
| count | smallint(5) unsigned | NO   |     | 0       |                |
+-------+----------------------+------+-----+---------+----------------+

MySQL> alter table `books` add column `transport` set ("hk","sh") not null after count;

MySQL> desc books; | FIEld     | Type                 | Null | Key | Default | Extra          | | id        | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| name      | char(10)             | NO   | UNI | NULL    |                |
| count     | smallint(5) unsigned | NO   |     | 0       |                |
| transport | set('hk','sh')       | NO   |     | NULL    |                | 4 rows in set (0.00 sec)

MySQL> update books set transport='hk,sh' where id = 1;

MySQL> select * from books; | id | name    | count | transport | |  1 | Windows |     4 | hk,sh     |
+----+---------+-------+-----------+

LIKE(not like) 和 REGEXP(not regexp)

like一般使用“_”(匹配單個字符)或“%”(匹配0個或者任意個字符)

如果需要匹配“_”或者“%”需要轉義,如“\_”,“\%”

regexp表示正則擴展模式匹配

MySQL> select * from books; | id | name    | count | transport | |  1 | Windows |     4 | hk,sh     |
|  2 | haha_   |     5 | hk        |

MySQL> select * from books where name regexp "window[s]"; | id | name    | count | transport | |  1 | Windows |     4 | hk,sh     | +----+---------+-------+-----------+

匹配以“s”結尾的記錄

MySQL> select * from books where name regexp "s$"; | id | name    | count | transport | |  1 | Windows |     4 | hk,sh     |
+----+---------+-------+-----------+

匹配以w或者h開頭的記錄

MySQL> select * from books where name regexp "^[wh]"; | id | name    | count | transport | |  1 | Windows |     4 | hk,sh     |
|  2 | haha_   |     5 | hk        |
+----+---------+-------+-----------+

匹配有5個字符的name的所有記錄

MySQL> select * from books where name regexp "^.{5}$"; | id | name  | count | transport | |  2 | haha_ |     5 | hk        |
+----+-------+-------+-----------+

text和blob

text是大小寫不敏感的blob

如果超過長度會被截斷。

blob和text指不能有default值。

權限控制

MySQL> GRANT ALL ON *.* TO root@'10.10.11.91' IDENTIFIED BY 'root' WITH GRANT OPTION;

拷貝表結構

create table to_table as select * from from_table where 1<>1;

create table to_table (id,name,num) as select id,name,num from from_table where 1<>1;

ps:從from_table將表結構拷貝到to_table。

在表頭部增加一個字段

alter table table_name add column id int(10) not null primary key auto_increment first

拷貝表內容

insert into to_table select * from from_table where 1;

insert into to_table(id,name,num) select id,name,num from from_table where 1;

清除表的query緩存

reset query cache

或者

flush tables table_name

在查詢的時候避免使用索引  -- sql_no_cache

select sql_no_cache count(*) from table;

這樣可以讓一些很少使用的語句不放在緩存裡,查找的時候不會去緩存裡找.對應的是強制緩存sql_cache

select sql_cache count(*) from table_name;

另外在my.cnf中如果設置query_cache_type=2的話,那麼只有在使用sql_cache後才會使用緩存;

  • 思考一:假如一張表,主鍵為id int(10) not null auto_increment

假如我要count他,是用

select count(0) from table where id >0

還是用

select count(0) from table

哪個效率更高。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved