MySQL基礎筆記——SQL語法

SQL

一、SQL

Structured Query Language:結構化查詢語言,縮寫為SQL

其實就是定義了操作所有關係型數據庫的規則,標準組織指定的規則

每一種數據庫操作的方式不一樣的地方稱之為"方言"

MySQL基礎筆記——SQL語法

二、SQL通用語法

SQL語句可以單行或者多行書寫,以分號結尾

可以使用空格和縮進來增強語句的可讀性

MySQL數據庫的SQL語句不區分大小寫,但是關鍵字建議大寫

註釋方式

<code>-- 單行註釋('--'之後必須加空格)
#單行註釋
/*
多行
註釋
*//<code>

三、SQL的分類

DDL(Data Definition Language):數據定義語言

操作數據庫和表

DML(Data Manipulation Language):數據庫操作語言

增刪改表中的數據

DQL(Data Query Language):數據查詢語言

查詢表

DCL(Data Control Language):數據庫控制語言

MySQL基礎筆記——SQL語法

DDL:操作數據庫、表

1、操作數據庫:CRUD

C(Create):創建

<code>-- 創建數據庫
mysql> CREATE DATABASE city;

-- 首先判斷數據庫是存在,不存在才創建
mysql> CREATE DATABASE IF NOT EXISTS TEST;

-- 指定數據庫的字符集
mysql> CREATE DATABASE TEXT CHARACTER SET GBK;

-- 創建名字為school的數據庫,先判斷是否存在,並且指定使用字符集GBK
mysql> CREATE DATABASE IF NOT EXISTS SCHHOL CHARACTER SET GBK;/<code>

R(Retrieve):查詢

<code>-- 查詢數據庫的名稱
SHOW DATABASES;
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| city |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

-- 查看某個數據庫的字符集:查詢某個數據庫的創建語句
mysql> show create database mysql;
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |

+----------+---------------------------------------------------------------------------------------------------------------------------------+
| mysql | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------------------------------------------------------------------------+/<code>

U(Update):修改

<code>-- 修改數據庫的字符集
mysql> ALTER DATABASE SCHOOL CHARACTER SET UTF8;/<code>

D(Delete):刪除

<code>-- 刪除數據庫
mysql> DROP DATABASE SCHOOL;

-- 先判斷數據庫是否存在,如果存在才刪除
mysql> DROP DATABASE IF EXISTS SCHOOL;/<code>

使用數據庫

<code>-- 使用數據庫
mysql> USE CITY;

-- 查詢當前正在使用的數據庫名稱
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| city |
+------------+
1 row in set (0.00 sec)/<code>

2、操作表

C(Create):創建

  • 基本語法:
  • <code>CREATE TABLE 表名(
    \t列名1,數據類型1,
    \t列名2,數據類型2,
    \t列名3,數據類型3

    \t......
    \t列名n,數據類型n
    );
    #最後一行不需要加逗號/<code>
  • 常用數據類型:
  • <code>INT 整數
    DOUBLE 小數(指定一共多少位,小數點後多少位):SCORE DOUBLE(5,2)
    DATE 日期類型:只包含年月日,yyyy-MM-dd
    DATETIME 時間類型:年月日時分秒,yyyy-MM-dd HH:mm:ss
    TIMESTAMP 時間戳類型:年月日時分秒,yyyy-MM-dd HH:mm:ss
    -- 如果是TIMESAMP類型,不給其賦值或者指定為NULL,將會默認使用系統的當前時間來自動賦值
    VARCHAR 字符串類型(指定長度):NAME VARCHAR(20)/<code>
  • 實例
  • <code>-- 學生表
    -- 編號 姓名 年齡 分數 出生日期 添加時間
    mysql> CREATE TABLE STU_MESSAGE(
    -> ID INT,
    -> NAME VARCHAR(32),
    -> AGE INT,
    -> SCORE DOUBLE(4,1),
    -> BIRTHDAY DATE,
    -> INSERT_TIME TIMESTAMP
    -> );
    Query OK, 0 rows affected, 1 warning (0.60 sec)

    -- 檢查表結構
    mysql> DESC STU_MESSAGE;
    +-------------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------------+-------------+------+-----+---------+-------+
    | ID | int(11) | YES | | NULL | |
    | NAME | varchar(32) | YES | | NULL | |

    | AGE | int(11) | YES | | NULL | |
    | SCORE | double(4,1) | YES | | NULL | |
    | BIRTHDAY | date | YES | | NULL | |
    | INSERT_TIME | timestamp | YES | | NULL | |
    +-------------+-------------+------+-----+---------+-------+
    6 rows in set (0.00 sec)

    -- 複製表
    mysql> CREATE TABLE STU LIKE STU_MESSAGE;/<code>

    R(Retrieve):查詢

    <code>-- 查詢某個數據庫當中的表名稱
    mysql> SHOW TABLES;
    +----------------+
    | Tables_in_city |
    +----------------+
    | student |
    +----------------+

    -- 查詢表的創建語句
    mysql> SHOW CREATE TABLE STUDENT;
    +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table |
    +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | STUDENT | CREATE TABLE `student` (
    `ID` int(11) DEFAULT NULL,
    `NAME` varchar(32) DEFAULT NULL,
    `AGE` int(11) DEFAULT NULL,
    `SCORE` double(4,1) DEFAULT NULL,
    `BIRTHDAY` date DEFAULT NULL,
    `INSERT_TIME` timestamp NULL DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk |
    +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

    -- 查詢表結構
    mysql> DESC USER;
    +--------------------------+-----------------------------------+------+-----+-----------------------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +--------------------------+-----------------------------------+------+-----+-----------------------+-------+
    | Host | char(255) | NO | PRI | | |
    | User | char(32) | NO | PRI | | |
    | Select_priv | enum('N','Y') | NO | | N | |
    | Insert_priv | enum('N','Y') | NO | | N | |
    | Update_priv | enum('N','Y') | NO | | N | |
    | Delete_priv | enum('N','Y') | NO | | N | |
    | Create_priv | enum('N','Y') | NO | | N | |

    | Drop_priv | enum('N','Y') | NO | | N | |
    | Reload_priv | enum('N','Y') | NO | | N | |
    | Shutdown_priv | enum('N','Y') | NO | | N | |
    | Process_priv | enum('N','Y') | NO | | N | |
    | File_priv | enum('N','Y') | NO | | N | |
    | Grant_priv | enum('N','Y') | NO | | N | |
    | References_priv | enum('N','Y') | NO | | N | |
    | Index_priv | enum('N','Y') | NO | | N | |
    | Alter_priv | enum('N','Y') | NO | | N | |
    | Show_db_priv | enum('N','Y') | NO | | N | |
    | Super_priv | enum('N','Y') | NO | | N | |
    | Create_tmp_table_priv | enum('N','Y') | NO | | N | |
    | Lock_tables_priv | enum('N','Y') | NO | | N | |
    | Execute_priv | enum('N','Y') | NO | | N | |
    | Repl_slave_priv | enum('N','Y') | NO | | N | |
    | Repl_client_priv | enum('N','Y') | NO | | N | |
    | Create_view_priv | enum('N','Y') | NO | | N | |
    | Show_view_priv | enum('N','Y') | NO | | N | |
    | Create_routine_priv | enum('N','Y') | NO | | N | |
    | Alter_routine_priv | enum('N','Y') | NO | | N | |
    | Create_user_priv | enum('N','Y') | NO | | N | |
    | Event_priv | enum('N','Y') | NO | | N | |
    | Trigger_priv | enum('N','Y') | NO | | N | |
    | Create_tablespace_priv | enum('N','Y') | NO | | N | |
    | ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
    | ssl_cipher | blob | NO | | NULL | |
    | x509_issuer | blob | NO | | NULL | |
    | x509_subject | blob | NO | | NULL | |
    | max_questions | int(11) unsigned | NO | | 0 | |
    | max_updates | int(11) unsigned | NO | | 0 | |
    | max_connections | int(11) unsigned | NO | | 0 | |
    | max_user_connections | int(11) unsigned | NO | | 0 | |
    | plugin | char(64) | NO | | caching_sha2_password | |
    | authentication_string | text | YES | | NULL | |
    | password_expired | enum('N','Y') | NO | | N | |
    | password_last_changed | timestamp | YES | | NULL | |
    | password_lifetime | smallint(5) unsigned | YES | | NULL | |
    | account_locked | enum('N','Y') | NO | | N | |
    | Create_role_priv | enum('N','Y') | NO | | N | |
    | Drop_role_priv | enum('N','Y') | NO | | N | |
    | Password_reuse_history | smallint(5) unsigned | YES | | NULL | |
    | Password_reuse_time | smallint(5) unsigned | YES | | NULL | |
    | Password_require_current | enum('N','Y') | YES | | NULL | |
    | User_attributes | json | YES | | NULL | |
    +--------------------------+-----------------------------------+------+-----+-----------------------+-------+/<code>

    U(Update):修改

    <code>-- 修改表名
    mysql> ALTER TABLE STU RENAME TO STUDENT;


    -- 修改表的字符集
    mysql> ALTER TABLE STUDENT CHARACTER SET UTF8;

    -- 添加列
    mysql> ALTER TABLE STUDENT ADD GENDER VARCHAR(10);

    -- 刪除列
    mysql> ALTER TABLE STUDENT DROP SEX;

    -- 修改列的名稱和數據類型
    mysql> ALTER TABLE STUDENT CHANGE GENDER SEX VARCHAR(20);

    -- 修改列的數據類型
    mysql> ALTER TABLE STUDENT MODIFY SEX VARCHAR(10);/<code>

    D(Delete):刪除

    <code>-- 先判斷表是否存在,然後刪除
    mysql> DROP TABLE IF EXISTS STUDENT;/<code>

    DML:增刪改表中數據

    MySQL基礎筆記——SQL語法


    添加數據

    • 語法
    <code>INSERT INTO TABLE_NAME(NAME1,NAME2,...,NAMEn)VALUES (VALUE1,VALUE2,...,VALUEn);/<code>
  • 注意事項
  • <code>1、列名和值要一一對應
    2、如果表名後面不定義列名,則默認給所有列添加值
    3、除了數字之外的其他類型需要雙引號或者是單引號/<code>
  • 實例
  • <code>INSERT INTO STUDENT(ID, NAME, AGE) VALUES (1, '張無忌', 18);

    INSERT INTO student VALUES(2, '趙敏', 17, 99.9, '20000510', CURRENT_TIMESTAMP());/<code>
    刪除數據
    • 語法
    <code>DELETE FROM TABLE_NAME WHERE CONDITION;/<code>
  • 注意事項
  • <code>1、如果不加條件,就是刪除表中所有數據
    2、如果要刪除全部的數據,最好採用TRUNCATE,因為如果是採用DELETE,有多少的數據就會執行多少次,效率特別低/<code>
  • 實例
  • <code>-- 刪除符合條件的數據
    DELETE FROM STUDENT WHERE ID = 1;
    -- 刪除全部數據(執行兩個操作,刪除表,然後再創建一個一模一樣的空表)
    TRUNCATE TABLE STUDENT;/<code>
    修改數據
    • 語法
    <code>UPDATE TABLE_NAME SET NAME1 = VALUE1, NAME2 = VALUE2,..., NAMEn = VALUEn WHERE CONDITION;/<code>
  • 注意事項
  • <code>1、如果不加任何條件,則將表中的全部數據進行修改/<code>
  • 實例
  • <code>UPDATE STUDENT SET AGE = 117 WHERE NAME = '趙敏';/<code>

    DQL:查詢

    <code>SELECT * FROM TABLE_NAME;/<code>


    分享到:


    相關文章: