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)