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
目前回應 Comments(3 comments)
geass 2015/04/26
補充下面
我使
s=rows2;
geass 2015/04/26
var Maxsql = 'SELECT max(id) FROM test_cn';
Replyconn.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]
請問我只想單獨取得最大數字要怎麼做
Admin
你可以用這個方式取得 702 : console.log(rows2[0]['max(cate_id)']);
GAGA 2014/11/10
想請問一下 如果要抓剛從留言板新增的一筆資料
Reply從進資料庫後會"e;自動產生編碼"e; 但是不知道要怎麼樣才抓的到??
是否再新增留言的那邊$shareNum =$_POST['id']; 是錯誤的呢??
有點不太懂ID的意思....是否是產生子網頁?
但是資料是可以成功存進資料庫的
但是卻無法單筆顯示 就像以前無名那樣 "e;單篇圖文顯示"e;
能否請教要怎麼寫呢??
Admin