2011
Dec
17

網頁好讀版


假設我有個資料表名稱為 「book」, 其內容如下 :

IDbooknamebooksndate
1harry potter5002120120504
2The Confession50022 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
  1. create table book(
  2. id int(20) not null AUTO_INCREMENT,
  3. bookname char(50) not null,
  4. PRIMARY KEY (id)
  5. ) 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
  1. create table book(
  2. id int(20) not null AUTO_INCREMENT,
  3. bookname char(50) not null,
  4. date datetime,
  5. PRIMARY KEY (id)
  6. )engine=MyISM;
  7. insert into book values("harry potter","50021","20120504");
  8. 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';

其它資料

網頁好讀版