Mysql基本操作

數據庫

簡介
  • 數據庫(DataBase,DB):指長期保存在計算機的儲存設備上,按照一定規則組織起來,可以被各種用戶或應用共享的數據集合。簡單理解數據的倉庫。
  • 數據庫管理系統(DataBase Management System,DBMS):指一種操作和管理數據庫的大型軟件,用於建立、使用和維護數據庫,對數據庫進行統一的管理,以保證數據庫的安全性和完整性。用戶通過數據庫管理系統訪問數據庫中的數據。
  • 數據庫是通過數據庫管理系統創建和操作的。
常見的數據庫管理系統
  • Oracle:Oracle數據庫被認爲是業界目前比較成功的關係型數據庫管理系統。
  • Mysql:Mysql是一個關係型數據庫管理系統,由瑞典Mysql AB公司開發,目前屬於Oracle旗下產品。Mysql是最流行的關係型數據庫管理系統之一,在WEB應用方面,Mysql是最好的RDBMS(Relational DataBase Management System,關係數據庫管理系統)應用軟件。
  • DB2:DB2是IBM公司的產品,DB2數據庫系統採用多線程多線索體系結構,其功能足以滿足大中公司的需求,並可靈活的服務於中小型電子商務解決方案。
  • Microsoft SQL Server:SQL Server 是Microsoft公司推出的關係型數據庫管理系統。具有使用方便可伸縮性好與相關軟件集成程度高等優點。
  • SQLList:應用在手機端的數據庫
  • 非關係型數據庫:NoSQL、Redis、MongoDB等
SQL語言
  • 這裏就不介紹,mysql的安裝與卸載了,建議安裝mysql5.7版本
  • SQL:Structure Query Language(結構化查詢語言),SQL被美國國家標準局(ANSI)確定爲關係型數據庫語言的美國標準,後來被國際化標準組織(ISO)採納爲關係數據庫語言的國際標準。
  • SQL是一種標準化的語言,它允許你在數據庫上執行操作,如創建數據庫、表等等,查詢內容,更新內容,並刪除條目等操作
  • Create,Read,Update,Delete通常稱爲CRUD操作。
SQL語句分類
  • DDL(Data Definition Language):數據定義語言,用來定義數據庫對象:庫、表、列等。
  • DML(Data Manipulation Language):數據操作語言,用來定義數據庫記錄(數據)
  • DCL(Data Control Language):數據控制語言,用來定義訪問權限和安全級別。
  • DQL(Data Query Language):數據查詢語言,用來查詢記錄(數據)。
DDL操作數據庫
  • show databases :顯示當前數據庫
  • information_schema:
information_schema數據庫是mysql自帶的,它提供了訪問數據庫元數據的方式。
元數據:是關於數據的數據,如數據庫或表名,列的數據類型,或訪問權限等
  • mysql:
 這個是mysql的核心數據庫,主要負責存儲數據庫的用戶、權限設置、關鍵字等mysql自己需要使用的控制和管理信息,不可以刪除。
  • performance_schema:
性能優化的數據庫
  • test:
5.5版本
這個是安裝時候創建的一個測試數據庫,和它的名字一樣,是一個安全的空數據庫,沒有任何表,可以刪除
  • sys
5.7版本
sys系統數據庫,通過這個可以快速的瞭解系統的元數據信息
這個庫確實可以方便DBA發現數據庫的很多信息,解決性能瓶頸都提供了巨大幫助
  • 創建數據庫:CREATE DATABASE 語句用於創建新的數據庫:
語法:CREATE DATABASE[IF NOT EXISTS] db_name
sql>CREATE DATABASE mydb1;
sql>CREATE DATABASE IF NOT EXISTS csdn character SET GBK;
sql>CREATE DATABASE mydb3 character SET GBK COLLATE gbk_chinese_ci;
  • 查看當前數據庫服務器中的所有數據庫
sql>SHOW DATABASES;
  • 查看前面創建的csdn數據庫的定義信息
sql>SHOW CREATE DATABASE csdn;
  • 查看服務器中的數據庫,並把csdn的字符集修改爲utf8;
sql>ALTER DATABASE csdn character SET utf8;
  • 刪除
語法:DROP DATABASE[IF EXISTS] csdn;
sql>DROP DATABASE IF EXISTS csdn;
  • 查看當前使用的數據庫
sql>select database();
#沒有選擇數據庫爲null
  • 切換數據庫
sql>use csdn;
  • 退出mysql
quit;或exit;
DDL操作表
  • CREATE TABLE 語句用於創建新表。
student | CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
# 注意:數據庫名、表名、字段名可以使用反勾號'括住,也可以不括。如果SQL關鍵字一般要括住。
  • 常見數據類型:
int:整型(4個字節)
double:浮點型(8個字節),近似值,例如double(5,2)表示最多5位,其中有2位小數,取值範圍爲-999.99到999.99
decimal:精確數值數據,最大位數可以是65位,例如decimal(5,2)能夠存儲具有五位數和兩個小數的任何值,因此可以存儲範圍爲-999.99至999.99
char:固定長度字符串類型;char(10)‘aaa’固定10個字符,不足補空格,長度0-255 。缺點:浪費空間,優點:查詢速度快
varchar:可變長度字符串類型;varchar(10)‘aaa’最多存儲10個字符,缺點:查詢速度慢,優點:節省空間
text:大文本字符串類型,有字符編碼,存儲比較大的文本數據
blob:Binary large Object二進制大對象數據;可以存儲圖片、音頻、視頻
date:日期類型,格式:yyyy-MM-dd
time:時間類型,格式:hh:mm:ss
timestamp:時間戳類型yyyy-MM-dd hh:mm:ss會自動賦值
datetime:日期時間類型yyyy-MM-dd hh:mm:ss
  • 常用約束
主鍵約束:primary key(保證數據唯一性),不能重複,不能爲null
唯一約束:unique[key],不能重複,可以爲null
非空約束:not null
默認約束:default
外鍵約束:foreign key
自動增長:auto——increment
  • 刪除現有表:DROP TABLE[IF EXISTS] student
sql>DROP TABLE table_name;
  • 查看當前數據庫的所有表
SHOW TABLES;
  • 查看錶的字段信息
DESC student;
  • 在上面學生表的基礎上增加一個image列
ALTER TABLE student add image blob;
  • 修改address列,使其長度爲60
ALTER TABLE student MODIFY address varchar(60);
  • 刪除image列,一次只能刪除一列
ALTER TABLE student DROP image;
  • 表名改爲user
RENAME TABLE student TO user;
  • 查看錶的創建細節
SHOW CREATE TABLE user;
  • 修改表的字符集爲gbk
ALTER TABLE CHARACTER SET gbk;
  • 列名name修改爲username
ALTER TABLE user CHANGE name uaername varchar(100);
DML操作
  • DML是對錶中的數據進行增、刪、改的操作。 不要與DDL混淆了
  • 主要包括:INSERT、UPDATE、DELENTE
插入操作:INSERT:
  • 語法INSERT INTO 表名(列名1,列名2…) values(列值1、列值2…)
  • 主意:列名與列值的類型、個數、順序要一一對應。
 #一次一列
 insert into user(id,username,age,address) values(1,'waking',22,'安徽');
 #一次多列
insert into user(id,username,age,address) values(2,'w',22,'北京');
insert into user(id,username,age,address) values(3,'wa',22,'安徽'); 
insert into user(id,username,age,address) values(4,'wak',22,'杭州');
#一次多列
insert into user(id,username,age,address) 
values(2,'w',22,'北京'),(3,'wa',22,'安徽'),(4,'wak',22,'杭州');
修改操作:UPDATE
  • 語法:UPDATE 表名 SET 列名1=列值1,列名2=列值2…WHERE 列名=值
  • 練習:
#將所有學生的年齡修改爲25.
update user set age = 25;
#將id爲1的地址修改爲‘杭州’
update user set address = '杭州' where id=1;
#將姓名爲‘w’的學生年齡改爲23,地址改爲‘河南’
update user set age=23,address='河南' where username = 'w';
#將所有學生的年齡加5歲
update user set age=age+5;
刪除操作:DELECT
  • 語法:DELECT FROM 表名 【WHERE 列名=值】
  • 練習
#刪除表中姓名爲‘w’的記錄
delete from user where username='w';
#刪除表中所有記錄
DELETE FROM user;
#使用truncate刪除表中記錄。(先把表刪除,然後再創建空表)
truncate table user;
#DELETE 刪除表中的數據,表結構還在,刪除後的數據使用日誌可以找回
#TRUNCATE刪除是把表直接DROP掉,然後再創建一個同樣的新表
#TRUNCATE刪除的數據不能找回。執行速度比DELETE快
講到這裏介紹客戶端工具
  • 爲了更方便用戶操作和使用mysql數據庫引入客戶端工具
  • SQLyog的使用
  • Navicat的使用
DQL數據查詢
  • 數據庫執行DQL語句不會對數據進行改變,而是讓數據庫發送結果集給客戶端
  • 查詢返回的結果集是一張虛擬表
查詢關鍵字:SELECT
  • 語法:SELECT 列名 FROM 表名【WHERE–>GROUP BY—>HAVING–>ORDER BY–>LIMIT】
簡單查詢
#創建表stu 
CREATE TABLE stu (
 sid CHAR(6), 
 sname VARCHAR(50), 
 age INT, 
 gender VARCHAR(50) 
 );
 #添加數據 
 INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
 INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female'); 
 INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male'); 
 INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female'); 
 INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male'); 
 INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female'); 
 INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male'); 
 INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female'); 
 INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male'); 
 INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female'); 
 INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
 #創建僱員表 
CREATE TABLE emp( 
empno INT, 
ename VARCHAR(50), 
job VARCHAR(50), 
mgr INT, 
hiredate DATE, 
sal DECIMAL(7,2), 
comm DECIMAL(7,2), 
deptno INT );
#添加數據 
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20); 
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30); 
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30); 
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20); 
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30); 
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30); 
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10); 
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20); 
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10); 
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30); 
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20); 
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30); 
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20); 
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
#創建部門表 
 CREATE TABLE dept( 
 deptno INT, 
 dname VARCHAR(14), 
 loc VARCHAR(13) 
 );
 #添加數據 
 INSERT INTO dept VALUES(10, '財務部', 'beijing'); 
 INSERT INTO dept VALUES(20, 'java開發部', 'tianjin'); 
 INSERT INTO dept VALUES(30, '測試部', 'shanghai'); 
 INSERT INTO dept VALUES(40, '銷售部', 'shenzheng');
#查詢所有列*表示所有列
SELECT * FROM user;
#查詢指定列
SELECT id username FROM user;
條件查詢
  • 條件查詢就是在查詢是給出WHERE子句,在WHERE子句中可以使用如下運算符及關鍵字:
  • 比較運算符
=、!=、<>、<、<=、>、>=;
BETWEEN...AND
IN(set);
IS NULL;
  • 關鍵運算符
AND
OR
NOT
  • 算術運算符
+ - * / %
  • 查詢性別爲女,並且年齡小於50的記錄
 SELECT * FROM stu WHERE gender='female' AND age<50;
  • 查詢學號爲S_1001,或者姓名爲liSi的記錄
 SELECT * FROM stu WHERE sid='S_1001' OR sname='liSi';
  • 查詢學號爲S_1001,S_1002,S_1003的記錄
 SELECT *FROM stu WHERE sid IN('S_1001','S_1002','S_1003');
#等同於
SELECT * FROM stu WHERE sid='S_1001' OR sid ='S_1002' OR sid='S_1003';
  • 查詢學生不是S_1001,S_1002,S_1003的記錄
SELECT * FROM stu WHERE sid NOT IN('S_1001','S_1002','S_1003');
  • 查詢年齡爲null的記錄
 SELECT * FROM stu WHERE age IS NULL;
  • 查詢年齡在20到40之間的學生記錄
 SELECT * FROM stu WHERE age>20 AND age<40;
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;
  • 查詢性別非男的學生記錄
 SELECT * FROM stu WHERE gender!='male';
SELECT * FROM stu WHERE gender<>'male';
SELECT * FROM stu WHERE NOT gender='male';
  • 查詢姓名不爲null的學生記錄
 SELECT * FROM stu WHERE sname IS NOT NULL;
SELECT * FROM stu WHERE NOT sname IS NULL;
模糊查詢
  • 當想查詢姓名中包含a字母的學生時就需要模糊查詢了。模糊查詢需要使用關鍵字LIKE
通配符:
_:任意一個字符
%:任意0~n個字符
  • 查詢姓名由5個字符構成,並且第5個字符爲‘i’的學生記錄
SELECT * FROM stu WHERE sname LIKE '____i';
  • 查詢姓名以‘z’開頭的學生記錄
SELECT * FROM stu WHERE sname LIKE 'z%';
#其中'%'匹配0~n個字符
  • 查詢姓名中第2個字符爲‘i’的學生記錄
 SELECT * FROM stu WHERE sname LIKE '_i%';
  • 查詢姓名中包含‘a’字符的學生記錄
 SELECT * FROM stu WHERE sname LIKE '%a%';
字段控制查詢
  • 去除重複記錄DISTINCT
 SELECT DISTINCT sal FROM emp;
SELECT DISTINCT sal,comm FROM emp;
  • 查看僱員的月薪與佣金之和
#注意:因爲sal和comm兩列的類型都是數值類型,所以可以加運算
 SELECT *,sal+comm FROM emp;
 #comm列有很多記錄的值爲null,因爲任何東西與null相加結果還是null
  SELECT *,sal+IFNULL(comm,0) FROM emp;
  • 給列名添加別名
#as
SELECT *,sal+IFNULL(comm,0) AS total FROM emp;
#as可省略
SELECT *,sal+IFNULL(comm,0)  total FROM emp;
排序
  • 查詢所有學生記錄,按年齡升序排序
 SELECT * FROM stu ORDER BY age;
  • 按降序排序
 SELECT * FROM stu ORDER BY age DESC;
聚合函數
* COUNT():統計指定列不爲NULL的記錄行數
* MAX():計算指定列的最大值
* MIN():計算指定列的最小值
* SUM():計算指定列的數值和
* AVG():計算指定列的平均值
  • COUNT
#查詢emp表中記錄數
 SELECT COUNT(*) FROM emp;
 #查詢月薪與佣金之和大於2500元的人數
 SELECT COUNT(*) FROM emp WHERE sal+IFNULL(comm,0)>2500;
  • SUM和AVG
#查詢所有僱員月薪和
 SELECT SUM(sal) FROM emp;
 #查詢所有僱員月薪+佣金和
  SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
  #統計所有員工平均工資
   SELECT AVG(sal) FROM emp;
  • MAX和MIN
 #查詢最高工資和最低工資
  SELECT MAX(sal),MIN(sal) FROM emp;
分組查詢
  • 查詢每個部門的部門編號和每個部分的工資和:
 SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
  • 查詢每個部門的部門編號以及每個部門的人數
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
HAVING子句
  • 查詢工資總和大於9000的部門編號以及工資和
 SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;
  • 注意:having和where的區別
    • having是在分組後對數據進行過濾,where是分組前對數據進行過濾
    • having後面可以使用聚合函數,where後面不可以使用分組函數
LIMIT限制
  • LIMIT用來限定查詢結果的起始行,以及總行數
   #查詢前五行記錄
    SELECT * FROM emp LIMIT 0,5;
    #查詢10行記錄,起始行從3行開始
    SELECT * FROM emp LIMIT 3,10;
  • 如果一頁記錄爲5,希望查看第3頁的記錄
 SELECT * FROM emp LIMIT 10,5;
 # 以0開始,(頁數-1)*記錄數,就是起始行
這裏簡單介紹sql的基本操作,mysql的約束和多表查詢下一章博客介紹,感謝您的觀看
發佈了19 篇原創文章 · 獲贊 19 · 訪問量 5632
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章