@tocmysql
mysql -u root -p; //登陸語句 Enter password: //提示輸入密碼
show databases;
例如:sql
mysql> show databases; +--------------------+ | Database | +--------------------+ | chatgroup | | information_schema | | mysql | | performance_schema | | sys | | user | +--------------------+ 6 rows in set (0.01 sec)
其中,information_schema、mysq、performance_schema、sys爲數據庫默認的。<font color=red >千萬不要刪除</font>數據庫
chatgroup、user爲咱們建立的數據庫。markdown
create database "數據庫名";
例如:ide
mysql> create database people; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | chatgroup | | information_schema | | mysql | | people | | performance_schema | | sys | | user | +--------------------+ 7 rows in set (0.00 sec)
create database "數據庫名" character set utf8; 或者: create database "數據庫名" charset utf8;
直接建立的數據庫的編碼方式是MySQLM默認的編碼方式latin1(單字節編碼),若是要在數據庫中存放中文數據,設置數據庫的編碼方式爲utf8。性能
show create database "數據庫名"
例如:編碼
mysql> show create database people; +----------+----------------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------------------------------------------+ | people | CREATE DATABASE `people` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */ | +----------+----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
create database xxx character set utf8 collate utf8_general_ci;
alter database "數據庫名" character set "編碼方式"
例如:code
mysql> alter database people character set latin1; Query OK, 1 row affected (0.00 sec) mysql> show create database people; +----------+------------------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+------------------------------------------------------------------------------------------------------+ | people | CREATE DATABASE `people` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */ | +----------+------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
drop database "庫名";
use "數據庫名"; 或 use "數據庫名"
剛鏈接數據庫的時候,沒有處於任何一個數據庫,若是要是要某個數據庫,就須要用 "use" 進入數據庫中。orm
<font color=red>use "數據庫名" 是SQL語句中惟一能夠省略分號的語句。</font>server
select database();
例如:
mysql> use people; Database changed mysql> select database(); +------------+ | database() | +------------+ | people | +------------+ 1 row in set (0.00 sec)
長時間操做數據庫時,若是在不少數據庫中來回切換後,查看當前的數據庫,避免操做錯了數據庫。
show tables;
例子:
mysql> show tables; Empty set (0.00 sec)
該數據庫沒有表
create table "表名"(字段1 字段類型, 字段2 字段類型, 字段3 字段類型...); create table chinese(pid INT, name CHAR(20), age INT);
mysql> create table chinese(pid INT, name CHAR(20), age INT); Query OK, 0 rows affected (0.02 sec) mysql> show tables; +------------------+ | Tables_in_people | +------------------+ | chinese | +------------------+ 1 row in set (0.00 sec)
show create table "表名";
顯示錶的字段信息,MySQL引擎和默認字符編碼等信息
mysql> show create table chinese; +---------+----------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+----------------------------------------------------------------------------------------------------------------------------------------------------+ | chinese | CREATE TABLE `chinese` ( `pid` int DEFAULT NULL, `name` char(20) DEFAULT NULL, `age` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +---------+----------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
更好的展現表的信息
describe "表名"; 或 desc "表名";
例如:
mysql> describe chinese; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | pid | int | YES | | NULL | | | name | char(20) | YES | | NULL | | | age | int | YES | | NULL | | +-------+----------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
爲已存在的表添加一個新字段
alter table "表名" add "字段名" 數據類型;
例如:
mysql> alter table chinese height INT; 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 'height INT' at line 1 mysql> alter table chinese add height INT; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> mysql> describe chinese; +--------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+----------+------+-----+---------+-------+ | pid | int | YES | | NULL | | | name | char(20) | YES | | NULL | | | age | int | YES | | NULL | | | height | int | YES | | NULL | | +--------+----------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
alter table "表名" drop "字段名";
例如:
mysql> alter table chinese drop height; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc chinese; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | pid | int | YES | | NULL | | | name | char(20) | YES | | NULL | | | age | int | YES | | NULL | | +-------+----------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
alter table "表名" modify "字段名" 新數據類型;
mysql> alter table chinese modify name varchar(12); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc chinese; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | pid | int | YES | | NULL | | | name | varchar(12) | YES | | NULL | | | age | int | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec)
alter table "表名" change "原字段名" "新字段名" 新數據類型;
mysql> alter table chinese change name pname CHAR(128); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc chinese; +-------+-----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------+------+-----+---------+-------+ | pid | int | YES | | NULL | | | pname | char(128) | YES | | NULL | | | age | int | YES | | NULL | | +-------+-----------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
rename table "舊錶名" to "新表名";
alter table "表名" character set gbk;
select "列" from "表";
例:
mysql> select friend from leo; +--------+ | friend | +--------+ | 張三 | +--------+ 1 row in set (0.00 sec)
insert into "表"("列") values ("內容");
例:
mysql> insert into leo(friend) values ('李四'); Query OK, 1 row affected (0.00 sec) mysql> select friend from leo; +--------+ | friend | +--------+ | 張三 | | 李四 | +--------+ 2 rows in set (0.00 sec)
注意:
若是對每一個數據都依次插入信息,則不須要在表後面的括號內填數據信息,直接依次填其值
insert into "表"(內容一、內容二、內容3....);
delete from "表" where "列" = "內容";
例:
mysql> delete from leo where friend = "李四"; Query OK, 1 row affected (0.00 sec) mysql> select friend from leo; +--------+ | friend | +--------+ | 張三 | +--------+ 1 row in set (0.00 sec)
select "列" from "表" where "列" = "值"
例:
mysql> select friend from leo where friend = '張三'; +--------+ | friend | +--------+ | 張三 | +--------+ 1 row in set (0.00 sec)
update "表" set "列" = "值"
例:
mysql> update leo set friend = "李四"; Query OK, 3 rows affected (0.01 sec) Rows matched: 4 Changed: 3 Warnings: 0 mysql> select friend from leo; +--------+ | friend | +--------+ | 李四 | | 李四 | | 李四 | | 李四 | +--------+ 4 rows in set (0.00 sec)
數據類型 | 數據範圍 |
---|---|
TINYINT | -128 ~ 127 |
SMALLINT | -32768 ~ 32767 |
MEDIUMINT | -2^23 ~ 2^23-1 |
INT | -2^31 ~ 2^31-1 |
BIGINT | -2^63 ~ 2^63-1 |
數據類型 | 字符範圍 | 用途 |
---|---|---|
CHAR(n) | 0 ~ 255 byte | 定長字符串 |
VARCHAR(n) | 0 ~ 65535 byte | 變長字符串 |
TEXT | 0 ~ 65535 byte | 長文本數據 |
LONGTEXT | 0 ~ 2^32-1 byte | 極大文本數據 |
BLOB | 0 ~ 65535 byte | 二進制長文本數據 |
LONGBLOG | 0 ~ 2^32-1 byte | 二進制極大文本類型 |
數據類型 | 數據用法 | 數據範圍 |
---|---|---|
Float | Float(m,n) | 7位有效數 |
Double | Double(m,n) | 15位有效數 |
Decimal | Decimal(m,n) | 28位有效數 |
數據類型 | 數據用法 | 數據範圍 |
---|---|---|
DATE | YYY-MM-DD | 日期 |
TIME | HH::MM:SS | 時間 |
YEAR | YYYY | 年份 |
DATETIME | YYYY-MM-DD HH::MM:SS | 日期和時間 |
TIMESTAMP | 10位或13位整數(秒數) | 時間戳 |
enum(枚舉值1,枚舉值2,...)
枚舉類型只能在列出的值中選擇一個,如性別。
select * from "表名";
例:
mysql> select * from leo; +----------+--------+-----------+ | password | friend | chatgroup | +----------+--------+-----------+ | 123456 | NULL | NULL | +----------+--------+-----------+ 1 row in set (0.00 sec)
select "列名1", "列名2", "列名3".... from "表名";
例如:
mysql> select * from leo; +----------+--------+-----------+ | password | friend | chatgroup | +----------+--------+-----------+ | 123456 | NULL | NULL | +----------+--------+-----------+ 1 row in set (0.00 sec) mysql> select password from leo; +----------+ | password | +----------+ | 123456 | +----------+ 1 row in set (0.00 sec)
select "列名" from "表名";
例如:
mysql> select password from leo; +----------+ | password | +----------+ | 123456 | +----------+ 1 row in set (0.00 sec)
通常,除非肯定須要表中的每一個列,不然最好別使用 * 通配符。雖然使用通配符可能會使本身省事,不用明確列出所需列,但檢索不須要的列一般會下降檢索和應用程序的性能。
可是 * 通配符能夠檢索初名字未知的列。
select "行名" from "表名";
使用此語句會返回全部匹配的行,因此可能會有重複的值,若是隻想返回不一樣的值,能夠用<font color=red>DISTINCT</font>關鍵字,此關鍵字指示MySQL只返回不一樣的值。
select DISTINCT "行名" from "表名";
select語句返回全部匹配的行,它們多是指定表中的每一個行,爲了返回第一行或者前幾行,可以使用<font color=red>LIMIT</font>子句
select "列名" from "表名" LIMIT 5;
此語句檢索單個列,<font color=red>LIMIT 5 指示了MySQL返回很少於5行</font>。
爲了得出下一個5行,可指定要檢索的開始行和行數,以下所示:
select "列名" from "表名" LIMIT 5,5;
LIMIT 5,5 指示MySQL返回從行5開始的5行。第一個位開始的行數,第二個數爲要檢索的行數。
注意:
行0: 檢索出來的第一行爲行0而不是行1。所以,LIMIT 1,1 將檢索出第二行而不是第一行。
在行數不夠時: LIMIT 中指定要檢索的行數爲檢索的最大行數,若是沒有足夠的行(例如,給出LIMIT 10,5,但只有13行),MySQL將只返回它能返回的那麼多行。
拓展:
MySQL 5 支持LIMIT的另外一種替代語法:LIMIT 4 OFFET 3 意爲從行3開始取4行,就像LIMIT 3,4同樣。
select 表名.列名 from 表名;
例:
mysql> select leo.password from leo; +----------+ | password | +----------+ | 123456 | +----------+ 1 row in set (0.00 sec)
表名也能夠是徹底限定的,以下所示:
select 表名.列名 from 數據庫.表名
例:
mysql> select leo.password from user.leo; +----------+ | password | +----------+ | 123456 | +----------+ 1 row in set (0.00 sec)
數據排序默認升序排序。
檢索出的數據並非以純粹的隨機順序顯示的。若是不排序,數據通常將以它在底層表中出現的順序顯示。這能夠是數據最初添加到表中的順序。可是,若是數據後來進行過更新或刪除,則此順序將會收到MySQL重用回收存儲空間的影響。所以,若是不明確的話,不能依賴該排序順序。
SQL語句由子句構成,有些子句是必需的,而有的是可選的。一個子句一般由一個關鍵字和所提供的數據組成,子句的例子就有 select語句 和 from語句
爲了明確地排序用select語句檢索出地數據,可以使用order by子句。 ordey by子句取一個或多個列的名字,據此對輸出進行排序。
select "列名" from "表名" order by "列名";
<font color=red>以字母順序進行排序</font>
select "列名1", "列名2" from "表名" order by "列名1","列名2";
select "列名1", "列名2", "列名3" from "表名" order by "列名1","列名2";
僅對列名1和列名2進行排序,列名3不進行排序。
爲了進行降序排序,必須指定DESC關鍵字。
select "列名1","列名2","列名3" from "表名" order by "列名1" DESC;
僅對列名1進行降序排序。
select "列名1","列名2","列名3", from "表名" order by "列名1" DESC, "列名2";
對列名1進行降序排序,對列名2進行默認升序排序。
注意:
在多個列上降序排序: 若是想在多個列上進行降序排序,<font color=red>必須對每一個列指定DESC關鍵字</font>
Tips:
區分大小寫和排序順序 在對文本性的數據進行排序時,A與a相同嗎?a位於B以前仍是位於Z以後?這些問題不是理論問題,其答案取決於數據庫如何設置。在字典(dictionary)排序順序中,A被視爲與a相同,這是MySQL
(和大多數數據庫管理系統)的默認行爲。可是,許多數據庫管理員可以在須要時改變這種行爲(若是你的數據庫包含大量外語字符,可能必須這樣作)。這裏,關鍵的問題是,若是確實須要改變這種排序順序,用簡單的ORDER BY子句作不到。你必須請求數據庫管理員的幫助。
拓展:
使用order by和LIMIT的組合,可以找出一個列中最高或最低的值。
select "列" from "表" order by "列" DESC LIMIT 1;
由於使用降序排序而且只返回一行,因此爲找出了最大值。