mysql語句

學java的狗蛋發表於2020-12-31

今日內容

  • mysql安裝與解除安裝

  • mysql配置

  • SQL:結構化查詢語言 Structured Quary Language

  • DDL:運算元據庫、表

  • DML:增刪改表中的記錄

  • DQL: 查詢表中的記錄

  • DCL: 管理使用者與授權

mysql安裝與解除安裝

  1. 安裝mysql 參見mysql安裝文件

  2. 解除安裝分成兩步:

    • 安裝版:

      1. 找到my.ini datadir = C:/xxx 刪除該目錄下的檔案

      2. 從控制皮膚中一鍵解除安裝 mysql服務開啟狀態

    • 配置版:

      1. 使用管理員許可權開啟cmd指令視窗 輸入 net stop mysql

      2. 在指令視窗中 輸入 mysqld -remove

      3. 刪除本地安裝的mysql目錄資料夾

  3. mysql配置

    • mysql服務啟動

      1. 通過管理員開啟cmd指令視窗 輸入 net start mysql

      2. 找到window服務視窗 開啟執行視窗 輸入 services.msc ----> 找到mysql 手動啟動

    • mysql登入

      • 藉助cmd指令視窗

        • mysql -u登入賬號 -p 登入密碼 沒有密碼直接回車就可以

        • mysql -h連線伺服器的ip地址 -u登入賬號 -p登入密碼

          mysql -hlocalhost/127.0.0.1 -uroot -proot;

          如果通過ip連線不上,說明許可權不夠,給root賬號開啟連線mysql連線的許可權

          grant all privilegegs on  *.* to root@'%' identified by '連線伺服器的密碼' with admin option/ with grant option
          ​
          0. 使用mysql資料庫  use mysql; 
          1. grant all privileges on *.* to root@'%' identified by 'root' with grant option;
          2. flush privilegegs;  重新整理mysql的系統許可權
          3. 退出 重新通過ip進入
      • 藉助於mysql視覺化管理工具 Navicat

        解壓Navicat壓縮包 簡單破解下,點選連線選擇mysql 在連線視窗中輸入連線名、連線伺服器ip地址 、登入的賬號和密碼--->test 如果連線成功,程式碼已經成功登入進來

    • mysql 退出

      • quit

      • exit

    • mysql目錄結構

      1. mysql安裝目錄結構 basedir目錄中

        • bin: 二進位制檔案 mysql可執行的指令碼 mysqld.exe

        • data: 資料 mysql執行需要的資料檔案還有mysql執行的日誌檔案

        • include: C語言的頭資訊

        • lib: mysql執行需要支援的一些類庫 jar包檔案

        • share:mysql執行的一些錯誤資訊

        • my.ini mysql的配置資訊

      2. mysql資料目錄結構 datadir目錄中

        • 資料庫: 一個個資料夾

        • 表 : 就是一個個檔案

        • 資料 :一條條記錄

 

  • 資料庫管理系統、資料庫和表的關係

    可以使用資料庫管理系統建立多個資料庫,比如java31/apartment資料庫.....,一般一個專案對應的是一個資料庫,一個資料庫可以建立多張表,一般在專案中,資料庫中的表對映Model類 pojo、model、entry

    比如資料庫中建立一張使用者表user 在後臺伺服器中一般對應的有一個model類 User.class

後臺中的model類 一般用於臨時儲存從資料庫中查詢出來對應表中的資料, 如從user表查詢出來一條記錄,這條記錄對應的就是後臺伺服器中的一個user物件(屬性)

SQL 運算元據庫

 #####        概念:結構化查詢語言   Structured Quary Language
​
#####       作用
  1. 是一種資料庫的查詢的標準,對所有的資料庫都支援

  2. 不同的資料庫SQL語句可能有點不同 (方言),mysql oracle DB2

    sql語句分類

1.DDL:運算元據庫、表 資料定義語言 Data Definition Language

2.DML:增刪改表中的記錄 資料操作語言 Data Manipulation Language

3.DQL: 查詢表中的記錄 資料查詢語言 Data Query language

4.DCL: 管理使用者與授權 Data Control language 資料控制語言

DDL 語言

  1. 運算元據庫 CRUD操作

    • 建立資料庫 方式有很多種: C ---create

      • create database 資料庫名;

      • create database if not exists 資料庫名;// 建立的時候先判斷資料庫是否存在

      • create database 資料庫名 character set 編碼字符集;// 建立資料庫的指定編碼字符集

-- 分號 一般是sql語句的結束標誌
create DATABASE java31;
-- 建立資料庫的第二種方式 create database if not exists 資料庫名;
create database if not EXISTS apartment;
-- 建立資料庫的第三種方式  create database 資料庫名 character set 編碼字符集;
create database school character set utf8;
-- 三者組合到一起表達
create database if not EXISTS college character set utf8;
  1. 查詢 r --->retrieve

    • 查詢當前資料庫伺服器的所有的資料庫

      show databases;

    • 查詢某個資料庫的編碼字符集:查詢某個建立的資料庫的編碼字符集

      show create database 資料庫名稱;

  2. 修改 u--->update

    • 修改資料庫的編碼字符集

      alter database 資料庫名稱 character set 編碼字符集;

-- alter  database 資料庫名稱 character set 編碼字符集;
alter database college character set gbk;
  1. 刪除 d -->delete drop

    • 刪除資料庫

      drop database 資料庫名稱;

    • 判斷資料庫是否存在,如果存在刪除掉

      drop database if exists 資料庫名稱;

--  drop database if exists 資料庫名稱;
drop database if EXISTS school;
  1. 操作表

    1. 建立表 C --> create

      • 語法:

        create table 表名(

        列名1 資料型別,

        列名2 資料型別,

        。。。。。。。

        );

      • 資料型別

        • 整數型別 tinyint(微整形) 8位 smallint(小整形)16位 mediumint(中整形)24位 int(integer) 整形32位

        • 小數型別 double 8個位元組 float 4個位元組

        • 日期型別 date (年月日) time (時分秒) datetime (年月日時分秒) timestamp 時間戳 年月日時分秒

          時間戳,如果該欄位為時間戳型別,沒有賦值或者該欄位值為null,則預設使用系統當前的時間自動賦值。一般情況一張表中只能有一個欄位使用時間戳資料型別。

        • 字串型別 char(固定長度的字串) varchar(可變長度的字串) 使用幾個字元就佔幾個

        • 二進位制型別 tinyblob(允許0~255個位元組) big large blob(允許0~65535個位元組) longblob(非常大)

        • 文字型別 tinytext (允許長度為0~255個位元組) text(允許0~65535個位元組) longtext(非常大)

           

    2. 檢視錶 查詢 retrieve

      • show tables 檢視當前使用的資料庫下面的所有的表

      • desc 表名; 描述該表的結構

      • 檢視建立的表 show create table 表名;---->檢視該表建立使用到的sql語句

      • 快速建立一個表結構相同的表 create table 新表名 like 舊錶名;

    3. 修改 update

      • 修改表名 alter

        alter table 舊錶名 rename to 新表名;

      • 修改表的字符集

        alter table 表名 character set 編碼字符集;

      • 新增一列欄位 add

        alter table 表名 add 列名 資料型別;

      • 刪除一列 drop

        alter table 表名 drop 列名;

      • 修改列名 資料型別

        • change alter table 表名 change 舊列名 新列名 新資料型別;

        • modify alter table 表名 modify 列名 新資料型別;

    4. 刪除 delete

      • 刪除表 drop table 表名;

      • 刪除判斷表是否存在 drop table if exists 表名;

    大多數情況下我們是直接藉助於圖形化管理工具 Navicat直接操作。

DML 增刪改資料庫中的表的資料

  1. 新增資料:

    • 語法:

      • insert into 表名(列名1,列名2,......列名n) values(值1,值2,......值n);

      • 注意事項:

        • 列名和後面值的型別要保持一致。

        • 如果表名後面沒有指定列名,預設為給該表中的所有的列新增對應的值。注意依然是有順序的。

          insert into 表名 values(值1,值2,......值n);

        • 除了數字型別外(int,double),其他型別一律要使用引號(單引號和雙引號都可以)引起來。

  2. 刪除資料:

    • 語法: delete

      delete from 表名 [where 條件];

    • 注意事項:

      • 如果後面不跟條件 ,則刪除整張表的資料

      • 刪除表的所有的記錄 delete from student / truncate table 表名;(底層是先把表刪除掉,然後再建立一張一模一樣的表)

      • 如果條件中的欄位值有重複的,凡是符合條件的都刪除。

  3. 修改資料:update

    • 語法:

      update 表名 set 列名1 = 替換值1, 列名2 =替換值2,.....列名n = 替換值n [where 條件];

    • 注意:

      • 如果不帶條件,則會修改表中的所有記錄

DQL 查詢表中的記錄 select .... from .....

  • 語法

    select 需要查詢的資訊(列名1,列名2,.......列名n) / * from 表名 [where 條件];

    完善下:

    select

    欄位列表

    from

    表名列表

    where

    條件列表

    group by

    分組欄位

    having

    分組之後的條件

    limit

    分頁限定

  • 去重查詢 distinct

  • ifnull表示式 ifnull(表示式1,表示式2)

    表示式1: 代表那個欄位需要判斷是否為null

    表示式2:如果該欄位值為null 後面的進行替換

  • 起別名操作

    語法 as 也可以省略不寫 ​ 表名 as 新的名字

    查詢出來的欄位資訊 as 新名字

    當你查詢同一張表,並且進行多次查詢的時候可以使用起別名來實現

    注意:

    起別名 只是在sql語句中方便查詢使用的,並不會對資料原來的檔案起到任何影響

程式碼語句

 

-- 註釋 mysql中的註釋 -- 空格 註釋的內容 單行註釋
/* 
    多行註釋 (不能巢狀)
        
        


*/
# 註釋 
-- select* from address
-- 建立資料庫的第一種方式  SQL建議使用大寫 大寫和小寫一般不區分
-- 分號 一般是sql語句的結束標誌
CREATE DATABASE java31;


-- 建立資料庫的第二種方式
CREATE DATABASE
IF NOT EXISTS apartments;


CREATE DATABASE school CHARACTER
SET utf8;


-- 三者組合到一起表達 
CREATE DATABASE
IF NOT EXISTS college CHARACTER
SET utf8 -- 查詢
-- 查詢當前所有的資料庫
SHOW DATABASES;


SHOW CREATE DATABASE college -- alter database 資料庫名稱 character set 編碼字符集;
ALTER DATABASE college CHARACTER
SET gbk -- drop database 資料庫名稱;
DROP DATABASE college;


-- drop database if exists 資料庫名稱;
DROP DATABASE
IF EXISTS school;


/*
create table 表名(


​    列名1 資料型別, 
​    列名2 資料型別, 
​    …… 
);
*/
-- 選擇使用哪一個資料庫 use 資料庫名稱
USE java31;


-- 建立學生表
CREATE TABLE Student (
    id INT,-- id 整數型別
    username VARCHAR(20),-- 姓名 可變字串長度為20
    birthday date,-- 生日 日期型別
    gender VARCHAR(1)-- 性別 可變字串長度為1
);
-- show tables 檢視當前使用的資料庫下面的所有的表
show tables;
-- desc 表名:描述該表的結構
DESC student;
-- 檢視建立的表:show create table 表名;
show CREATE table student;
-- 快速建立一個表結構相同的表 create table 新表名 like  舊錶名; 複製表
CREATE table baby like student;
-- 檢視baby表結構
desc baby;
-- alter table 舊錶名 rename to 新表名;
alter table baby rename to children;
-- 再次檢視baby表結構
desc baby;


-- alter table 表名 character set 編碼字符集;
show CREATE TABLE children;
alter table children CHARACTER set gbk;


desc children;
-- 給該表新增一個成績的欄位 score int(10)
-- alter table 表名 character add 列名 資料型別;
ALTER table children add score int(10);
-- alter table 表名 drop 列名;
alter table children drop score;


-- change alter table 表名 change 舊列名 新列名 新資料型別; 
alter table children change gender sex int(1); 


--  alter table 表名 modify 列名 新資料型別;
alter table children modify sex varchar(1);
-- 刪除表 drop table 表名;
DROP table children;


-- 刪除判斷表是否存在 drop table if exists 表名;
drop table if EXISTS children;


-- 練習
show CREATE table children;
CREATE table laybaby like student;
desc laybaby;


drop table laybaby;


desc student;
-- 給學生表新增一條資料
-- insert into 表名(列名1,列名2,……列名n) values (值1,值2,……值n)
insert into student(id,username,birthday,gender) values (001,'小孫','1990-10-1','男');


-- 檢視該表中的資料 select FROM
select* from student;


INSERT into student values(002,'小王','2020-10-1','女');
-- 插入一條記錄 只新增姓名和姓名
INSERT into student(username,gender) values('小劉','男');


-- delete from 表名[where = 條件];根據表中的某個或某些欄位的資訊進行刪除 一般刪除都是用主鍵
delete from student where username = '小劉';


-- 欄位值有重複
delete from student where gender = '男';
-- 刪除整張表的記錄
truncate table student;


-- 不使用條件
delete from student;
-- update 表名 set 列名1 = 替換值1,列名2 = 替換值2……列名n= 替換值n [where 條件];
update student set username= '小趙' where username = '小孫';


-- 全部改變
update student set id = '1000',username = '小麗',birthday = '2020-10-10',gender = '女' where username = '小趙';
-- 不帶條件
update student set id = '1000',username = '小麗',birthday = '2020-10-10',gender = '女';


-- select 需要查詢的資訊(列名1,列名2,……列名n) / * from 表名[where 條件];


-- 查詢男性同胞的姓名 
select username from student where gender = '男';


-- 查詢表中姓名含有小的同胞
select * from student where username like '%小%';


select * from student where username like '%孫%';
-- 查詢表中的男性中的名字含有小的同胞
select * from student where username like '%小%' and gender  = '男';