SQL 语句初识

1. SQL 语句定义

SQL(Structured Query Language)是一种标准化的数据库查询语言,用于管理和操作关系型数据库。SQL 语句主要可以分为以下几个类别:

  1. 数据定义语言 (DDL, Data Definition Language),DDL语句用于定义和修改数据库结构,例如创建、修改或删除数据库、表、索引等结构。
    • CREATE(create):创建数据库、表、视图、索引等新结构。
    • ALTER(alter):修改已存在的数据库对象的结构,例如添加或删除表的列。
    • DROP(drop):删除数据库、表、视图、索引等结构。
    • TRUNCATE(truncate):删除表中的所有行,但不删除表本身。
  2. 数据操纵语言 (DML, Data Manipulation Language),DML语句用于管理数据库中的数据,包括增加、更新、删除和查询数据。
    • INSERT:向表中插入新行。
    • UPDATE:更新表中的数据。
    • DELETE:从表中删除行。
    • SELECT:查询表中的数据。
  3. 数据控制语言 (DCL, Data Control Language),DCL语句用于定义对数据的访问权限和安全级别,主要涉及用户权限的管理。
    • GRANT:授予用户或角色某种特定的权限。
    • REVOKE:撤销之前授予的权限。
  4. 事务控制语言 (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;
SQL

2.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;
SQL

2.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=rootand 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 语句用法在后面的章节详细介绍。

上一篇
下一篇