1. SQL 语句定义
SQL(Structured Query Language)是一种标准化的数据库查询语言,用于管理和操作关系型数据库。SQL 语句主要可以分为以下几个类别:
- 数据定义语言 (DDL, Data Definition Language),DDL语句用于定义和修改数据库结构,例如创建、修改或删除数据库、表、索引等结构。
- CREATE(create):创建数据库、表、视图、索引等新结构。
- ALTER(alter):修改已存在的数据库对象的结构,例如添加或删除表的列。
- DROP(drop):删除数据库、表、视图、索引等结构。
- TRUNCATE(truncate):删除表中的所有行,但不删除表本身。
- 数据操纵语言 (DML, Data Manipulation Language),DML语句用于管理数据库中的数据,包括增加、更新、删除和查询数据。
- INSERT:向表中插入新行。
- UPDATE:更新表中的数据。
- DELETE:从表中删除行。
- SELECT:查询表中的数据。
- 数据控制语言 (DCL, Data Control Language),DCL语句用于定义对数据的访问权限和安全级别,主要涉及用户权限的管理。
- GRANT:授予用户或角色某种特定的权限。
- REVOKE:撤销之前授予的权限。
- 事务控制语言 (TCL, Transaction Control Language),TCL语句用于管理数据库事务,以确保数据的完整性和一致性。
- BEGIN TRANSACTION 或 START TRANSACTION:开始一个新事务。
- COMMIT:提交当前事务,使自事务开始以来进行的所有更改成为永久性的。
- ROLLBACK:回滚当前事务,撤销自事务开始以来进行的所有更改。
2. SQL 基础语句示例
2.1. 操作库的 SQL 语句
创建数据库:
-- 创建数据库db1,并指定字符编码
create database db1 charset utf8;
-- 如果数据库已存在会报错,可使用 IF NOT EXISTS
create database if not exists db1 charset utf8;
SQL删除数据库:
-- 删除数据库db1
drop database db1;
SQL查看数据库:
-- 查看所有数据库
show databases;
-- 显示创建db1的数据库时使用的SQL语句
show create database db1;
-- 显示当前所在的数据库
select database();
SQL修改数据库:
-- 修改数据库db1的字符编码(一般不会使用)
alter database db1 charset latin1;
SQL2.2. 操作表的 SQL 语句
操作数据表时需切换到相应数据库:
use 数据库名;
SQL增加数据表:
/*
* 创建数据表通用语法
* 注意:
* 1. 在同一张表中,字段名不能相同
* 2. 宽度和约束条件可选
* 3. 字段名和类型是必须的
*/
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
-- 示例
create database db1;
use db1;
create table t1(
id int,
name varchar(50),
sex enum('male','female'),
age int(3)
);
SQL查看数据表:
-- 查看数据库db1下的所有表
show tables;
-- 查看数据表的结构
desc t1;
show create table t1\G;
-- 查看表 t1 中 id、name、sex 和 age 这四列的所有数据
select id,name,sex,age from t1;
-- * 表示查看表所有数据
select * from t1;
SQL修改数据表:
-- 添加字段
alter table t1
add name varchar(20) not null,
add age int(3) not null default 22;
alter table t1
add stu_num varchar(10) not null after name; -- 添加在name字段之后
alter table t1
add sex enum('male','female') default 'male' first; -- 添加到最前面
-- 删除字段
alter table t1
drop sex;
-- 修改字段类型modify
alter table t1
modify age int(3);
alter table t1
modify id int(11) not null primary key auto_increment; -- 修改为主键
-- 增加约束(针对已有的主键增加auto_increment)
alter table t1
modify id int(11) not null auto_increment;
-- 对已经存在的表增加复合主键
alter table t1
add primary key(host_ip,port);
-- 增加主键
alter table t1
modify name varchar(10) not null primary key;
-- 增加主键和自动增长
alter table t1
modify id int not null primary key auto_increment;
-- 删除自增约束
alter table t1
modify id int(11) not null;
-- 删除主键
alter table t1
drop primary key;
SQL复制数据表:
-- 复制表结构+记录 (key不会复制: 主键、外键和索引)
create table new_service select * from service;
-- 只复制表结构
create table new1_service select * from service where 1=2; -- 将条件设置为假,不会查询到任何数据,所以只复制了表结构
create table t4 like employees;
SQL删除数据表:
drop table t1;
SQL2.3. 操作表内数据的 SQL 语句
插入数据:
-- 插入完整数据(顺序插入)
-- 语法一:
INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);
-- 语法二:
INSERT INTO 表名 VALUES (值1,值2,值3…值n);
-- 指定字段插入数据
INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);
-- 插入多条记录
INSERT INTO 表名 VALUES
(值1,值2,值3…值n),
(值1,值2,值3…值n),
(值1,值2,值3…值n);
-- 插入查询结果
INSERT INTO 表名(字段1,字段2,字段3…字段n)
SELECT (字段1,字段2,字段3…字段n) FROM 表2
WHERE …;
SQL更新数据:
UPDATE 表名 SET
字段1=值1,
字段2=值2,
WHERE CONDITION;
-- 示例:
UPDATE mysql.user SET password=password(‘123’)
where user=’root’ and host=’localhost’;
SQL删除数据:
-- 语法:
DELETE FROM table_name WHERE CONITION;
-- 示例:
DELETE FROM mysql.user WHERE password='';
SQL查询数据:
SELECT column1, column2 FROM table_name WHERE condition;
SQL详细的 SQL 语句用法在后面的章节详细介绍。