SQL 一、SQL Structured Query Language:結(jié)構(gòu)化查詢(xún)語(yǔ)言,縮寫(xiě)為SQL 其實(shí)就是定義了操作所有關(guān)系型數(shù)據(jù)庫(kù)的規(guī)則,標(biāo)準(zhǔn)組織指定的規(guī)則 每一種數(shù)據(jù)庫(kù)操作的方式不一樣的地方稱(chēng)之為'方言' 二、SQL通用語(yǔ)法 SQL語(yǔ)句可以單行或者多行書(shū)寫(xiě),以分號(hào)結(jié)尾 可以使用空格和縮進(jìn)來(lái)增強(qiáng)語(yǔ)句的可讀性 MySQL數(shù)據(jù)庫(kù)的SQL語(yǔ)句不區(qū)分大小寫(xiě),但是關(guān)鍵字建議大寫(xiě) 注釋方式 -- 單行注釋('--'之后必須加空格)
#單行注釋
/*
多行
注釋
*/
三、SQL的分類(lèi) DDL(Data Definition Language):數(shù)據(jù)定義語(yǔ)言 操作數(shù)據(jù)庫(kù)和表 DML(Data Manipulation Language):數(shù)據(jù)庫(kù)操作語(yǔ)言 增刪改表中的數(shù)據(jù) DQL(Data Query Language):數(shù)據(jù)查詢(xún)語(yǔ)言 查詢(xún)表 DCL(Data Control Language):數(shù)據(jù)庫(kù)控制語(yǔ)言 授權(quán)操作權(quán)限 DDL:操作數(shù)據(jù)庫(kù)、表 1、操作數(shù)據(jù)庫(kù):CRUD C(Create):創(chuàng)建 -- 創(chuàng)建數(shù)據(jù)庫(kù)
mysql> CREATE DATABASE city;
-- 首先判斷數(shù)據(jù)庫(kù)是存在,不存在才創(chuàng)建
mysql> CREATE DATABASE IF NOT EXISTS TEST;
-- 指定數(shù)據(jù)庫(kù)的字符集
mysql> CREATE DATABASE TEXT CHARACTER SET GBK;
-- 創(chuàng)建名字為school的數(shù)據(jù)庫(kù),先判斷是否存在,并且指定使用字符集GBK
mysql> CREATE DATABASE IF NOT EXISTS SCHHOL CHARACTER SET GBK;
R(Retrieve):查詢(xún)-- 查詢(xún)數(shù)據(jù)庫(kù)的名稱(chēng)
SHOW DATABASES;
mysql> SHOW DATABASES;
--------------------
| Database |
--------------------
| city |
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
-- 查看某個(gè)數(shù)據(jù)庫(kù)的字符集:查詢(xún)某個(gè)數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句
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' */ |
---------- ---------------------------------------------------------------------------------------------------------------------------------
U(Update):修改-- 修改數(shù)據(jù)庫(kù)的字符集
mysql> ALTER DATABASE SCHOOL CHARACTER SET UTF8;
D(Delete):刪除-- 刪除數(shù)據(jù)庫(kù)
mysql> DROP DATABASE SCHOOL;
-- 先判斷數(shù)據(jù)庫(kù)是否存在,如果存在才刪除
mysql> DROP DATABASE IF EXISTS SCHOOL;
使用數(shù)據(jù)庫(kù)-- 使用數(shù)據(jù)庫(kù)
mysql> USE CITY;
-- 查詢(xún)當(dāng)前正在使用的數(shù)據(jù)庫(kù)名稱(chēng)
mysql> SELECT DATABASE();
------------
| DATABASE() |
------------
| city |
------------
1 row in set (0.00 sec)
2、操作表C(Create):創(chuàng)建基本語(yǔ)法:CREATE TABLE 表名(
列名1,數(shù)據(jù)類(lèi)型1,
列名2,數(shù)據(jù)類(lèi)型2,
列名3,數(shù)據(jù)類(lèi)型3
......
列名n,數(shù)據(jù)類(lèi)型n
);
#最后一行不需要加逗號(hào) 常用數(shù)據(jù)類(lèi)型:INT 整數(shù)
DOUBLE 小數(shù)(指定一共多少位,小數(shù)點(diǎn)后多少位):SCORE DOUBLE(5,2)
DATE 日期類(lèi)型:只包含年月日,yyyy-MM-dd
DATETIME 時(shí)間類(lèi)型:年月日時(shí)分秒,yyyy-MM-dd HH:mm:ss
TIMESTAMP 時(shí)間戳類(lèi)型:年月日時(shí)分秒,yyyy-MM-dd HH:mm:ss
-- 如果是TIMESAMP類(lèi)型,不給其賦值或者指定為NULL,將會(huì)默認(rèn)使用系統(tǒng)的當(dāng)前時(shí)間來(lái)自動(dòng)賦值
VARCHAR 字符串類(lèi)型(指定長(zhǎng)度):NAME VARCHAR(20) 實(shí)例-- 學(xué)生表
-- 編號(hào) 姓名 年齡 分?jǐn)?shù) 出生日期 添加時(shí)間
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)
-- 檢查表結(jié)構(gòu)
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)
-- 復(fù)制表
mysql> CREATE TABLE STU LIKE STU_MESSAGE;
R(Retrieve):查詢(xún)-- 查詢(xún)某個(gè)數(shù)據(jù)庫(kù)當(dāng)中的表名稱(chēng)
mysql> SHOW TABLES;
----------------
| Tables_in_city |
----------------
| student |
----------------
-- 查詢(xún)表的創(chuàng)建語(yǔ)句
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 |
--------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 查詢(xún)表結(jié)構(gòu)
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 | |
-------------------------- ----------------------------------- ------ ----- ----------------------- -------
U(Update):修改-- 修改表名
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;
-- 修改列的名稱(chēng)和數(shù)據(jù)類(lèi)型
mysql> ALTER TABLE STUDENT CHANGE GENDER SEX VARCHAR(20);
-- 修改列的數(shù)據(jù)類(lèi)型
mysql> ALTER TABLE STUDENT MODIFY SEX VARCHAR(10);
D(Delete):刪除-- 先判斷表是否存在,然后刪除
mysql> DROP TABLE IF EXISTS STUDENT;
DML:增刪改表中數(shù)據(jù)添加數(shù)據(jù)INSERT INTO TABLE_NAME(NAME1,NAME2,...,NAMEn)VALUES (VALUE1,VALUE2,...,VALUEn); 注意事項(xiàng)1、列名和值要一一對(duì)應(yīng)
2、如果表名后面不定義列名,則默認(rèn)給所有列添加值
3、除了數(shù)字之外的其他類(lèi)型需要雙引號(hào)或者是單引號(hào) 實(shí)例INSERT INTO STUDENT(ID, NAME, AGE) VALUES (1, '張無(wú)忌', 18);
INSERT INTO student VALUES(2, '趙敏', 17, 99.9, '20000510', CURRENT_TIMESTAMP()); 刪除數(shù)據(jù)DELETE FROM TABLE_NAME WHERE CONDITION; 注意事項(xiàng)1、如果不加條件,就是刪除表中所有數(shù)據(jù)
2、如果要?jiǎng)h除全部的數(shù)據(jù),最好采用TRUNCATE,因?yàn)槿绻遣捎肈ELETE,有多少的數(shù)據(jù)就會(huì)執(zhí)行多少次,效率特別低 實(shí)例-- 刪除符合條件的數(shù)據(jù)
DELETE FROM STUDENT WHERE ID = 1;
-- 刪除全部數(shù)據(jù)(執(zhí)行兩個(gè)操作,刪除表,然后再創(chuàng)建一個(gè)一模一樣的空表)
TRUNCATE TABLE STUDENT; 修改數(shù)據(jù)UPDATE TABLE_NAME SET NAME1 = VALUE1, NAME2 = VALUE2,..., NAMEn = VALUEn WHERE CONDITION; 注意事項(xiàng)1、如果不加任何條件,則將表中的全部數(shù)據(jù)進(jìn)行修改 實(shí)例UPDATE STUDENT SET AGE = 117 WHERE NAME = '趙敏'; DQL:查詢(xún)SELECT * FROM TABLE_NAME;
|