Mysql基礎操做及增刪改查mysql
mysql -e "show databases \G" 顯示到shell上sql
如:help create
若是須要進一步獲取幫助,能夠繼續使用help命令
如:help create databaseshell
系統數據庫
information_schema: 虛擬庫,存放在內存中,主要存儲了系統中的一些數據庫對象信息,如用戶表信息,列信息,權限信息,字符信息等.
performance_schema: 主要存儲數據庫服務器的性能參數
mysql: 受權庫,主要存儲系統用戶的權限信息
test: 公共庫,任何人都能訪問,Mysql數據庫自動建立的測試數據庫
sys: 系統的元數據信息,方便DBA發現數據庫的不少信息,爲解決性能瓶頸體用了巨大幫助數據庫
create database 數據庫名 character set = 'utf8' collate=utf8_general_ci; 數據庫命名規則: 1>能夠由字母,數字,下劃線,@,#,$ 2>區分大小寫 3>惟一性 4>不能使用關鍵字如create select 5>不能單獨使用數字 6>最長128位
# 數據表裏存放什麼樣的數據就選取相應的字符集: 簡體中文的字符集是gb2312和gbk: utf8是國際通用字符集 show character set; # 查看Mysql支持的字符集 show collation; # 查看字符集的排序規則,utfs-generic支持大多數的排序規則 create database db character set = 'utf8mb4' collate=utf8_general_ci; # 建立數據庫設置字符編碼和字符集的排序規則 show create database db\G; # 查看db數據庫字符編碼 alter database db character set = latin1 # 修改數據庫的字符編碼 use 庫名; # 切換數據庫 show databases; # 查看全部的庫 drop database # 刪除數據庫
Mysql常見的數據類型安全
在Mysql數據庫管理系統中,能夠經過存儲引擎來決定表的類型,同時,Mysql數據庫管理系統也提供了數據類型決定表存儲數據的類型,數值類型越大對於內存的消耗越多,合適的數據類型在必定程度上能增長數據庫的效率.服務器
Mysql數據庫管理系統提供的數據類型框架
數據類型的經常使用場景函數
語法:性能
create table 表名( 字段名1 類型[(寬度)約束條件] 字段名2 類型[(寬度)約束條件] ... )[存儲引擎 字符集]; # 說明: 在同一張表中,字段名和類型是必須有的,且字段名是不能相同; # 中括號裏面的寬度和約束條件可選,整數類型不須要指定寬度,其餘的浮點型和定點型等須要指定寬度,也就是約束條件。
表school.student1 字段 字段 字段 字段 id name sex age 1 tom male 23 記錄 2 jack male 21 記錄 3 alice female 19 記錄 # 建立庫 mysql> create database school; # 建立表 create table school.student1 (id int,name varchar(50),sex enum('male','female'),age int);
Example
create table student(stu_id INT NOT NULL AUTO_INCREMENT, name CHAR(32) NOT NULL, age INT NOT NULL, register_date DATE, PRIMARY KEY(stu_id) );測試
# 注意: 先看錶的結構再去插值,插值的時候數字不須要用引號,字符串必需要用雙引號或者是單引號引發來; # 語法: insert into 表名(字段1,字段2...) values(字段值列表...) # 順序插入多個記錄,不用指定字段名,此處指的順序並不是是id數字,而是插入的值和前面的字段是對應的; mysql> insert into student1 values (1,'tom','male',23), (2,'jack','male',21), (3,'alice','female',19); # 修改表 # 修改表名 mysql> alter table student1 rename student2; 1.插入完整數據(順序插入) 語法一: insert into 表名(字段1,字段2,字段3..字段n) values(值1,值2,值3); 語法二: insert into 表名 values (值1,值2,值3..值n); 2.指定字段插入數據 語法一: insert into 表名(字段1,字段2) values (值1,值2); 3.插入多條記錄使用逗號隔開 語法一: insert into 表名 values(值1,值2,值3),(值1,值2,值3..值n),(值1,值2,值3 ); 4.插入查詢結果 語法一: insert into 表1(字段1,字段2,字段3...字段n) select (字段1,字段2,字段3) FROM 表2 WHERE ...;
Example
insert into student(name,age,register_date)values("youmen",21,"2020-02-12");
mysql> show table; # 查看庫中已有的表 # 查看錶結構 mysql> desc student1; mysql> show create table student1; # 查詢表中指定字段的值 mysql> select id,name,sex from student1\G; mysql> select * from student1; # 查詢表中全部字段的值,由於尚未插入字段,因此查詢到數據都是空的 # 聚合查詢 # 查詢一個表中有多少條記錄,可使用SQL內置的count()函數查詢~~~~ select count(*) from students;
# 語法: update 表名 SET 字段1=值1,字段2=值2... WHERE CONDITION; # 表的修飾符 # not null 標識該字段不能爲空 # default 爲該字段設置默認值 mysql> update student2 set name='flying' where id=2; # 匹配id=2的哪一行,並將name字段換成flying; mysql> update student2 set name='flying' where d=3 and sex='female'; # 此處and也能夠是or # 添加字段 mysql> alter table student2 add id int(3) not null default 22, add gender enum('M','WW');
mysql> drop table 表名,表名; mysql> drop table IF EXISTS student2; # 這個表存在就刪除,不存在也不會報錯,能夠刪除腳本使用 # 刪除字段/表 delete FROM 表名 [where condtion]; mysql> alter table student2 drop id; mysql> delete from student2; mysql> delete from mysql.user where authentication_string=''; # 出於安全考慮將表中沒有密碼的刪掉 mysql> delete from student2 where id=2 and name='flying'; # 匹配到id=2而且name=flying的刪掉此類數據
一、單列查詢去重:select distinct 字段名 from 表名; (distinct爲去重) 二、查詢同時運算:select 字段名(數據類型爲數字)*14 from 表名; 三、 改變表頭輸出:select 字段名(數據類型爲數字)*14 as(能夠省略) 新表頭 from 表名; eg: mysql> select name from student; +-------+ | name | +-------+ | zhou | | alice | +-------+ mysql> select CONCAT("name:",name)as message from student; +------------+ | message | +------------+ | name:zhou | | name:alice | +------------+
如下爲操做符列表,可用於WHERE子句中。
下表中實例假定A爲10,B爲20
操做符 | 描述 | 實例 |
---|---|---|
= | 等號,檢測兩個值是否相等,若是相等返回true | (A = B) 返回false。 |
<>, != | 不等於,檢測兩個值是否相等,若是不相等返回true | (A != B) 返回 true。 |
> | 大於號,檢測左邊的值是否大於右邊的值, 若是左邊的值大於右邊的值返回true | (A > B) 返回false。 |
< | 小於號,檢測左邊的值是否小於右邊的值, 若是左邊的值小於右邊的值返回true | (A < B) 返回 true。 |
>= | 大於等於號,檢測左邊的值是否大於或等於右邊的值, 若是左邊的值大於或等於右邊的值返回true | (A >= B) 返回false。 |
<= | 小於等於號,檢測左邊的值是否小於於或等於右邊的值, 若是左邊的值小於或等於右邊的值返回true | (A <= B) 返回 true。 |
一、單條件查詢:where select 字段 from 表名 where 條件判斷; select 字段 from 表名 where 條件判斷 and 條件判斷; select 字段 from 表名 where 條件判斷(between A and B); --> 範圍 eg: select name from haha where id between 0 and 2; +------+ | name | +------+ | ljt | +------+ 1 row in set (0.00 sec) SELECT name, salary FROM employee5 WHERE salary NOT IN (4000,5000,6000,9000) ; SELECT name,job_description from employee5 where job_description is null;(字段爲空) SELECT * FROM employee5 WHERE name LIKE 'al%'; %表明多個字符 SELECT * FROM employee5 WHERE name LIKE 'al___'; --> "_"下劃線表明一個字符 正則:' = ' 精確匹配;'like' 模糊查詢; ' regexp '正則查詢 select * from student where register_date > '2020-02-13'; # 使用主鍵來做爲WHERE子句的條件查詢是很是快速的.
二、排序:order by 字段(通常此字段都是數字,排個成績啥的)
單列:默認升序,在末尾加DESC則變爲降序;
eg:
mysql> select id from haha order by id ;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
4 rows in set (0.00 sec)
mysql> select id from haha order by id DESC; +----+ | id | +----+ | 4 | | 3 | | 2 | | 1 | +----+ 4 rows in set (0.00 sec) 多列:先按第一條件,在第一條件框架中再按第二條件 eg: mysql> select id from haha order by money,id;
先用order排序,再使用limit 3,5; eg: SELECT * FROM employee5 ORDER BY salary DESC LIMIT 3,5;
SELECT 字段1 FROM employee5 GROUP BY 字段2;---按字段2分組,字段2中值相同的記錄被分爲一組。 group_concat函數能夠將分完組以後的,某一組的某個字段以列表方式打印出來。 eg: SELECT dep_id,group_concat(name) FROM employee5 GROUP BY dep_id; 過程解析:一、分組:先以dep_id字段爲分組標準進行分組,dep_id字段相同的行被分爲一組, 二、打印:使用group_concat函數調用name字段,將每一個組中全部行的"name"字段作成一個列表,將此列表看做爲一個值,進行打印;
多表查詢
交叉連:笛卡爾積
eg:select a,b from info,departtment;
只有當info表,departtment表都包含
內外鏈接區別:內鏈接只能顯示出兩表中符合條件的字段
外鏈接能夠顯示主表的所有字段,未能匹配到副表的顯示null
內鏈接:SELECT 字段列表 FROM 表1 ,表2 WHERE 表1.字段 = 表2.字段; eg:select info.name,info.age,info.dep_num,department.dep_num from info,department where info.dep__num = department.dep_num;
外鏈接: 左鏈接:select info.name,info.age,info.dep_num,department.dep_name from info left join department on info.dep_num = department.dep_num; ~~~~~~ ~~~~ , where 右鏈接: