Mysql數據庫(一)

什麼是關係型數據庫?

  1. 關係數據庫:是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。簡單說來就是關係型數據庫用了選擇、投影、連接、並、交、差、除、增刪查改等
    數學方法來實現對數據的存儲和查詢。可以用SQL語句方便的在一個表及其多個表之間做非常複雜的數據查詢。安全性高。
  2. 非關係型數據庫:簡稱NOSQL,是基於鍵值對的對應關係,並且不需要經過SQL層的解析,所以性能非常高。但是不適合用在多表聯合查詢和一些較複雜的查詢中。NoSQL用於超大規模數據的存儲。

目錄

Chapter 1 Chapter 2 Chapter 3 Chapter 4
啓動MySQL MySQL基本操作 MySQL面試常問知識點 other

內容

啓動MySQL

MySQL是一種關聯數據庫管理系統 由於其體積小、速度快、總體擁有成本低、MySQL軟件採用了雙授權政策,分爲社區版和企業版。

  • 以下內容都是基於centos6系統的,和其它系統可能存在不同

    • 安裝MySQL:

        	- yum install mysql-server  //安裝MySQL服務器
        	
        	- yum install mysql-client  //安裝MySQL客戶端,通過這個才能訪問數據庫
      
    • 使用MySQL:

        	- /etc/init.d/mysqld start  //啓動MySQL服務
        	
        	- mysql -uroot  //以root用戶登錄
      
    • 修改密碼:

        	- mysql> set password=password("123456");
      
    • 查看數據庫:

        	- mysql> show databases;
      
    • 退出:

        	- mysql> quit
        	- mysql> exit
      

MySQL基本操作

  • DDL、DML

  • CURD
    增(create)、刪(delete)、改(update)、查(Retrieve)操作。

    1.管理數據庫語句:

    • 使用數據庫:

        			use test;
      
    • 添加數據庫:

        			create database 數據庫名;
      
        			create database test;
      
    • 修改數據庫:

        			alter database 數據庫名;
      
        			alter database test;
      
    • 刪除數據庫:

        			drop database 數據庫名;
      
        			drop database test;
      
    • 查看所有數據庫:

        			show databases;
      

    2.管理表語句:

    • 添加數據表:

        			create table 表名(
      
        			  列名 數據類型 數據約束,
      
        			  列名 數據類型 數據約束
      
        			);
        			create table student(
      
        			  name varchar(20) not null,
      
        			  age int(4)
      
        			)
      
    • 修改數據表:

        			alter table 表名;
      
        					1)在表中增加新字段
      
        					alter table student add colunm name varchar(20);
      
        					2)刪除表中的字段
      
        					alter table student drop name;
      
        					3)修改表中字段的類型
      
        					alter table student modify name varchar(10);
      
    • 刪除數據表:

        			drop table 表名;
      
        			drop table student;
      
    • 查看所有表:

        			show tables;
      

    ** DML **
    3.管理數據語句:

    • 插入數據:

        			insert into 表名 (列1,列2...)  values (值1,值2...);
      
        			insert into student (name,age) values ('張三',20);
      
    • 更新數據:

        			update 表名 set 列=修改值 where 條件;
      
        			update student set  name='李四' where name='張三';
      
    • 刪除數據:

        			delete from 表名 where 條件;
      
        			delete from student where name='李四';
      
    • 查詢數據:

        			selete * from 表名 where 條件;
      
        			selete * from student where name='張三';
      

    4.各種查詢語句:

    • 查詢時指定別名:

        			1) selete id AS '編號',name AS '姓名' from student;
      
        			2) selete id '編號',name '姓名' from student;(AS可以省略)
      
    • 查詢時合併列:

        			需求:查詢每個學生的總分
      
        			selete name AS '姓名',(servlet+mysql) AS '總成績' from student;
      
        			注意:合併列的字段必須是數值類型的字段
      
    • 查詢時去除重複(distinct):

        			需求:查詢有哪些地區的學生
      
        			selete DISTINCT address from student;
      
        			另一種語法
      
        			selete DISTINCT(address) from student;
      
    • 條件查詢:

      • 邏輯條件: and or

          				需求:查詢學生的id爲1,且姓名爲張三的學生
        
          				selete * from student where id=1 and name='張三';(交集)
        
          				需求:查詢學生的id爲2,或姓名爲張三的學生
        
          				selete * from student where id=2 or name='張三';(並集)
        
      • 比較條件: > < >= <= = <> (between and–在…之間 包前包後)

          				需求:查詢servlet分數大於80分的學生
        
          				selete * from student where servlet>80;
        
          				需求:查詢mysql分數小於或等於85分的學生
        
          				selete * from student where mysql<=85;
        
          				需求:查詢servlet分數大於或等於80分,且小於或等於85分的學生
        
          				selete * from student where servlet>=80 AND servlet<=85;
        
          				代替上面語句的語法
        
          				selete * from student where servlet BETWEEN 80 AND 85;
        
          				需求:查詢年齡不等於30的學生
        
          				selete * from student where age<>30;
        
      • 判空條件: is null, is not null, =’’, <>’’

          				**Null:表示沒有數據**
        
          				**空字符:表示有數據**
        
          				需求:查詢沒有性別數據的學生(數據‘男’或‘女’)
        
          				selete* from student where gender IS NULL OR gender='';
        
          				需求:查詢有性別數據的學生
        
          				selete * from student where gender IS NOT NULL AND gender<>'';
        
      • 模糊條件: like

          				模糊替代符號:
        
          				**%:替代任意個字符**
        
          				**_:替代一個字符**
        
          				需求:查詢姓“李”的學生
        
          				SELECT * FROM student WHERE NAME LIKE '李%';
        
          				需求:查詢姓名中包含‘四’字的學生
        
          				SELECT * FROM student WHERE NAME LIKE '%四%';
        
          				需求:查詢姓‘李’,全名只有兩個字的學生
        
          				SELECT * FROM student WHERE NAME LIKE '李_';
        
      • 聚合函數查詢(用於統計結果)

          		Max()取最大值  min()取最小值  avg()取平均值  count()統計標的記錄數量 sum()求和
        
          		需求:查詢servlet的最高分
        
          		SELECT MAX(servlet) FROM student;
        
          		需求:查詢mysql的最低分
        
          		SELECT MIN(mysql) FROM student;
        
          		需求:查詢servlet的平均分
        
          		SELECT AVG(servlet) FROM student;
        
          		需求:查詢當前有幾個學生
        
          		SELECT COUNT(*) FROM student;
        
          		需求:查詢servlet成績的總和
        
          		SELETE SUM(servlet) from student;
        
      • 分頁查詢(limit)

          		**Limit起始行數,查詢的行數**
        
          		**起始行數從0開始**
        
          		需求:查詢第1,2條數據
        
          		SELECT * FROM student LIMIT 0,2;
        
          		分頁查詢需知道:當前頁碼,每頁顯示條數
        
          		結論分頁查詢當前頁數據:select * from student limit (當前頁碼-1)*每頁顯示條數,每頁顯示條數;
        
          		需求:學生共20條數據,每頁顯示5條,共4頁
        
          		查詢第3頁(第11到15條)的學生數據:select * from student limit 10,5;
        
      • 查詢後排序(order by)

          		DESC:降序。數值從大到小,字母z-a
        
          		ASC:升序。數值從小到大,字母a-z
        
          		默認情況下,按照插入的順序排序
        
          		需求:按照id的升序排序
        
          		select * from student order by id asc;
        
          		需求:按照servlet成績降序排序
        
          		select * from student order by servlet desc;
        
          		多個排序條件的情況:先按照前面的條件排序,當出現重複記錄,再按照後面的條件排序
        
          		需求:按照age升序,再按照servlet成績升序排序
        
          		select * from student order by age asc,servlet asc;
        
      • 分組查詢(group by)

          		需求:查詢每個地區有多少人
        
          		SELECT address,COUNT(*) FROM student GROUP BY address;
        
          		需求:統計男女的人數
        
          		注意:where條件必須放在group by 分組之前
        
          		SELECT gender,COUNT(*) FROM student WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;
        
      • 分組後篩選(having)

          需求:查詢哪些地區的人數是大於2個的地區
        
          查詢哪些地區多少人 2)篩選人數大於2的地區
        
          注意:having使用在group by分組之後,對分組後的條件進行篩選
        
          SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2;
        

      5.數據約束(給表添加數據約束,從而約束用戶操作表數據的行爲)

      1)默認值約束(default)

        			create table test(
      
        			  name varchar(20),
      
        			  gender varchar(20) default ‘男’
      
        			)
      
        			需求:當不插入gender的時候,分配一個‘男’的默認值
      
        			注意:1)當沒有插入gender字段的時候,分配一個默認值
      

      2)非空約束(not null)

        			create table test(
      
        			  name varchar(20) not null,
      
        			  gender varchar(20)
      
        			)
      
        			需求;name字段一定要有值(不能不插入數據,不能是null),這是給name添加非空約束
      
        			1)非空約束,不能不插入值
      
        			Insert into test(gender) values(‘男’);
      
        			2)非空約束,不能插入null
      
        			Insert into test(name,gender) values(null,’男’);
      

      3)唯一約束(unique)

        			create table test(
      
        			  Id int unique,
      
        			  name varchar(20)
      
        			)
      
        			需求:id的值不能出現重複。這時就要給id添加一個唯一約束
      
        			1)不能插入重複的值
      
        			2)唯一約束,可以插入多個null。所以唯一約束不能約束null
      
        			Insert into test(id,name) values(1,’張三’);
      

      4)主鍵約束(primary key)(唯一+非空)

        			注意;
      
        			1)通常情況下,我們會給每張表都設置一個主鍵字段,用來標記記錄的唯一性
      
        			2)但是不建議把業務含義字段作爲主鍵,因爲隨着業務的變化,業務字段可能出現重複
      
        			3)建議給每張表都獨立添加一個叫id的字段,把這個id字段設置成主鍵,用來作爲記錄的唯一性
      
        			create table test(
      
        			  Id int primary key,
      
        			  name varchar(20)
      
        			)
      
        			4)唯一性
      
        			5)非空性
      

      5)自增長約束(auto_increment)

        			create table test(
      
        			  Id int primary key auto_increment,
      
        			  name varchar(20)
      
        			)
      
        			自增長約束:初始值爲0,每次遞增1
      
        			使用truncate table 刪除數據的時候,可以把自增長的初始值置爲0
      

      6)外鍵約束(原來制約兩張表的關係)

        			員工表(副表:被別的表約束的表,外鍵設置在副表)
      
        			Create table employee(
      
        			  Id int primary key auto_increment,
      
        			  name varchar(20),
      
        			  deptId int,
      
        			  添加外鍵約束(foreign key)
      
        			  Constraint employee_dept_fk foreign key(deptId) references dept(id)
      
        			                外鍵名                                    外鍵字段                
      
        			)
      
        			部門表(主表:約束別人的表)
      
        			Create table dept(
      
        			  Id int primary key auto_increment,
      
        			  Name varchar(20)
      
        			)
      
      • 外鍵約束在什麼情況下會起作用?

          				插入數據:當往副表插入了主表中不存在的數據時,外鍵起作用
        
          				修改數據:當往副表中修改主表中不存在的數據時,外鍵起作用
        
          				刪除數據:副表中有關聯主表數據的情況下,當刪除主表數據時,外鍵起作用
        
      • 當有了外鍵之後,應該如何管理數據呢?

          				插入數據:先插入主表的數據,再插入副表數據
        
          				修改數據:先修改主表數據,再修改副表數據
        
          				刪除數據:先刪除副表數據,再刪除主表數據
        

      7)級聯技術(cascade)

        			級聯:當有了外鍵的時候,我們希望修改或刪除數據的時候,修改或刪除主表數據時,同時能夠影響副表的數據,這時就可以使用級聯
      
        			Create table employee(
      
        			  Id int primary key auto_increment,
      
        			  name varchar(20),
      
        			  deptId int,
      
        			  添加外鍵約束(foreign key)
      
        			  添加級聯修改:on update cascade
      
        			  添加級聯修改:on delete cascade
      
        			  Constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade
      
        			                 外鍵名                               外鍵字段 
      
        			);
      
        			部門表(主表:約束別人的表)
      
        			Create table dept(
      
        			Id int primary key auto_increment,
      
        			Name varchar(20)
      
        			);
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章