如果更新 key 沖突,那麼按照指定的規則來更新數據,有時候這樣可以方便不少。還有一個是連表更新數據,這樣可以將 table_b 的 狀態同步到 table_a, 本質上和 多表查詢是類似的。
insert into myblog (id,title,ctime) values(123,'hello',now())on duplicate key update title=values(title),ctime=values(ctime);
update table_a a , table_b b set a.shop_status = b.group_status where a.shop_id = b.shop_id;
將 blog_bak表中的所有數據導入到myblog 中,表 blog 和 blog_bak 應該有同樣的表結構
insert into myblog( blog,ctime) select * from blog_bak;
給自己的表添加索引,可以給多個字段添加索引,有下面兩種方式,對應的,刪除索引的方法也列在了下面。
create index index_name on table_name (column_list);
alter table table_name add index index_name (column_list);
drop index index_name on table;
alter table table_name drop index index_name;
有時候遇到了 warnnings,怎麼查看呢,可以用下面的命令,查看全表的信息,可以查到自己表的注釋信息是可以用最後一個命令full fields from。
show warnings;
show errors;
show tables like '%talname%';
show full fields from your_table;
truncate table會清空表中的數據,包括auto_increment的字段都會被重置。mysqldump 可以又這些選擇,導出表,導出庫,導出表結構,導出表中的數據。或者整體導出,下面都有對應的shell命令。
mysqldump -h localhost -ppasswd -uroot -d database > dump.sql ;
#只導出數據庫的結構
mysqldump -h localhost -ppasswd -uroot database > dump.sql ;
#導出數據庫的結構和所有的數據
mysqldump -h localhost -ppasswd -uroot -d database tablename > dump.sql ;
#只導出表結構
mysqldump -h localhost -ppasswd -uroot database tablename > dump.sql ;
#導出表結構和表中的數據
mysql -u root -p yourpasswd -h localhost yourdb < dump.sql
#將dump.sql 導出入到你的數據庫
請不要吧 day 寫成 days ,month , hour 同理,group by 多個字段 從 col_a -> col_b -> col_c 優先級依次降低。
select date_format(now(),"%Y-%m-%d %H:%i:%s") now;
select date_sub(now(), interval 10 day) as yesterday;
select * from test_table where status = 1 order by col_a desc, col_b desc, col_c asc limit 100;
可以通過 select 給變量賦值,對,你沒有看錯,這兩種方式都可以給@a賦值。使用的時候記得用@啊,就像PHP裡面的$一樣,這個變量只在這個鏈接周期中有效。
set @a = 100;
set @a:=100;
select @a:=300;
下面是一個簡單的存儲過程的例子,因為 mysql 默認的 終止符是; 而這個正好是存儲過程的語法,所以在編寫存儲過程之前,先將 delimiter 改成 $,在存儲過程結束之後,應將 delimiter 改成默認的; 這樣符合我們的習慣, 最後是調用這個存儲過程call p()。具體代碼如下:
delimiter $
create procedure p()
begin
select * from ttt;
end;
$
delimiter ;
call p();
下面是我的 centos 6.5 上的mysql 的配置文件,mysql是通過yum安裝的,貌似版本都是5.1的….我添加的內容是斜體部分,目的就是設置默認的字符集為utf8 ,如果有些部分沒有,請自行添加,比如[client]沒有的話,在我的配置文件中,我就是自己添加的,不知道那個版本的mysql配置為何那麼奇葩,以至於剛打開都不太敢相信自己的眼睛。
[client]
default_character_set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character_set_server=utf8
init_connect=’SET NAMES utf8’
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=utf8
權限管理的所有信息都存放在mysql這個數據庫中。只有通過root用戶進去才可以進行對應的操作。前面一個是創建一個用戶,host 是表明這個用戶可以從什麼地方連接數據庫,設置成本地比較安全,注意其中的password()函數。flush privileges是讓修改生效。最後的grant是將一個數據庫t_sweet 授權給這個用戶。
use mysql;
insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234"));
flush privileges
grant all privileges on t_sweet.* to sweet_b@localhost identified by 'yourpassword'
設置好之後可以這樣看一下。
show variables like 'character%'