2011
Dec
17
假設我有個資料表名稱為 「book」, 其內容如下 :
ID | bookname | booksn | date |
---|---|---|---|
1 | harry potter | 50021 | 20120504 |
2 | The Confession | 50022 | 20120505 |
Sql select 語法
取得資料表 db的全部欄位。
- select * from book
抓取欄位 bookname 與 ID
- select ID,bookname from book
limit 1,1 ,設定區間,從第1筆之後 ,共抓1筆資料
- select * from book limit 1,1
取得第2筆資料 (ID = 2)
- select * from book where
id
=2 ;
取得 booksn=50021的資料,此sql語法會抓到 ID1
- select * from book where
booksn
='50021';
取得日期小於今天的資料
- select * from book where date < NOW();
取得日期小於 20120504 的資料
- select * from book where date <="20120504";
日期計算 TO_DAYS(date) <= TO_DAYS(NOW()) ,NOW() 為回傳目前的 timestamp , TO_DAYS 會回傳後 1970/01/01 後,已經過了幾天。
- select * from book where TO_DAYS(date) <= TO_DAYS(NOW());
建立與更改 Table
建立 Table
Create Mysql Table
- create table book(
- id int(20) not null AUTO_INCREMENT,
- bookname char(50) not null,
- PRIMARY KEY (id)
- ) engine=MyISAM default character set utf8;
- id int(20) not null AUTO_INCREMENT, 指令 id 自動編號,當新增一筆資料後, id 會自動 +1
- PRIMARY KEY (id) , 指令 primary key
更改資料表中某一個欄位
- alter table book change bookname bookname char(100) not null;
- alter table book change bookname bookname char(100) not null , change date date datetime null;
刪除資料表中某一個欄位
- alter table book drop bookname;
備份與回復資料庫
如何備份資料庫,備份資料庫的指令是使用 mysqldump ,範例中我加了 --add-drop-database 是指說,如果已存在此資料表的名稱,mysqldump 時,會自動先刪除資料表,再重新建立全新的資料。
- mysqldump --add-drop-database --databases book -u root > ~/book_sql
回復資料庫,當你的資料庫壞掉的時候,可以將剛剛備份的 sql 語法,重法輸入到資料庫。
- mysql -h localhost -u root "book" --default-character-set=utf8 < ~/book_sql
- --default-character-set=utf8 : 這個指令是要指定編碼,如果你輸出的檔案是 UTF8編碼,就一定要指定這個值,否則會出現亂碼。
備份資料表
- mysqldump databaseName tableName -u root -p > ~/tableName.sql
- mysql -h localhost -u root "databaseName" --default-character-set=utf8 -p < tableName.sql
其它 mysqldump option
mysqldump --insert-ignore --single-transaction --column-statistics=0 -u root -p --no-create-info --skip-add-locks --skip-opt --skip-comments --extended-insert=true --databases dbname --tables table > table.sql
- --single-transaction : 為了不影響線上的操作,加上才不會 lock table
- --extended-insert=true : 如果資料量很大,使用 extedned-insert 會自動 sql 語法合併成一句。
- --insert-ignore : 如果資料已存在 skip duplicate error
只想備份部分資料可以使用 --where
撈取 match 的結果
mysqldump --insert-ignore --single-transaction -u root -p --databases dbname --tables table --where "date >= '2020-01-01' " > table.sql
測試的資料表 SQL
Example
- create table book(
- id int(20) not null AUTO_INCREMENT,
- bookname char(50) not null,
- date datetime,
- PRIMARY KEY (id)
- )engine=MyISM;
- insert into book values("harry potter","50021","20120504");
- insert into book values("The Confession","50022","20120505");
修改密碼
alter user 'root'@'localhost' IDENTIFIED BY 'root_password';
增加權限
grant all on db.* to 'userName@%' identified by 'password';
其它資料
- 提升 MySql 效能: http://mysql.rjweb.org/doc.php/ricksrots