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';

其它資料


目前回應 Comments(3 comments)

  • geass 2015/04/26

    補充下面
    我使
    s=rows2;

  • geass 2015/04/26

    var Maxsql = 'SELECT max(id) FROM test_cn';
    conn.query(Maxsql,function(err2,rows2)
    {
    if (err2) console.log("e;POOL ==> "e; + err2);
    console.log(rows2);
    console.log('s=',s.toString());

    });

    -------------------------------------
    真對我的資料庫而言
    row2 會輸出 [('max(id)': 702)]
    s 會輸出 [object Object]

    請問我只想單獨取得最大數字要怎麼做

    Reply

    Admin

    你可以用這個方式取得  702  :  console.log(rows2[0]['max(cate_id)']);

     

     

     

  • GAGA 2014/11/10

    想請問一下 如果要抓剛從留言板新增的一筆資料
    從進資料庫後會"e;自動產生編碼"e; 但是不知道要怎麼樣才抓的到??
    是否再新增留言的那邊$shareNum =$_POST['id']; 是錯誤的呢??
    有點不太懂ID的意思....是否是產生子網頁?
    但是資料是可以成功存進資料庫的

    但是卻無法單筆顯示 就像以前無名那樣 "e;單篇圖文顯示"e;
    能否請教要怎麼寫呢??

    Reply

    Admin

    你可以先登入資料庫,查詢這筆新增留言的 ID 是什麼,通常 ID 都是 MySQL 自動給的一個不重覆數字。
    接著用 SQL 語法: select * from table where id="001?"  去取得這筆留言的資料。 

回應 (Leave a comment)