mysql基礎(chǔ)知識

  1. 啟動 mysql
    $ mysql -uroot -p -P3306 -h127.0.0.1
    -u ,--user=name
    -P ,--port 端口號
    -p ,--password 密碼
    -h ,--host=name 連接地址
    -D ,--database=name 打開指定數(shù)據(jù)庫

2 .命令 退出
exit
quit
\q

  1. 修改mysql 提示符
    $ mysql -uroot -proot --prompt 提示符
    $ prompt \u@\h \d>
    關(guān)鍵字與函數(shù)名全部大寫
    數(shù)據(jù)庫名稱 表名稱 字段名稱 全部小寫
    SQL語句必須以分好結(jié)尾

4.操作數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫
$ CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name;
$ CREATE DATABASE IF NOT EXISTS t2;
查看數(shù)據(jù)庫
$ SHOW DATABASES
utf-8編碼
$ CHARACTER SET gbk\utf-8
修改數(shù)據(jù)庫
$ ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name
$ ALTER DATABASE db_name CHARACTER SET = UTF8;
刪除數(shù)據(jù)庫
$ DROP {DATABASE} [IF NOT EXISTS ] db_name
$ DROP DATABASE t2;

5.數(shù)據(jù)類型
數(shù)據(jù)類型是指列、存儲過程參數(shù)、表達(dá)式和局部變量的數(shù)據(jù)特征,它決定了數(shù)據(jù)的存儲格式,代表了不同的信息類型,
1.整型
TINYINT | SMALLINT | MEDIUMINT | INT | BIGINT

  1. 浮點型
    float | double
    3.日期

4.字符型
char | varchar | tinytext | text | mediumtext | longtext | enum | set
6.數(shù)據(jù)表
是數(shù)據(jù)庫最重要的組成部分之一
<<<------創(chuàng)建數(shù)據(jù)庫----->>>>
$ CREATE DATABASE test;
<<<------創(chuàng)建數(shù)據(jù)庫 end----->>>>
打開數(shù)據(jù)庫 $ USE db_name
<<<------打開數(shù)據(jù)庫---->>>>
$ USE test;
<<<------打開數(shù)據(jù)庫 end----->>>>
查看當(dāng)前數(shù)據(jù)庫 $ SELECT DATABASE();
<<<------查看當(dāng)前數(shù)據(jù)庫---->>>>
$ SELECT DATABASE();
<<<------查看當(dāng)前數(shù)據(jù)庫 end----->>>>
創(chuàng)建數(shù)據(jù)表 CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
....
);
<<<------創(chuàng)建數(shù)據(jù)表---->>>>
$ CREATE TABLE [IF NOT EXISTS] col(
username VARCHAR(20),
age TINTINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED,
address CHAR
);
<<<------創(chuàng)建數(shù)據(jù)表 end----->>>>
查看數(shù)據(jù)表是否存在 $ SHOW TABLES [tb_name] | [FROM db_name];
<<<------查看數(shù)據(jù)表---->>>>
$ SHOW TABLES col FROM test;
$ SHOW TABLES FROM test;
<<<------查看數(shù)據(jù)表 end----->>>>
查看表的結(jié)構(gòu) $ SHOW COLUMNS FROM tb_name;
<<<------查看數(shù)據(jù)表---->>>>
$ SHOW COLUMNS FROM col;
<<<------查看數(shù)據(jù)表 end----->>>>
插入記錄 $ INSERT [INTO] tb_name([col_name]) VALUES();
<<<------插入記錄--->>>>
$ INSERT col VALUES('zhengchong',25,21344.78);
$ INSERT col(username,age) VALUES('zhengchong',25);
<<<------插入記錄 end----->>>>
查看數(shù)據(jù)記錄 $ SELECT expr,.. FROM table_name;
<<<------查看數(shù)據(jù)記錄--->>>>
$ SELECT * FROM col;
<<<------查看數(shù)據(jù)記錄 end----->>>>
空與非空
NULL 字段可以為空;
NOT NULL 字段不能為空
<<<----- 創(chuàng)建空與非空數(shù)據(jù)表--->>>>
$ CREATE TABLE tb_test(
username VARCHAR(20) NOT NULL,
age TINYINT NULL UNSIGNED
);
<<<------ 創(chuàng)建空與非空數(shù)據(jù)表 end----->>>>
自動編號 且必須與主鍵組合使用 AUTO_INCREMENT
默認(rèn)情況下 起始值為1 每次增量為1
設(shè)置主鍵 PRIMARY KEY
主鍵約束 每張數(shù)據(jù)表只能存在一個主鍵 主鍵保證記錄的唯一性,主鍵自動為NOT NULL;
自編一定為主鍵,主鍵不一定自編;主鍵不允許倆個相同的值
<<<----- 創(chuàng)建空與非空數(shù)據(jù)表--->>>>
$ CREATE TABLE tb_test(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL,
age TINYINT NULL UNSIGNED
);
$ INSERT tb_test VALUES(1,'zhengchong',20);
<<<------查看數(shù)據(jù)記錄 end----->>>>
唯一約束 UNIQUE KEY
唯一約束可以保證記錄的唯一性
唯一約束的字段可以為空值
約束類型包括:
NOT NULL | PRIMARY KEY | UNIQUE KEY | DEFAULT | FOREIGN KEY
非空約束 | 主鍵約束 | 唯一約束 | 默認(rèn)約束 | 外鍵約束
每張數(shù)據(jù)表可以存在多個唯一值
MYSQ 默認(rèn)值
<<<----- 創(chuàng)建空與非空數(shù)據(jù)表--->>>>
$ CREATE TABLE tb_1(
id SMALLINT KEY UNSIGNED AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE KEY,
sex ENUM('1','2','3') DEFAULT
);
<<<----- 創(chuàng)建空與非空數(shù)據(jù)表 end--->>>>
數(shù)據(jù)庫---> 數(shù)據(jù)表
1, 查看數(shù)據(jù)庫 ----> SHOW DATABASES;
2 , 查看數(shù)據(jù)表創(chuàng)建命令 -----> SHOW CREATE TABLE db_name;
3 , 查看數(shù)據(jù)表結(jié)構(gòu) ------> SHOW COLUMNS FROM table_name;
4 , 查看數(shù)據(jù)表記錄 -------> SELECT * FROM table_name;
5 , 查看前數(shù)據(jù)庫 -----> SELECT DATABASE();
1, 查看數(shù)據(jù)表 ----> SHOW TABLES;

  1. 查看索引 -----> SHOW INDEXES FROM table_name;

FOREIGN KEY 外鍵約束
MYSQL 配置文件
default-storage-engine = INNODB
查看數(shù)據(jù)表存儲引擎類型 $ SHOW CREATE TABLE table_name;
外鍵約束的參照操作
CASCADE | SET NULL | RESTRICT | NO ACTION
<<<----- 創(chuàng)建主表--->>>>
$ CREATE TABLE provines(
id SMALLINT KEY UNSIGNED AUTO_INCREMENT,
pname VARCHAR(20) NOT NULL
);

<<<----- 創(chuàng)建主表 end--->>>>
<<<----- 創(chuàng)建子表--->>>>
$ CREATE TABLE users(
id SMALLINT KEY UNSIGNED AUTO_INCREMENT,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id)
);
// provines表中的id 與 users表中的 pid 相關(guān)聯(lián)
1.必須具有相同的數(shù)據(jù)類型,是否有符號位必須相同,
2,存儲引擎必須為 INNODB
3.都必須有索引
<<<----- 創(chuàng)建子表 end--->>>>
表級約束與列級義約束
對一個數(shù)據(jù)列建立的約束 稱為列級約束 (用的多)
對多個數(shù)據(jù)列建立的約束 稱為表級約束
列級約束既可以在列定義時聲明,也可以在列定義后聲明
表級約束只能在列定義后聲明。

7.修改數(shù)據(jù)表
添加列(字段)
ALTER TABLE table_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
<<<----- 添加列--->>>>
$ ALTER TABLE users ADD age TINYINT UNSIGNED NOT NULL; // 插入 age 字段 定義 TINYINT UNSIGNED NOT NULL
$ ALTER TABLE users ADD password VARCHAR(20) NOT NULL AFTER age; // 插入 password 字段 定義 VARCHAR(20) NOT NULL 插入到age的后面
<<<----- 添加列 end--->>>>
添加多列·用,隔開 不能添加位置關(guān)系
刪除列 ALTER TABLE table_name DROP col_name;

添加主鍵約束
ALTER TABLE table_name ADD PRIMARY KEY (col_name) // 添加col_name為主鍵;
添加唯一約束
ALTER TABLE table_name ADD UNIQUE (col_name) // 添加col_name為主鍵;
添加外鍵約束
ALTER TABLE table_name ADD FOREIGN KEY (col_name) REFERENCE 'tab_name' (col_name) // 添加col_name為外鍵約束;
添加修改默認(rèn)約束
ALTER TABLE table_name ALTER col_name SET DEFAULT value ; // 添加默認(rèn)值
ALTER TABLE table_name ALTER col_name DROP DEFAULT; // 刪除默認(rèn)值

刪除主鍵約束
ALTER TABLE table_name DROP PRIMARY KEY;
刪除唯一約束
ALTER TABLE table_name DROP {INDEX | KEY } index_name;

修改列(字段)定義(數(shù)據(jù)類型與數(shù)據(jù)位置)
ALTER TABLE table_name MODIFY col_name column_definition [FIRST | FTRER col_name];
修改列名稱(修改字段名稱)
ALTER TABLE table_name CHANGE old_col_name new_col_name column_definition [FIRST | FTRER col_name];
修改數(shù)據(jù)表名稱
ALTER TABLE old_table_name RENAME new_table_name;
| ALTER TABLE table_name TO new_table_name,[;

8.MYSQL 增刪改查
插入記錄
INSERT table_name [(col_name,,,)] {VALUES | VALUE} (expr |)
<<<----- 插入記錄--->>>>
$ INSERT user_3 VALUES(DEFAULT,'Tom',25,1),(DEFAULT,'Tom1',25,1);
// 可以同時插入多條語句
<<<----- 插入記錄 end--->>>>
INSERT table_name SET col_name = {expr | DEFAULT }; // 使用的較少
說明,與第一種的區(qū)別在于,此方法可以使用子查詢
INSERT table_name [(col_name,)] SELECT ...
此方法可以將查詢結(jié)果插入到制定數(shù)據(jù)表

更新記錄(單表更新)
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1 | DEFAULT } [,col_name2={expr2|DEFAULT}]...[WHERE where_condition]
// 如果不跟上where 的話表中的所有值都將更新
<<<----- 更新記錄--->>>>
$ UPDATE user_3 SET age= age+5;
// 給user_3表中的所有年齡值加5
$ UPDATE user_3 SET age= age+5 WHERE age>15;
// 給user_3 表 中的所有年齡大于15的加上5
$ UPDATE user_3 SET age= age+5 WHERE id%2=0;
// 給user_3 表中的所有偶數(shù)id的年齡值加5
<<<----- 更新記錄 end--->>>>
刪除操作(單表刪除)
DELETE FROM table_name [WHERE where_condition];
// 如果不跟上where 的話表中的所有值都將刪除

查找記錄
SELECT slect_expr [slect_expr,...]
[
FROM table_name
WHERE where_condition
GROUP BY {col_name|position}
HAVING where_condition
ORDER BY {col_name}
LIMIT {[offset,] row_count | row_count OFFSET offset}]
]
上述語句可以多條結(jié)合查詢
查詢表達(dá)式表示 想要的一列,必須有至少一個。多個列之間以英文逗號分隔開,
星號()表示所有,table_name. 可以表示命名表的所有列
查詢表達(dá)式可以使用[AS] alias_name 為其賦予別名。
別名可用于GROUP BY , ORDRE BY 或 HAVING 字句;
<<<----- 查詢記錄--->>>>
$ SELECT username ,id FROM user_3;
// 查詢 user_3表中的 username ,id 字段值 ;
// 后面還可以跟上 where 語句
$ SELECT username AS name ,id FROM user_3 ;
// username 字段將變成name 影響查詢結(jié)果集
<<<----- 查詢記錄end--->>>>
where 語句查詢
條件表達(dá)式: 對記錄進(jìn)行過濾,如果沒有指定where 子句,則顯示所有記錄。在where 表達(dá)式中,可以使用mysql支持的函數(shù)或運算符;
查詢結(jié)果分組
[GROUP BY {col_name | position } [ASC|DESC],...]
分組條件
[HAVING WHERE ]
對查詢結(jié)果進(jìn)行排序
[ORDER BY {col_name}]
<<<----- 查詢記錄并排序--->>>>
$ SELECT * FROM user_3 ORDER BY age;
// 默認(rèn)升序排列
$ SELECT * FROM user_3 ORDER BY age DESC;
// 降序排列
<<<----- 查詢記錄并排序end--->>>>
限制查詢結(jié)果返回的數(shù)量
[LIMIT {[offset,]}]
<<<----- 查詢記錄并排序--->>>>
$ SELECT * FROM user_3 LIMIT 2;
// 返回2條
$ SELECT * FROM user_3 LIMIT 2,3;
// 返回 第三條開始之后的3條
INSERT table_name1 (col_name1)SELECT col_name2 FROM table_name2 [WHERE where_conditin];
// 在表2中查詢到的col_name2字段值插入表1中的col_name1字段值
<<<----- 查詢記錄并排序end--->>>>

子查詢
子查詢指嵌套在查詢內(nèi)部,且必須始終出現(xiàn)在圓括號內(nèi)
子查詢可以包含多個關(guān)鍵字或條件,如DISTINCT\GROUP BY \ ORDER BY \ LIMIT 函數(shù)等
子查詢的外層查詢可以是:SELECT | INSERT | UPFATE |SET | DO
子查詢返回表量 一行 一列 或子查詢
使用比較運算符的子查詢 = > < = >
語法結(jié)構(gòu)
準(zhǔn)備數(shù)據(jù)表
[圖片上傳中。。。(1)]
<<<----- 子查詢--->>>>
$ SELECT AVG(price) FROM goods;
// 取出價格的平均值
$ SELECT id,name,price FROM goods WHERE price >(SELECT AVG(price) FROM goods);
// 取出價格大于平均值得id name price
INSERT table_name1 (col_name1)SELECT col_name2 FROM table_name2 [WHERE where_conditin];
// 在表2中查詢到的col_name2字段值插入表1中的col_name1字段值
<<<----- 子查詢end--->>>>
結(jié)果
[圖片上傳中。。。(2)]

[圖片上傳中。。。(3)]
用 ANY SOME ALL 修飾的比較運算符
[圖片上傳中。。。(4)]
使用 NOT IN 的子查詢
<<<----- 子查詢 更新--->>>>
$ INSERT tdb_good_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
// 將查詢到 tdb_goods 表中的 goods_cate 字段分組之后寫入tdb_good_cates 表中
<<<----- 子查詢 更新end--->>>>
多表更新
UPDATE table_references SET col_name1={expr1 | DEFAULT }
[,col_name2 = {expr2 | DEFAULT }]....
[WHERE where_condition]
<<<----- 子查詢 多表 更新--->>>>
$ UPDATE table_name1 INNER JOIN table_name2 ON col_name1= col_name2 SET col_name1= col_name2_id
將表1 與表2連接。然后表1 字段1與表2字段2相關(guān)聯(lián)
<<<----- 子查詢 多表 更新 end--->>>>
表2
[圖片上傳中。。。(5)]
表1
[圖片上傳中。。。(6)]
連接
在SELECT 語句 對表更新,多表刪除語句中支持JOIN 操作
連接條件
使用on關(guān)鍵字來設(shè)定連接條件,也可以使用where 來代替
通常使用on關(guān)鍵字來設(shè)定連接條件,使用where 關(guān)鍵字來進(jìn)行結(jié)果集記錄的過濾

字符函數(shù)
CONCAT()
CONCAT_WS()
FROMAT()
LOWER()
UPPER()
LEFT()
RIGHT()
LENGTH()
LTRIM() // 刪除前導(dǎo)空格
RTRIM() // 刪除后導(dǎo)空格
TRIM() //
SUBSTRING()
[NOT] LIKE
REPLACE()
數(shù)值運算符
CEIL() // 進(jìn)一取整
DIV // 整數(shù)除法
FLOOR() // 舍一取整
MOD // 取余數(shù)
POWER() // 冪運算
ROUND() // 四舍五入
TRUNCATE() // 數(shù)字截取
比較運算符
[NOT] BETWEEN ... AND ..
[NOT] IN()
IS [NOT] NULL;

日期時間函數(shù)
NOW() // 當(dāng)前時間和日期
CURDATE() // 當(dāng)前日期
CURTIME() // 當(dāng)前時間
DATE_ADD() // 日期變化
DATEDIFF() // 日期差值
DATE_FORMAT() // 日期格式化

信息函數(shù)
CONNECTION_ID(); // 連接ID
DATABASE(); // 當(dāng)前數(shù)據(jù)庫
LAST_INSERT_ID( ) //最后插入記錄
USER() // 當(dāng)前用戶
VERSION() // 版本信息

聚合函數(shù)
AVG();
COUNT()
MAX()
MIN()
SUM()

加密函數(shù)
MD5()
PASSWORD()

自定義函數(shù)
1.參數(shù)
2.返回值
CREATE FUNCTION function_name RETURNS { STRING | INTEGER | REAL | DECIMAL} routine_body
函數(shù)體由合法的SQL語句構(gòu)成
函數(shù)體可以是簡單的SELECT 或 INSERT 語句
函數(shù)體如果為復(fù)合結(jié)構(gòu)則使用BEGIN ...END 語句
復(fù)合結(jié)構(gòu)可以包含聲明,循環(huán),控制結(jié)構(gòu);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 系統(tǒng)用戶: 1.sys system(sys權(quán)限最高) 2.sysman(操作企業(yè)管理器) 密碼是安裝的時候輸入的...
    3hours閱讀 1,611評論 0 0
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 1,863評論 0 10
  • 第1章 初涉MySQL 1.1 MySQL文件 (1)MySQL目錄結(jié)構(gòu) (2)MySQL配置向?qū)募ò惭b后配置...
    凜0_0閱讀 832評論 1 0
  • 有句話說得好,開悟前瞎折騰,開悟后做事情。開悟并不是件易事,要看機(jī)緣。撇開開悟與否不談,但是我確實用了300天的時...
    妮妮唱蒙學(xué)閱讀 295評論 2 6
  • 我以為我們會一直在一起,哪知一回頭,才發(fā)現(xiàn)你已經(jīng)離我無比遙遠(yuǎn)。 一 林南穿著藍(lán)色的校服,背著藍(lán)色的的書包,捏了袋牛...
    壹貳叁啊閱讀 959評論 13 25