【MySQL】對數據庫和表的增刪改查

數據庫的基本概念

  1. 數據庫的英文單詞: DataBase 簡稱 : DB

  2. 什麼是數據庫?

    • 用於存儲和管理數據的倉庫。
  3. 數據庫的特點:

    1. 持久化存儲數據的。其實數據庫就是一個文件系統
    2. 方便存儲和管理數據
    3. 使用了統一的方式操作數據庫 – SQL

MySQL數據庫軟件

安裝

卸載(安裝版)

  1. 去mysql的安裝目錄找到my.ini文件
    • 複製 datadir="C:/ProgramData/MySQL/MySQL Server 5.7/Data/"
  2. 卸載MySQL
  3. 刪除C:/ProgramData目錄下的MySQL文件夾。

配置

MySQL服務啓動

  1. 手動。
  2. cmd --> services.msc 打開服務的窗口
  3. 使用管理員打開cmd
    • net start mysql : 啓動mysql的服務
    • net stop mysql :關閉mysql服務

MySQL登錄

  • mysql -uroot -p密碼
  • mysql -hip -uroot -p連接目標的密碼
  • mysql --host=ip --user=root --password=連接目標的密碼

MySQL退出

  1. exit
  2. quit

MySQL目錄結構

  1. MySQL安裝目錄:basedir="D:/develop/MySQL/"
    • 配置文件 my.ini
  2. MySQL數據目錄:datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
    • 幾個概念
      • 數據庫:文件夾
      • 表:文件
      • 數據:數據

SQL

什麼是SQL?

​ Structured Query Language:結構化查詢語言
​ 其實就是定義了操作所有關係型數據庫的規則。每一種數據庫操作的方式存在不一樣的地方,稱爲“方言”。

SQL通用語法

  1. SQL 語句可以單行或多行書寫,以分號結尾。
  2. 可使用空格和縮進來增強語句的可讀性。
  3. MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
  4. 3 種註釋
    • 單行註釋: – 註釋內容 或 # 註釋內容(mysql 特有)
    • 多行註釋: /* 註釋 */

SQL分類

  1. DDL(Data Definition Language)數據定義語言
    用來定義數據庫對象:數據庫,表,列等。關鍵字:create, drop, alter 等
  2. DML(Data Manipulation Language)數據操作語言
    用來對數據庫中表的數據進行增刪改。關鍵字:insert, delete, update 等
  3. DQL(Data Query Language)數據查詢語言
    用來查詢數據庫中表的記錄(數據)。關鍵字:select, where 等
  4. DCL(Data Control Language)數據控制語言(瞭解)
    用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:GRANT, REVOKE 等

1. DDL:操作數據庫、表

1.1 操作數據庫:CRUD

C(Create):創建
  • 創建數據庫:

    create database 數據庫名稱;
    
  • 創建數據庫,判斷不存在,再創建:

    create database if not exists 數據庫名稱;
    
  • 創建數據庫,並指定字符集

    create database 數據庫名稱 character set 字符集名;
    
  • 練習: 創建db4數據庫,判斷是否存在,並制定字符集爲utf8(沒有-)

    create database if not exists db4 character set utf8;
    
R(Retrieve):查詢
  • 查詢所有數據庫的名稱:

    show databases;
    
  • 查詢某個數據庫的字符集:查詢某個數據庫的創建語句

    show create database 數據庫名稱;
    
U(Update):修改
  • 修改數據庫的字符集

    alter database 數據庫名稱 character set 字符集名稱;
    
D(Delete):刪除
  • 刪除數據庫

    drop database 數據庫名稱;
    
  • 判斷數據庫存在,存在再刪除

    drop database if exists 數據庫名稱;
    
使用數據庫
  • 查詢當前正在使用的數據庫名稱

    select database();
    
  • 使用數據庫

    use 數據庫名稱;
    

1.2 操作表

C(Create):創建

基本語法:

create table 表名(
	列名1 數據類型1 [完整約束條件],
	列名2 數據類型2 [完整約束條件],
	...
	列名n 數據類型n [完整約束條件]
);
# 注意:最後一列,不需要加逗號(,)
補充1:常用的數據庫類型:
  1. int:整數類型

    • age int
  2. double: 小數類型

    • score double(5,2)
  3. date: 日期,只包含年月日,yyyy-MM-dd

  4. datetime: 日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss

  5. timestamp: 時間戳類型 包含年月日時分秒 yyyy-MM-dd HH:mm:ss

    • 如果將來不給這個字段賦值,或賦值爲null,則默認使用當前的系統時間,來自動賦值
  6. varchar:字符串

    • name varchar(20):姓名最大20個字符

      exam:zhangsan 8個字符 張三 2個字符

補充2:完整性約束條件
約束條件 說明
PRIMARY KEY 標識該屬性爲該表的主鍵,可以唯一的標識對應的元組
FOREIGN KEY 標識該屬性爲該表的外鍵,是與之聯繫某表的主鍵
NOT NULL 標識該屬性不能爲空
UNIQUE 標識該屬性的值是唯一的
AUTO_INCREMENT 標識該屬性的值是自動增加,這是MySQL的SQL語句的特色
DEFAULT 爲該屬性設置默認值

Exam:

create table student(
	id int PRIMARY KEY NOT NULL AUTO_INCREMENT,	 -- 設置主鍵,非空,自動遞增
	name varchar(32) NOT NULL, --設置姓名非空
	age int DEFAULT 0, --設置年齡的默認值爲0
	score double(4,1),
	birthday date,
	insert_time timestamp
	--註釋:也可以在最後指定表的主鍵:PRIMARY KEY(id)
);
複製表:
create table 表名 like 被複制的表名;
R(Retrieve):查詢
  • 查詢某個數據庫中所有的表名稱

    show tables;
    
  • 查詢表結構

    desc 表名;
    
U(Update):修改
  • 修改表名

    alter table 表名 rename to 新的表名;
    
  • 修改表的字符集

    alter table 表名 character set 字符集名稱;
    
    # 查看錶的字符集
    show create table 表名;
    
  • 添加一列

     alter table 表名 add 列名 數據類型 [完整性約束]; #[爲可選項]
    
  • 修改列名稱 類型

    alter table 表名 change 列名 新列名 新數據類型;
    
    alter table 表名 modify 列名 新數據類型;
    
  • 刪除列

    alter table 表名 drop 列名;
    
D(Delete):刪除
drop table 表名;

drop table  if exists 表名 ;

2. DML:增刪改表中數據

添加數據:
  • 語法:

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

    1. 列名和值要一一對應。
    2. 如果表名後,不定義列名,則默認給所有列添加值
      insert into 表名 values(值1,值2,...值n);
    3. 除了數字類型,其他類型需要使用引號(單雙都可以)引起來
刪除數據:
  • 語法:

    delete from 表名 [where 條件]
    
  • 注意:

    1. 如果不加條件,則刪除表中所有記錄。

    2. 如果要刪除所有記錄

      --1. 不推薦使用。有多少條記錄就會執行多少次刪除操作
      delete from 表名;
      
      --2. 推薦使用,效率更高 先刪除表,然後再創建一張一樣的表。
      TRUNCATE TABLE 表名;   
      
修改數據:
  • 語法:
    update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];

  • 注意:如果不加任何條件,則會將表中所有記錄全部修改。

3. DQL:查詢表中的記錄

select * from 表名;

基本語法:
select
	字段列表
from
	表名列表
where
	條件列表
group by
	分組字段
having
	分組之後的條件
order by
	排序
limit
	分頁限定
基礎查詢
  1. 多個字段的查詢

    select 字段名1,字段名2, ..., 字段名n from 表名;
    
    • 注意:如果查詢所有字段,則可以使用*來替代字段列表。
  2. 去除重複:

    select distinct 字段名 from 表名;
    
  3. 計算列

    • 一般可以使用四則運算計算一些列的值。(一般只會進行數值型的計算)
    • ifnull(表達式1,表達式2):null參與的運算,計算結果都爲null
      • 表達式1:值可能爲null的字段
      • 當字段爲null時的默認值。
  4. 起別名:

    • as:as也可以省略
    select 字段名 as 別名 from 表名;
    
條件查詢

where子句後跟條件

補充3:運算符
  1. 補充:比較運算符
運算符 表達式的形式 作用
= a=b 判斷a是否等於b
<>或!= a<>b 或 a!=b 判斷a是否不等於b
<=> 嚴格比較兩個NULL值是否相等 兩個操作碼均爲NULL時,其所得值爲1;而當一個操作碼爲NULL時,其所得值爲0判斷a時候等於b
> a>b 判斷是否a大於b
>= a>=b 判斷a是否大於等於b
< a<b 判斷a是否小於b
<= a<=b 判斷a是否小於等於b
IS NULL a IS NULL 判斷a是否等於NULL
IS NOT NULL a IS NOT NULL 判斷a是否不等於NULL
BETWEEN AND x BETWEEN a and b 判斷a的取值是否在a和b之間
IN a IN(值1,值2,…,值n) 判斷a的取值是否爲值1到值n中的一個
LIKE a LIKE 表達式 判斷a是否匹配表達式
REGEXP a REGEXP 正則表達式 判斷a是否匹配正則表達式

說明:LIKE:模糊查詢

  • 佔位符:
    • _:單個任意字符
    • %:多個任意字符
  1. 補充:邏輯運算符

    • and&&
    • or||
    • not!

示例:

-- 查詢年齡大於/大於等於20歲
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE age >= 20;

-- 查詢年齡等於20歲
SELECT * FROM student WHERE age = 20;

-- 查詢年齡不等於20歲
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;

-- 查詢年齡大於等於20 小於等於30
SELECT * FROM student WHERE age >= 20 &&  age <=30;
SELECT * FROM student WHERE age >= 20 AND  age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;

-- 查詢年齡22歲,18歲,25歲的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);

-- 查詢英語成績爲null
SELECT * FROM student WHERE english = NULL; -- 不對的。null值不能使用 =!=) 判斷

SELECT * FROM student WHERE english IS NULL;

-- 查詢英語成績不爲null
SELECT * FROM student WHERE english  IS NOT NULL;

-- 查詢姓馬的有哪些? like
SELECT * FROM student WHERE NAME LIKE '馬%';

-- 查詢姓名第二個字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";

-- 查詢姓名是3個字的人
SELECT * FROM student WHERE NAME LIKE '___';

-- 查詢姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章