mysql 學(xué)習(xí)筆記1 基礎(chǔ)

參考
MySQL 5.5 Reference Manual
MySQL 教程 | 菜鳥(niǎo)教程


知識(shí)點(diǎn)大綱

  • 1 基本知識(shí)
    • 1.1概念
    • 1.2安裝與連接
    • 1.3客戶端
    • 1.4數(shù)據(jù)類型
  • 2 DDL
    • 2.1庫(kù)操作
    • 2.2表操作
    • 2.3列操作
  • 3 DML
    • 增刪改
  • 4 DCL
    • 權(quán)限
  • 5 高級(jí)(優(yōu)化等等)

1 基本知識(shí)

1.png

1.1概念

1.2安裝與連接

1.3客戶端

1.4數(shù)據(jù)類型

因?yàn)閙ysql主要業(yè)務(wù)就是處理數(shù)據(jù),所以他對(duì)數(shù)據(jù)處理更加細(xì)致,數(shù)據(jù)的分類上就很細(xì),大致分為三類:

  • 數(shù)值型
  • 字符串型
  • 時(shí)間日期型
    數(shù)值型又細(xì)分為整型 浮點(diǎn)型和定點(diǎn)型,下面細(xì)說(shuō)

數(shù)據(jù)類型>數(shù)值型>整型

|類型名|取值范圍(有符號(hào)或無(wú)符號(hào))|占用存儲(chǔ)(字節(jié))|范圍對(duì)應(yīng)感覺(jué)|
|-|-|-|
|TINYINT| -128~127 或0~2^8-1 | 1|比如存年齡|
|SMALLINT |-32768~32767或0~2^16-1 |2|正負(fù)3萬(wàn),一般商品ID夠了|
|MEDIUMINT |-223~223-1或0~2^24-1 |3|正負(fù)八百萬(wàn)|
|INT| -231~231-1或0~2^32-1 |4|正負(fù)20億|
|BIGINT |-263~263-1或0~2^64-1 |8|正負(fù)十萬(wàn)萬(wàn)億...|
一個(gè)字節(jié)byte=8位bit
有沒(méi)有符號(hào)用unsigned來(lái)表明,
整型還有zerofill和M屬性
M的意思是表明數(shù)字最長(zhǎng)有幾位,配合zerofill用會(huì)將不足的位數(shù)用0填充,如果不寫zerofill,其實(shí)M起不到任何作用,沒(méi)有意義
此此外,寫了zerofill那就是自動(dòng)unsigned的。

數(shù)據(jù)類型>數(shù)值型>定點(diǎn)與浮點(diǎn)

|類型名 |占用存儲(chǔ)(字節(jié))|范圍|
|-|-|
|FLOAT(M,D)| 4|正負(fù)3.4E+38|
|DOUBLE(M,D)| 8|范圍更大,不必去記憶了|
|DECIMAL(M, D) |M+2 (ver >3.23)||
M表示小數(shù)點(diǎn)前后總位數(shù),D表示小數(shù)點(diǎn)后面位數(shù),而且不同于int的M值在zerofill時(shí)才有用,浮點(diǎn)數(shù)的M和D是真的有用,就是這個(gè)范圍了
為什么float和int都是4字節(jié),范圍不一樣呢
float/double , 有精度損失
decimal 定點(diǎn)型,更精確
定點(diǎn)型,是將整數(shù)部分和小數(shù)部分用分別用數(shù)字來(lái)存儲(chǔ)的,所以定點(diǎn)型更精確,看如下的例子

folat和decimal.png

在為列選擇了使用某種數(shù)值類型時(shí),除了要考慮數(shù)據(jù)的類型外,還應(yīng)該注意所要表示的值的范圍和存儲(chǔ)需求,只需選擇能覆蓋要取值的范圍的最小類型即可。

數(shù)據(jù)類型>字符串型

類型名 備注
CHAR(M) 定長(zhǎng)字符串,M<255字符,M表示字符數(shù),不夠M的會(huì)用空格填充
VARCHAR(M) 變長(zhǎng)字符串,M<(65535轉(zhuǎn)換成對(duì)應(yīng)的字符數(shù))
TEXT(M) M<2^16-1=65535字符 與varchar相反,很大的文本,慢,能用varchar就用varchar
ENUM('value1','value2',...) 枚舉:列只能賦值為某個(gè)枚舉成員或NULL
SET('value1','value2',...) 集合:列可以賦值為多個(gè)(最多64個(gè))集合成員或NULL
BLOB BLOB(2^16-1)音頻圖像等
TINYBLOB BLOB(2^8-1)
MEDIUMBLOB BLOB(2^24-1)
LONGBLOB BLOB(2^32-1)
TINYTEXT TEXT(2^8-1)
MEDIUMTEXT TEXT(2^24-1)
LONGTEXT TEXT(2^32-1)

表格中,BLOB是一個(gè)能保存可變數(shù)量的數(shù)據(jù)的二進(jìn)制的大對(duì)象。在某種意義上,串實(shí)際是一種非常“通用”類型,因?yàn)榭捎盟鼈儊?lái)表示任意值,不僅僅是字符串。例如,可用串類型來(lái)存儲(chǔ)二進(jìn)制數(shù)據(jù),如圖像、視頻或音頻。

char和varchard的選擇?
字?jǐn)?shù)少于20的話 直接用char,速度快
char和varchar的區(qū)別很有意思,有時(shí)單獨(dú)開(kāi)一篇

數(shù)據(jù)類型>日期和時(shí)間列類型

|類型名 |范圍|含義|
|-|-|
|DATE|1000-01-01
到9999-12-31|日期, 'YYYY-MM-DD'
年份寫兩位的話0-69是用用20補(bǔ)全,70-99是用19補(bǔ)全|
|TIME|-838:59:59
到838:59:59|時(shí)間, 'HH:MM:SS'|
|DATETIME||時(shí)間和時(shí)間組合, 'YYYY-MM-DD HH:MM:SS|
|TIMESTAMP||時(shí)間戳,是1970-01-01到當(dāng)前的秒數(shù)
timestamp不填的話會(huì)自動(dòng)插入和更新|
所有時(shí)間日期類型數(shù)據(jù)要加引號(hào)插入

舉例,生成一個(gè)日期和時(shí)間表,并插入2個(gè)元素:

CREATE TABLE my_test
(
    id INT,
    ts TIMESTAMP
)
INSERT my_test VALUES(1,20010101000000)
INSERT my_test(id) VALUES(2);
 
SELECT * from my_test
 
+------+----------------+
|  id  |     ts         |
+------+----------------+
|  1   | 20010101000000 |
|  2   | 20010113165713 |
+------+----------------+

轉(zhuǎn)意序列列表

符號(hào) 含義
\0 ASCII 0(NUL)字符
\r 回車
\b 退格
' 單引號(hào)
% 百分號(hào)
\n 換行
\t 定位符
反斜杠
" 雙引號(hào)
_ 下劃線

2 DDL操作


2.1庫(kù)操作 增刪改查

2.png

|序號(hào)|操作 |語(yǔ)法|備注|
|-|-|-|
|1|創(chuàng)建庫(kù)| create database dbname;|數(shù)據(jù)庫(kù)名字可用是數(shù)字,字母,下劃線和美元符號(hào)組成,不能用數(shù)字開(kāi)頭。建議都小寫。|
|2|查看庫(kù)所有庫(kù)| show databases;||
|3|選庫(kù)| use dbname;||
|4|刪除庫(kù)|drop databse dbname;| 謹(jǐn)慎操作!|
|5|查看當(dāng)前庫(kù) | mysql> SELECT database();||
|6|查看當(dāng)前狀態(tài) | mysql> status;||
|7|改root密碼| mysql> SET PASSWORD FOR 'root'@'localhost' = 'newpass';|-|


2.2表操作

3.png
2.2.1創(chuàng)建表

全面語(yǔ)法

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

create_definition:
    col_name column_definition
  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
      [index_option] ...
  | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
      [index_name] [index_type] (index_col_name,...)
      [index_option] ...
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY
      [index_name] (index_col_name,...) reference_definition
  | CHECK (expr)

column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      [COMMENT 'string']
      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
      [STORAGE {DISK|MEMORY|DEFAULT}]
      [reference_definition]
重要參數(shù) 說(shuō)明
type 字段類型 就是列類型,參見(jiàn)數(shù)據(jù)類型
not null 如果不寫,默認(rèn)插入null,如果聲明了not null,那就不允許空著,或者設(shè)置default
default 設(shè)定默認(rèn)值
auoto_increment 設(shè)定自動(dòng)編號(hào),每個(gè)表只能有一個(gè)自增列,并且必須被索引
primary key 設(shè)定主鍵,主鍵是不能重復(fù)的

實(shí)例

mysql> create table goods2 (
    -> goods_id int(10) not null auto_increment primary key,
  ->goods_num int(10) not null default 0);
Query OK, 0 rows affected (0.02 sec)

注意列名一律小寫,因?yàn)閚ull查詢不方便所以所有列都要聲明not null

2.2.2刪除表

drop table tbl_name;

2.2.3查看表

查看本數(shù)據(jù)庫(kù)的所有表
show tables;
查看某一個(gè)表的列
語(yǔ)法SHOW COLUMNS Syntax

SHOW [FULL] {COLUMNS | FIELDS} {FROM | IN} tbl_name [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

實(shí)例

show columns from shop.goods2;
show columns

或者用describe table語(yǔ)法


desc table
2.2.4 改表名

實(shí)例(rename)

rename table goods2 to shangpin;
shangpin

2.3 列操作 修改列ALTER TABLE Syntax(添加 刪除 修改列)

4.png

全面語(yǔ)法

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]

alter_specification:
    table_options
  | ADD [COLUMN] col_name column_definition
        [FIRST | AFTER col_name ]
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX|KEY} [index_name]
        [index_type] (index_col_name,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [index_type] (index_col_name,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name]
        [index_type] (index_col_name,...) [index_option] ...
  | ADD FULLTEXT [INDEX|KEY] [index_name]
        (index_col_name,...) [index_option] ...
  | ADD SPATIAL [INDEX|KEY] [index_name]
        (index_col_name,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        reference_definition
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name]
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP {INDEX|KEY} index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO|AS] new_tbl_name
  | ORDER BY col_name [, col_name] ...
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE
  | FORCE
  | ADD PARTITION (partition_definition)
  | DROP PARTITION partition_names
  | TRUNCATE PARTITION {partition_names | ALL}
  | COALESCE PARTITION number
  | REORGANIZE PARTITION [partition_names INTO (partition_definitions)]
  | ANALYZE PARTITION {partition_names | ALL}
  | CHECK PARTITION {partition_names | ALL}
  | OPTIMIZE PARTITION {partition_names | ALL}
  | REBUILD PARTITION {partition_names | ALL}
  | REPAIR PARTITION {partition_names | ALL}
  | PARTITION BY partitioning_expression
  | REMOVE PARTITIONING

實(shí)例(add)

 alter table goods2 add imag1 varchar(100) not null;

add

深入學(xué)習(xí) MySQL 5.5 Reference Manual/SQL Statement Syntax/Data Definition Statements/


3 DML操作(行操作)

5.png

3.1增加數(shù)據(jù)insert

Insert
語(yǔ)法

insert into  tbl_name
(col_name,…)  values (value1,…)  //指定列
insertinto *tbl_name
 (value1,…)                        //所有列
insert into  tbl_name
*(value1,…),(value1,…),**(value1,…)      //一次加入多行

注意:數(shù)字不用加單引號(hào),字符串必須加單引號(hào)

3.2 刪除delete

delete from  tbl_name (col_name,…)  where expr

3.3 更改 update

update tbl_name  set col_name = value where expr

3.3 查找數(shù)據(jù)select


select * from tbl_name   
select * from tbl_name  where expr
高級(jí)版
 SELECT selection_list // 選擇哪些列
 FROM table_list // 從何處選擇行
 WHERE primary_constraint // 行必須滿足什么條件
 GROUP BY grouping_columns // 怎樣對(duì)結(jié)果分組
 HAVING secondary_constraint // 行必須滿足的第二條件
 ORDER BY sorting_columns // 怎樣對(duì)結(jié)果排序
 LIMIT count // 結(jié)果限定

Tips: 所有使用的關(guān)鍵詞必須精確地以上面的順序給出。例如,一個(gè) HAVING 子句必須跟在 GROUP BY 子句之后和 ORDER BY 子句之前。
where→group by →having→order by→ limit

實(shí)例:

mysql> SELECT * FROM pet;                                 // 普通查詢
mysql> SELECT * FROM pet WHERE name = "Bowser";           // 查詢特定行
mysql> SELECT name, birth FROM pet where owner="Gwen";    // 查詢特定列
mysql> SELECT death-birth FROM pet WHERE name="Bowser";   // 表達(dá)式計(jì)算
mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f"; // 條件查詢
mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") // 多重條件
    -> OR (species = "dog" AND sex = "f");
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;   // 排序輸出
mysql>SELECT * FROM pet GROUP BY species;                 // 分組輸出
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;    // 分組統(tǒng)計(jì)

4 DCL操作

5 高級(jí)操作

導(dǎo)入導(dǎo)出

我的筆記目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容