SQL 一、SQL Structured Query Language:结构化查询语言,缩写为SQL 其实就是定义了操作所有关系型数据库的规则,标准组织指定的规则 每一种数据库操作的方式不一样的地方称之为'方言' 二、SQL通用语法 SQL语句可以单行或者多行书写,以分号结尾 可以使用空格和缩进来增强语句的可读性 MySQL数据库的SQL语句不区分大小写,但是关键字建议大写 注释方式 -- 单行注释('--'之后必须加空格)
#单行注释
/*
多行
注释
*/
三、SQL的分类 DDL(Data Definition Language):数据定义语言 操作数据库和表 DML(Data Manipulation Language):数据库操作语言 增删改表中的数据 DQL(Data Query Language):数据查询语言 查询表 DCL(Data Control Language):数据库控制语言 授权操作权限 DDL:操作数据库、表 1、操作数据库:CRUD C(Create):创建 -- 创建数据库
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;
R(Retrieve):查询-- 查询数据库的名称
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' */ |
---------- ---------------------------------------------------------------------------------------------------------------------------------
U(Update):修改-- 修改数据库的字符集
mysql> ALTER DATABASE SCHOOL CHARACTER SET UTF8;
D(Delete):删除-- 删除数据库
mysql> DROP DATABASE SCHOOL;
-- 先判断数据库是否存在,如果存在才删除
mysql> DROP DATABASE IF EXISTS SCHOOL;
使用数据库-- 使用数据库
mysql> USE CITY;
-- 查询当前正在使用的数据库名称
mysql> SELECT DATABASE();
------------
| DATABASE() |
------------
| city |
------------
1 row in set (0.00 sec)
2、操作表C(Create):创建基本语法:CREATE TABLE 表名(
列名1,数据类型1,
列名2,数据类型2,
列名3,数据类型3
......
列名n,数据类型n
);
#最后一行不需要加逗号 常用数据类型: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) 实例-- 学生表
-- 编号 姓名 年龄 分数 出生日期 添加时间
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;
R(Retrieve):查询-- 查询某个数据库当中的表名称
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 | |
-------------------------- ----------------------------------- ------ ----- ----------------------- -------
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;
-- 修改列的名称和数据类型
mysql> ALTER TABLE STUDENT CHANGE GENDER SEX VARCHAR(20);
-- 修改列的数据类型
mysql> ALTER TABLE STUDENT MODIFY SEX VARCHAR(10);
D(Delete):删除-- 先判断表是否存在,然后删除
mysql> DROP TABLE IF EXISTS STUDENT;
DML:增删改表中数据添加数据INSERT INTO TABLE_NAME(NAME1,NAME2,...,NAMEn)VALUES (VALUE1,VALUE2,...,VALUEn); 注意事项1、列名和值要一一对应
2、如果表名后面不定义列名,则默认给所有列添加值
3、除了数字之外的其他类型需要双引号或者是单引号 实例INSERT INTO STUDENT(ID, NAME, AGE) VALUES (1, '张无忌', 18);
INSERT INTO student VALUES(2, '赵敏', 17, 99.9, '20000510', CURRENT_TIMESTAMP()); 删除数据DELETE FROM TABLE_NAME WHERE CONDITION; 注意事项1、如果不加条件,就是删除表中所有数据
2、如果要删除全部的数据,最好采用TRUNCATE,因为如果是采用DELETE,有多少的数据就会执行多少次,效率特别低 实例-- 删除符合条件的数据
DELETE FROM STUDENT WHERE ID = 1;
-- 删除全部数据(执行两个操作,删除表,然后再创建一个一模一样的空表)
TRUNCATE TABLE STUDENT; 修改数据UPDATE TABLE_NAME SET NAME1 = VALUE1, NAME2 = VALUE2,..., NAMEn = VALUEn WHERE CONDITION; 注意事项1、如果不加任何条件,则将表中的全部数据进行修改 实例UPDATE STUDENT SET AGE = 117 WHERE NAME = '赵敏'; DQL:查询SELECT * FROM TABLE_NAME;
|