天天看點

MySQL增删改查和一些常用操作

增加記錄

  INSERT INTO 表名(字段名,字段名) VALUES (值,值);

删除記錄

  DELETE FROM 表名 WHERE 條件(oracal中就可以不要from)

修改記錄

  UPDATE 表名 SET 字段=值,字段=值 WHERE 條件

查詢記錄

  SELECT 字段,字段 FROM 表名 WHERE 條件

了解了一些最基本的操作指令後,我們再來學習如何建立一個資料庫和資料庫表。

    1、使用SHOW語句找出在伺服器上目前存在什麼資料庫:

mysql> SHOW DATABASES; 

+----------+ 

| Database | 

| mysql | 

| test | 

3 rows in set (0.00 sec)

    2、建立一個資料庫abccs 

    mysql> CREATE DATABASE abccs; 

    注意不同作業系統對大小寫的敏感。

    3、選擇你所建立的資料庫 

    mysql> USE abccs 

    Database changed 

    此時你已經進入你剛才所建立的資料庫abccs. 

    4、 建立一個資料庫表

    首先看現在你的資料庫中存在什麼表: 

    mysql> SHOW TABLES; 

    Empty set (0.00 sec) 

    說明剛才建立的資料庫中還沒有資料庫表。下面來建立一個資料庫表mytable: 

    我們要建立一個你公司員工的生日表,表的内容包含員工姓名、性别、出生日期、出生城市。

mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), 

 birth DATE, birthaddr VARCHAR(20)) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

Query OK, 0 rows affected (0.00 sec)

    由于name、birthadd的列值是變化的,是以選擇VARCHAR,其長度不一定是20。可以選擇從1到255的任何長度,如果以後需要改變它的字長,可以使用ALTER TABLE語句。);性别隻需一個字元就可以表示:"m"或"f",是以選用CHAR(1);birth列則使用DATE資料類型。

    建立了一個表後,我們可以看看剛才做的結果,用SHOW TABLES顯示資料庫中有哪些表:

mysql> SHOW TABLES; 

+---------------------+ 

| Tables in menagerie | 

| mytables | 

+---------------------+

    5、顯示表的結構:

mysql> DESCRIBE mytable; 

+-------------+-------------+------+-----+---------+-------+ 

| Field | Type | Null | Key | Default | Extra | 

| name | varchar(20) | YES | | NULL | | 

| sex | char(1) | YES | | NULL | | 

| birth | date | YES | | NULL | | 

| deathaddr | varchar(20) | YES | | NULL | | 

4 rows in set (0.00 sec)

    6、 往表中加入記錄

    我們先用SELECT指令來檢視表中的資料:字段帶别名查詢的時候,中文的别名要加上單引号; 

    mysql> select * from mytable; 

    Empty set (0.00 sec)

    這說明剛才建立的表還沒有記錄。

    加入一條新記錄:

mysql> insert into mytable 

-> value (′abccs′,′f′,′1977-07-07′,′china′); 

Query OK, 1 row affected (0.05 sec)

    再用上面的SELECT指令看看發生了什麼變化。我們可以按此方法一條一條地将所有員工的記錄加入到表中。

    7、用文本方式将資料裝入一個資料庫表

    如果一條一條地輸入,很麻煩。我們可以用文本檔案的方式将所有記錄加入你的資料庫表中。建立一個文本檔案“mysql.txt”,每行包含一個記錄,用定位符(tab)把值分開,并且以在CREATE TABLE語句中列出的列次序給出,例如:

abccs f 1977-07-07 china   

mary f 1978-12-12 usa 

tom m 1970-09-02 usa

    使用下面指令将文本檔案“mytable.txt”裝載到mytable表中:mysql> LOAD DATA LOCAL INFILE "mytable.txt(加路徑)" INTO TABLE pet(表名);

    再使用如下指令看看是否已将資料輸入到資料庫表中:mysql> select * from mytable;

MySQL實用指令

Wikipedia,自由的百科全書

一) 連接配接MYSQL:

   格式: mysql -h主機位址 -u使用者名 -p使用者密碼

1、例1:連接配接到本機上的MYSQL

   首先在打開DOS視窗,然後進入mysql安裝目錄下的bin目錄下,例如: D:\mysql\bin,再鍵入指令mysql -uroot -p,回車後提示你輸密碼,如果剛安裝好MYSQL,超級使用者root是沒有密碼的,故直接回車即可進入到MYSQL中了,MYSQL的提示符是:mysql> 

2、例2:連接配接到遠端主機上的MYSQL

   假設遠端主機的IP為:10.0.0.1,使用者名為root,密碼為123。則鍵入以下指令:

   mysql -h10.0.0.1 -uroot -p123 

  (注:u與root可以不用加空格,其它也一樣) 

3、退出MYSQL指令

   exit (回車)

(二) 修改密碼:

   格式:mysqladmin -u使用者名 -p舊密碼 password 新密碼 

1、例1:給root加個密碼123。首先在DOS下進入目錄C:\mysql\bin,然後鍵入以下指令:

   mysqladmin -uroot -password 123 

   注:因為開始時root沒有密碼,是以-p舊密碼一項就可以省略了。 

2、例2:再将root的密碼改為456

   mysqladmin -uroot -pab12 password 456 

(三) 增加新使用者:(注意:和上面不同,下面的因為是MYSQL環境中的指令,是以後面都帶一個分号作為指令結束符)

   格式:grant select on 資料庫.* to 使用者名@登入主機 identified by "密碼" 

   例1、增加一個使用者test1密碼為abc,讓他可以在任何主機上登入,并對所有資料庫有查詢、插入、修改、删除的權限。首先用以root使用者連入MYSQL,然後鍵入以下指令: 

   但例1增加的使用者是十分危險的,你想如某個人知道test1的密碼,那麼他就可以在internet上的任何一台電腦上登入你的mysql資料庫并對你的資料可以為所欲為了,解決辦法見例2。 

   例2、增加一個使用者test2密碼為abc,讓他隻可以在localhost上登入,并可以對資料庫mydb進行查詢、插入、修改、删除的操作(localhost指本地主機,即MYSQL資料庫所在的那台主機),這樣使用者即使用知道test2的密碼,他也無法從internet上直接通路資料庫,隻能通過MYSQL主機上的web頁來通路了。 

   如果你不想test2有密碼,可以再打一個指令将密碼消掉。 

(四) 顯示指令

1、顯示資料庫清單:

   show databases; 

   剛開始時才兩個資料庫:mysql和test。mysql庫很重要它裡面有MYSQL的系統資訊,我們改密碼和新增使用者,實際上就是用這個庫進行操作。 

2、顯示庫中的資料表:

   use mysql; //打開庫

   show tables; 

3、顯示資料表的結構:

   describe 表名; 

4、建庫:

   create database 庫名; 

5、建表:

   use 庫名; 

   create table 表名 (字段設定清單); 

6、删庫和删表:

   drop database 庫名; 

   drop table 表名; 

7、将表中記錄清空:

   delete from 表名; 

8、顯示表中的記錄:

   select * from 表名;

#################################

檢視mysql的字元集:

mysql> show variables like "character\_set\_%";

+--------------------------+--------+

| Variable_name            | Value  |

| character_set_client     | gbk    |

| character_set_connection | gbk    |

| character_set_database   | gbk    |

| character_set_filesystem | binary |

| character_set_results    | gbk    |

| character_set_server     | gbk    |

| character_set_system     | utf8   |

+--------------------------+--------+ 

character_set_system 總是utf-8

這5個最好總是保持一緻,要不就和亂碼玩爽吧:

character_set_client    

character_set_connection

character_set_database  

character_set_results   

character_set_server  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<???>

2008-09-12

如何啟動/停止/重新開機MySQL

一、啟動方式

D:\MySQL\MySQL Server 5.0\bin>net stop mysql

MySQL 服務正在停止.

MySQL 服務已成功停止。

1、使用 service 啟動:service mysqld start

2、使用 mysqld 腳本啟動:/etc/inint.d/mysqld start

3、使用 safe_mysqld 啟動:safe_mysqld&

二、停止 

停止:

1、使用 service 啟動:service mysqld stop

2、使用 mysqld 腳本啟動:/etc/inint.d/mysqld stop

3、mysqladmin shutdown

三、重新開機

1、使用 service 啟動:service mysqld restart

2、使用 mysqld  腳本啟動:/etc/inint.d/mysqld restart

一 . 安裝與配置MYSQL

二 . 常用mysql指令行指令

1 .mysql的啟動與停止

啟動MYSQL服務 net start mysql

停止MYSQL服務 net stop mysql

2 . netstat –na | findstr 3306 檢視被監聽的端口 , findstr用于查找後面的端口是否存在

3 . 在指令行中登陸MYSQL控制台 , 即使用 MYSQL COMMEND LINE TOOL

     文法格式 mysql –user=root –password=123456 db_name

       或 mysql –uroot –p123456 db_name

4 . 進入MYSQL指令行工具後 , 使用status; 或\s 檢視運作環境資訊

5 . 切換連接配接資料庫的文法 : use new_dbname;

6 . 顯示所有資料庫 : show databases;

7 . 顯示資料庫中的所有表 : show tables;

8 . 顯示某個表建立時的全部資訊 : show create table table_name;

9 . 檢視表的具體屬性資訊及表中各字段的描述

   Describe table_name; 縮寫形式 : desc table_name;

三 。 MySql中的SQL語句

1 . 資料庫建立 : Create database db_name;

資料庫删除 : Drop database db_name; 删除時可先判斷是否存在,寫成 : drop database if exits db_name

2 . 建表 : 建立資料表的文法 : create table table_name (字段1 資料類型 , 字段2 資料類型);

   例 : create table mytable (id int , username char(20));

   删表 : drop table table_name; 例 : drop table mytable;

8 . 添加資料 : Insert into 表名 [(字段1 , 字段2 , ….)] values (值1 , 值2 , …..); 

如果向表中的每個字段都插入一個值,那麼前面 [ ] 括号内字段名可寫也可不寫

   例 : insert into mytable (id,username) values (1,’zhangsan’);

9 . 查詢 : 查詢所有資料 : select * from table_name; 

查詢指定字段的資料 : select 字段1 , 字段2 from table_name;

例 : select id,username from mytable where id=1 order by desc;多表查詢語句------------參照第17條執行個體

10 . 更新指定資料 , 更新某一個字段的資料(注意,不是更新字段的名字)

Update table_name set 字段名=’新值’ [, 字段2 =’新值’ , …..][where id=id_num] [order by 字段 順序]

例 : update mytable set username=’lisi’ where id=1;

Order語句是查詢的順序 , 如 : order by id desc(或asc) , 順序有兩種 : desc倒序(100—1,即從最新資料往後查詢),asc(從1-100),Where和order語句也可用于查詢select 與删除delete

11 . 删除表中的資訊 : 

     删除整個表中的資訊 : delete from table_name;

   删除表中指定條件的語句 : delete from table_name where 條件語句 ; 條件語句如 : id=3;

12 . 建立資料庫使用者

一次可以建立多個資料庫使用者如:

CREATE USER username1 identified BY ‘password’ , username2 IDENTIFIED BY ‘password’….

13 . 使用者的權限控制:grant

   庫,表級的權限控制 : 将某個庫中的某個表的控制權賦予某個使用者

   Grant all ON db_name.table_name TO user_name [ indentified by ‘password’ ];

14 . 表結構的修改

(1)增加一個字段格式:

alter table table_name add column (字段名 字段類型); ----此方法帶括号

(2)指定字段插入的位置:

alter table table_name add column 字段名 字段類型 after 某字段;

删除一個字段:

alter table table_name drop字段名; 

(3)修改字段名稱/類型

alter table table_name change 舊字段名 新字段名 新字段的類型;

(4)改表的名字

alter table table_name rename to new_table_name; 

(5)一次性清空表中的所有資料 

truncate table table_name; 此方法也會使表中的取号器(ID)從1開始

15 . 增加主鍵,外鍵,限制,索引。。。。(使用方法見17執行個體)

① 限制(主鍵Primary key、唯一性Unique、非空Not Null)

② 自動增張 auto_increment

③外鍵Foreign key-----與reference table_name(col_name列名)配合使用,建表時單獨使用

④ 删除多個表中有關聯的資料----設定foreign key 為set null ---具體設定參考幫助文檔

16 . 檢視資料庫目前引擎

   SHOW CREATE TABLE table_name;

   修改資料庫引擎

   ALTER TABLE table_name ENGINE=MyISAM | InnoDB;

17 . SQL語句運用執行個體:

--1 建users表

create table users (id int primary key auto_increment,nikename varchar(20) not null unique,password varchar(100) not null,address varchar(200), reg_date timestamp not null default CURRENT_TIMESTAMP);

--2 建articles表,在建表時設定外鍵

create table articles (id int primary key auto_increment,content longtext not null,userid int,constraint foreign key (userid) references users(id) on delete set null);

-----------------------------------------------------------------------

--2.1 建articles表,建表時不設定外鍵

   create table articles (id int primary key auto_increment,content longtext not null,userid int);

--2.2 給articles表設定外鍵

   alter table articles add constraint foreign key (userid) references users(id) on delete set null;

------------------------------------------------------------------------

--3. 向users表中插入資料,同時插入多條

insert into users (id,nikename,password,address) values (1,'lyh1','1234',null),(10,'lyh22','4321','湖北武漢'),(null,'lyh333','5678','北京海澱');

--4. 向article中插入三條資料

insert into articles (id,content,userid) values (2,'hahahahahaha',11),(null,'xixixixixix',10),(13,'aiaiaiaiaiaiaiaiaiaiaiaia',1),(14,'hohoahaoaoooooooooo',10);

--5. 進行多表查詢,選擇users表中ID=10的使用者釋出的所有留言及該使用者的所有資訊

select articles.id,articles.content,users.* from users,articles where users.id=10 and articles.userid=users.id order by articles.id desc;

--6. 檢視資料庫引擎類型

show create table users;

--7. 修改資料庫引擎類型

alter table users engine=MyISAM; ---因為users表中ID被設定成外鍵,執行此句會出錯

--8. 同表查詢,已知一個條件的情況下.查詢ID号大于使用者lyh1的ID号的所有使用者

select a.id,a.nikename,a.address from users a,users b where b.nikename='lyh1' and a.id>b.id;

------也可寫成

select id,nikename,address from users where id>(select id from users where nikename='lyh1');

9. 顯示年齡比上司還大的員工:

select a.name from users a,users b where a.managerid=b.id and a.age>b.age;

查詢編号為2的發帖人: 先查articles表,得到發帖人的編号,再根據編号查users得到的使用者名。

接着用關聯查詢.

select * from articles,users得到笛卡兒積,再加order by articles.id以便觀察

使用select * from articles,users where articles.id=2 篩選出2号文章與每個使用者的組合記錄

再使用select * from articles,users where articles.id=2 and articles.userid=users.id選出users.id等于2号帖的發帖人id的記錄.

隻取使用者名:select user where user.id=(select userid from articles where article.id =2)

找出年齡比小王還大的人:假設小王是28歲,先想找出年齡大于28的人 

select * from users where age>(select age from users where name='xiaowang');

*****要查詢的記錄需要參照表裡面的其他記錄:

select a.name from users a,users b where b.name='xiaowang' and a.age>b.age

表裡的每個使用者都想pk一下.select a.nickname,b.nickname from users a,users b where a.id>b.id ;

更保險的語句:select a.nickname,b.nickname from (select * from users order by id) a,(se

lect * from users order by id) b where a.id>b.id ;

再查詢某個人發的所有文章.

select b.* from articles a , articles b where a.id=2 and a.userid=b.userid

說明: 表之間存在着關系,ER概念的解釋,用access中的示例資料庫示範表之間的關系.隻有innodb引擎才支援foreign key,mysql的任何引擎目前都不支援check限制。

四、字元集出現錯誤解決辦法

出現的問題:

mysql> update users

-> set username='關羽'

-> where userid=2;

ERROR 1366 (HY000): Incorrect string value: '\xB9\xD8\xD3\xF0' for column 'usern

ame' at row 1

向表中插入中文字元時,出現錯誤。

mysql> select * from users;

+--------+----------+

| userid | username |

| 2 | ???? |

| 3 | ???? |

| 4 | ?í?ù |

表中的中文字元位亂碼。

解決辦法:

使用指令:

mysql> status;

--------------

mysql Ver 14.12 Distrib 5.0.45, for Win32 (ia32)

Connection id: 8

Current database: test

SSL: Not in use

Using delimiter: ;

Server version: 5.0.45-community-nt MySQL Community Edition (GPL)

Protocol version: 10

Connection: localhost via TCP/IP

Server characterset: latin1

Db characterset: latin1

Client characterset: gbk

Conn. characterset: gbk

TCP port: 3306

Uptime: 7 hours 39 min 19 sec

Threads: 2 Questions: 174 Slow queries: 0 Opens: 57 Flush tables: 1 Open ta

bles: 1 Queries per second avg: 0.006

檢視mysql發現Server characterset,Db characterset的字元集設成了latin1,是以出現中文亂碼。

mysql> show tables;

+----------------+

| Tables_in_test |

| users |

1 row in set (0.00 sec)

更改表的字元集。

mysql> alter table users character set GBK;

Query OK, 3 rows affected (0.08 sec)

Records: 3 Duplicates: 0 Warnings: 0

檢視表的結構:

mysql> show create users;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that

corresponds to your MySQL server version for the right syntax to use near 'users

' at line 1

mysql> show create table users;

+-------+-----------------------------------------------------------------------

------------------------------------------------------------------------------+

| Table | Create Table

|

| users | CREATE TABLE `users` (

`userid` int(11) default NULL,

`username` char(20) character set latin1 default NULL

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

mysql> desc users;

+----------+----------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

| userid | int(11) | YES | | NULL | |

| username | char(20) | YES | | NULL | |

2 rows in set (0.02 sec)

這時向表中插入中文然後有錯誤。

mysql> insert into users values(88,'中文');

ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column 'usern

還要更改users表的username的字元集。

mysql> alter table users modify username char(20) character set gbk;

ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'usern

因為表中已經有資料,是以更改username字元集的操作沒有成***

清空users表中的資料

mysql> truncate table users;

Query OK, 3 rows affected (0.01 sec)

從新更改user表中username的字元集

Query OK, 0 rows affected (0.06 sec)

Records: 0 Duplicates: 0 Warnings: 0

這時再插入中文字元,插入成***。

Query OK, 1 row affected (0.01 sec)

| 88 | 中文 |

mysql>

本文轉自   ChinaUnicom110   51CTO部落格,原文連結:http://blog.51cto.com/xingyue2011/1888962