SQL
一、SQL
Structured Query Language:結構化查詢語言,縮寫為SQL
其實就是定義了操作所有關係型數據庫的規則,標準組織指定的規則
每一種數據庫操作的方式不一樣的地方稱之為"方言"
二、SQL通用語法
SQL語句可以單行或者多行書寫,以分號結尾
可以使用空格和縮進來增強語句的可讀性
MySQL數據庫的SQL語句不區分大小寫,但是關鍵字建議大寫
註釋方式
<code>-- 單行註釋('--'之後必須加空格)
#單行註釋
/*
多行
註釋
*//<code>
三、SQL的分類
DDL(Data Definition Language):數據定義語言
操作數據庫和表
DML(Data Manipulation Language):數據庫操作語言
增刪改表中的數據
DQL(Data Query Language):數據查詢語言
查詢表
DCL(Data Control Language):數據庫控制語言
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:增刪改表中數據
添加數據
- 語法
<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>
閱讀更多 微科技分享 的文章